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
.
同时考虑(小心,这可能是有害的):
- 减少
fall
(默认为 3),
- 减少
error-limit
(default is 10) and set on-error
到 mark-down
或 sudden-death
- 使用
inter
/fastinter
/downinter
调整健康检查间隔
注意:Haproxy 仅在出现连接错误时重试(例如 ECONNNREFUSED
,就像您的情况一样),它不会 resend/resubmit request/data.
我是 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
.
同时考虑(小心,这可能是有害的):
- 减少
fall
(默认为 3), - 减少
error-limit
(default is 10) and seton-error
到mark-down
或sudden-death
- 使用
inter
/fastinter
/downinter
调整健康检查间隔
注意:Haproxy 仅在出现连接错误时重试(例如 ECONNNREFUSED
,就像您的情况一样),它不会 resend/resubmit request/data.