我们有时使用管理套接字禁用 HAProxy 中的特定服务器(在 RedHat 7 上运行,但在本地编译,因为 RedHat 不提供 1.8),我们希望在服务器重新启动时保持状态。我们将 HAProxy 设置为从带有 的文件中加载其状态server-state-file
,但我们需要记住每次进行更改时都保存状态文件。有没有一种好方法可以确保每次服务器停止时都保存状态?
如果 systemd 有ExecPreStop=
,我们可以在/etc/systemd/system
不修改分布式单元文件的情况下将其从文件中包含在内,但 systemd 开发人员表示他们认为不需要该指令。
我们最终创建了一个“假”服务,只有一个依赖于的停止操作,
haproxy.service
因此它将ExecStop
在 HAProxy 停止之前运行。haproxy-state.service:
它需要在之后,所以它会 在之前
haproxy.service
停止。它需要这样才能在 HAProxy 运行时始终启动。WantedBy
这并不完美,因为如果在 systemd 停止下一个服务之前有很长的暂停,状态可能会改变,但这是我们将承担的风险。
您可以考虑在导出其状态之前禁用所有可用
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
。