Haproxy平衡 – 如果第一次超时,请与其他服务器重试

我们使用fastcgi协议运行多个后端服务器,并使用HAproxy在它们之间进行平衡。 这是一个configuration示例:

listen Balancer 192.168.0.1:2000 mode tcp option tcplog timeout connect 2000 timeout server 2000 timeout queue 2000 timeout client 2000 balance leastconn server backend1 192.168.0.2:2000 check inter 2000 rise 2 fall 5 server backend2 192.168.0.3:2000 check inter 2000 rise 2 fall 5 server backend3 192.168.0.4:2000 check inter 2000 rise 2 fall 5 server backend4 192.168.0.5:2000 check inter 2000 rise 2 fall 5 server backend5 192.168.0.6:2000 check inter 2000 rise 2 fall 5 server backend6 192.168.0.7:2000 check inter 2000 rise 2 fall 5 

整个超时设置为2秒,但大多数请求处理0.3秒以下。 问题是,在峰值期间,有时后端不能在2秒内回复查询,然后返回网关超时。

我想要做的是,当select一个服务器(例如backend1),并且在1秒内未能发送应答时,HAproxy会select另一个后端并重试。 如果在1秒内再次失败,超时将发生。

所以,不要等待一个服务器2秒,有可能首先等待1秒,如果失败,尝试另一个,然后失败?

如果我正确地阅读你的问题,使用设置timeout server到1秒(1000毫秒),并使用option redispatch应该给你想要的效果。

选项重新发布
没有选项redispatch
在连接失败的情况下,启用或禁用会话重新分配在HTTP模式下,如果由Cookie指定的服务器closures,则客户端可能会坚持使用它,因为它们无法刷新cookie,因此无法再访问该服务。

指定“选项redispatch”将允许代理破坏其持久性并将其重新分发到工作服务器。

它还允许在多个连接失败的情况下重试上次连接到另一个服务器。 当然,它需要将“重试”设置为非零值。

这种forms是首选的forms,它取代了“redispatch”和“redisp”两个关键字。

如果在“默认值”部分中启用了此选项,则可以在特定实例中通过在其前面加上“否”关键字来禁用该选项。