HAproxy 被动健康检查

HAproxy passive health checking

我是 haproxy 和负载平衡的新手。我想看看在代理处于 运行.

时关闭后端主机时会发生什么

问题是,如果我关闭其中一个后端并刷新浏览器,页面会立即向用户显示 503 错误。在下一个页面加载后,它不再收到错误,因为大概后端已从池中删除。

作为测试,我设置了两个后端 Flask 应用程序并配置了 HAProxy 来平衡它们,如下所示:

backend app
    mode    http
    balanace    roundrobin
    server app1 127.0.0.1:5001 check
    server app2 127.0.0.1:5002 check

我的理解是这样的: https://www.haproxy.com/doc/aloha/7.0/haproxy/healthchecks.html#check-parameters

是每 2 秒 ping 一次后端主机以查看它们是否启动。然后,如果它们关闭,它们就会从池中移除。 5xx 错误发生在我杀死后端和 2 秒之间。

我认为有一种方法可以通过让 HAProxy 执行一些逻辑来解决这个 5xx 错误,这样如果来自前端的请求失败,它就会从池中删除失败的后端,然后切换到另一个并提出另一个要求。这样用户就永远不会看到失败。

有没有办法做到这一点,或者我应该尝试其他方法以免我的用户收到错误消息?

默认haproxy会重试3次(retries) with 1s intervals to the same backend. In order to allow to take another backend you should set option redispatch.

同时考虑(小心,这可能是有害的):

注意:Haproxy 仅在出现连接错误时重试(例如 ECONNNREFUSED,就像您的情况一样),它不会 resend/resubmit request/data.