HAproxy被动健康检查

时间:2016-04-25 05:37:11

标签: load-balancing haproxy

我是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秒之间。

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

有没有办法做到这一点,或者我应该尝试别的东西,以便我的用户不会收到错误?

1 个答案:

答案 0 :(得分:2)

默认情况下,haproxy将以1秒的间隔重试3次(retries相同的后端。为了允许采用另一个后端,您应该设置option redispatch

还要考虑(小心地,它可以是hamrfull):

注意:Haproxy仅在连接错误时重试(例如,在您的情况下为ECONNNREFUSED),它不会重新发送/重新提交请求/数据。