因为我有大量每天都在变化的 https 证书(具有许多域的大型多租户应用程序),所以我有一个脚本,可以在几乎随机的时间重新加载 haproxy。这工作正常。
当我向后端服务器部署新版本的应用程序时,我还将后端服务器设置为 MAINT。这也很好用。
麻烦的是,如果重新加载发生,我设置为 MAINT 状态的任何服务器都会重新加载为 READY。这让客户可以看到等待甚至错误消息。
有没有办法在重新加载 haproxy 时保留后端服务器的当前状态?
不确定您使用的是哪个版本,以下需要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
。