重新加载 haproxy 时保留后端服务器状态

Ros*_*ser 3 haproxy

因为我有大量每天都在变化的 https 证书(具有许多域的大型多租户应用程序),所以我有一个脚本,可以在几乎随机的时间重新加载 haproxy。这工作正常。

当我向后端服务器部署新版本的应用程序时,我还将后端服务器设置为 MAINT。这也很好用。

麻烦的是,如果重新加载发生,我设置为 MAINT 状态的任何服务器都会重新加载为 READY。这让客户可以看到等待甚至错误消息。

有没有办法在重新加载 haproxy 时保留后端服务器的当前状态?

gf_*_*gf_ 8

不确定您使用的是哪个版本,以下需要HAProxy >= 1.6~

你可能想看看load-server-state-from-file指令,它允许

HAProxy 的无缝重新加载。

该指令将 HAProxy 指向一个文件,其中保存了先前运行进程的服务器状态。这样,在启动时,在处理流量之前,如果没有重新加载,新进程可以将旧状态应用于服务器。[...]

(这只是摘录,有关更多详细信息,请点击链接。)

使用它,您的配置可能看起来像(仅显示相关部分):

global
  server-state-file /var/lib/haproxy/server-state
  stats socket /var/lib/haproxy/stats

defaults
  load-server-state-from-file global
Run Code Online (Sandbox Code Playgroud)

您的重新加载命令可能如下所示:

socat /var/lib/haproxy/stats - <<< \"show servers state\" > /var/lib/haproxy/server-state && systemctl reload-or-restart haproxy
Run Code Online (Sandbox Code Playgroud)

那是:

  • stats通过连接到套接字socat,获取服务器和/或后端的状态并写入状态文件。
  • 在此之后,如果一切顺利,请重新加载或重新启动HAProxy