因为我有一大堆https证书每天都在变化(具有多个域的大量多租户应用程序),所以我有一个脚本可能会在随机时间重新加载haproxy。 这工作正常。
当我向他们部署新版本的应用程序时,我也将后端服务器设置为MAINT。 这也很好。
麻烦的是,如果重新加载,我已经设置为MAINT状态的任何服务器都将重新加载为READY。 这让客户看到等待甚至错误消息。
有没有办法保持重新加载haproxy时后端服务器的当前状态?
不知道您使用的是哪个版本,以下需要HAProxy >= 1.6~ HAProxy :
您可能需要查看允许的load-server-state-from-file指令
无缝重新加载HAProxy。
该指令将HAProxy指向一个文件,在该文件中保存了之前正在运行的进程的服务器状态。 这样,启动时,在处理stream量之前,如果没有重新加载,新进程可以将旧状态应用到服务器。 […]
(这只是一个摘录,更多细节请看链接。)
使用这个,你的configuration可能看起来像(只显示相关部分):
global server-state-file /var/lib/haproxy/server-state stats socket /var/lib/haproxy/stats defaults load-server-state-from-file global
您的重新加载命令可能如下所示:
socat /var/lib/haproxy/stats - <<< \"show servers state\" > /var/lib/haproxy/server-state && systemctl reload-or-restart haproxy
那是:
socat连接到stats套接字,获取服务器和/或后端的状态并写入状态文件。 HAProxy 。