我们在tcp模式下使用haproxy进行thrift(rpc)服务器负载 balancer . 但是,当后端服务器重新启动时,我们遇到了一个问题 .

当我们的thrift(rpc)服务器重新启动时,它首先停止侦听haproxy配置为连接的端口,但仍将处理正在运行的请求,直到它们全部完成(正常重启) .

因此,在重新启动期间,仍有通过haproxy从客户端到后端服务器连接的套接字,而后端服务器不接受任何新连接,但是haproxy仍然认为这个后端服务器是 Health 的,并将调度到该服务器的新连接 . 分派给此服务器的任何新连接都需要很长时间才能连接,然后超时 .

有没有办法通知haproxy服务器已经停止监听而不是发送任何连接呢?

我试过以下:

  • timeout connect 设置为非常低 redispatch retry 3

  • option tcp-check

两者都没有解决问题 .