AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 908380
Accepted
yakatz
yakatz
Asked: 2018-04-19 15:30:39 +0800 CST2018-04-19 15:30:39 +0800 CST 2018-04-19 15:30:39 +0800 CST

停止前始终保存 HAProxy 服务器状态

  • 772

我们有时使用管理套接字禁用 HAProxy 中的特定服务器(在 RedHat 7 上运行,但在本地编译,因为 RedHat 不提供 1.8),我们希望在服务器重新启动时保持状态。我们将 HAProxy 设置为从带有 的文件中加载其状态server-state-file,但我们需要记住每次进行更改时都保存状态文件。有没有一种好方法可以确保每次服务器停止时都保存状态?
如果 systemd 有ExecPreStop=,我们可以在/etc/systemd/system不修改分布式单元文件的情况下将其从文件中包含在内,但 systemd 开发人员表示他们认为不需要该指令。

haproxy
  • 2 2 个回答
  • 755 Views

2 个回答

  • Voted
  1. Best Answer
    yakatz
    2018-04-19T15:30:39+08:002018-04-19T15:30:39+08:00

    我们最终创建了一个“假”服务,只有一个依赖于的停止操作,haproxy.service因此它将ExecStop在 HAProxy 停止之前运行。

    haproxy-state.service:

    [Unit]
    Description=Save HAProxy State Before Service Stop
    After=haproxy.service
    Requires=haproxy.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=true
    ExecStop=/bin/sh -c "/usr/bin/socat /run/haproxy/control.socket - <<< \"show servers state\" > /var/lib/haproxy/last_state"
    
    [Install]
    WantedBy=multi-user.target haproxy.service
    

    它需要在之后,所以它会 在之前haproxy.service停止。它需要这样才能在 HAProxy 运行时始终启动。WantedBy

    这并不完美,因为如果在 systemd 停止下一个服务之前有很长的暂停,状态可能会改变,但这是我们将承担的风险。

    • 1
  2. Teodor
    2020-12-30T02:57:56+08:002020-12-30T02:57:56+08:00

    您可以考虑在导出其状态之前禁用所有可用frontend和部分。listen类似于运行以下 bash 行(对于每个部分):echo 'disable frontend https_frontend' | socat /run/haproxy/admin.sock stdio.

    也可以通过所有frontend和listen部分考虑特定的acl来完成。这将允许您通过分别运行一个命令来在逻辑上启用/禁用它们:add acl ...' | socat /run/haproxy/admin.sock stdio和del acl ...' | socat /run/haproxy/admin.sock stdio。

    • -1

相关问题

  • 具有动态路由的代理服务器

  • nginx 访问日志忽略某些请求

  • HAProxy 和“分片”

  • 带有 HAProxy 的远程 IP

  • SSL 网站的高可用性

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve