假设我的web01
后端服务器列表中有一个,并且web01
发生故障。HAProxy 需要几秒钟才能注意到服务器已关闭(取决于健康检查间隔和超时时间),并将其从轮换中移除。如果请求进入前一旦发生这种情况,客户端最终将收到503 Service Unavailable
错误。
我想喜欢HAProxy 自动重试在另一台服务器上再次执行相同的请求。我意识到请求最终会变得非常慢,但最终会成功而不是错误。
有没有办法配置 HAProxy 以在另一台服务器上重试 HTTP 请求而不是出错?理想情况下,如果集群中有任何正在工作的服务器,我永远不希望客户端收到错误。
这是我的haproxy.cfg:
global
maxconn 4096
debug
defaults
mode http
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend http-in
bind *:80
acl service1 path_reg ^/service1/
acl service2 path_reg ^/service2/
use_backend service1 if service1
use_backend service2 if service2
backend service1
server web01 127.0.0.1:85 check
server web02 127.0.0.1:86 check
reqrep ^([^\ :]*)\ /service1/(.*) \1\ /\2
backend service2
server web03 127.0.0.1:87 check
server web04 127.0.0.1:88 check
reqrep ^([^\ :]*)\ /service2/(.*) \1\ /\2
答案1
你想要option redispatch
。这会导致在另一台服务器上重试失败的请求。