如果服务器在健康检查之前发生故障,HAProxy 将返回错误

如果服务器在健康检查之前发生故障,HAProxy 将返回错误

假设我的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。这会导致在另一台服务器上重试失败的请求。

相关内容