在使服务器退出维护模式之前,如何使HAProxy等待成功的健康检查

我正在使用HAProxy套接字通信将我的后端置于维护模式,然后通过此命令将Web服务器closures以进行维护:

echo "disable server cluster-01/app-01-4" | sudo socat stdio /tmp/haproxy.sock

问题是,当我通过socket enable命令再次标记后端时,HAProxy在向后端发送请求之前不会等待任何成功的健康检查。 因此,在HAProxy意识到服务器仍然closures之前,我们最终失去了一些请求,并将其退出了线路。

有没有办法告诉HAProxy在启用之前等待后端健康? 还是必须让我的启动脚本足够聪明来监视服务器本身,然后再告诉HaProxy启用后端? 这显然不够理想。

我目前正在这样做:
echo "enable server cluster-01/app-01-4" | sudo socat stdio /tmp/haproxy.sock

有什么类似的东西可以用来代替吗? echo "enable server cluster-01/app-01-4 WAIT_FOR_SUCCESSFUL_HEALTH_CHECK" | sudo socat stdio /tmp/haproxy.sock

编辑:我正在使用HAProxy版本1.5倍

enable server ...将服务器恢复服务之前,使用set server proxy-name/server-name health down enable server ...似乎正在执行您所需的操作。

服务器最终会被随后的运行状况检查失效,但如果服务器在运行时运行状况良好,服务器无法正常运行,但在恢复运行时不起作用,因为HAProxy似乎认为服务器将会处于禁用状态时处于相同的健康状态。

您可以移动到haproxy 1.6.3并使用新的代理检查function。 这也可以让你把主机从外面扔掉。

在Loadbalancer.org我们这样做是一个稍微复杂的方法:-)。

在重新启动HAProxy之前,我们检查所有当前的状态,并检查是否存在closures或维护的服务器。

然后,我们阻止SYN数据包(处理重新加载问题的丢弃的stream量)然后,我们重新启动HAProxy

然后我们手动设置所有的状态下降或维护(基于他们是0.01秒前..)

然后我们重新启用SYN数据包…

为我们提供无缝重启所需的结果,而不会停机或丢失数据包。

如果你不能对上述的所有问题感到困扰,那么在重新加载之后,把所有的东西都设置成“closures”状态,快速地穿过你的手指:-)。

v1.6有一些新的状态完全重新启动代码,但我还没有研究它。