许多为 tomcat 后端提供服务的 Apache 前端前面的第 4 层负载均衡器可能会崩溃

许多为 tomcat 后端提供服务的 Apache 前端前面的第 4 层负载均衡器可能会崩溃

我有一个设置:

HAProxy 充当第 4 层 LB(仅转发请求、直通、所有前端/后端的 TCP 模式)到多个 Apache 前端。每个 Apache 前端都将流量发送到正在运行应用程序的 tomcat 后端。

现在,如果其中一个 tomcat/应用程序崩溃,相应的 apache 前端会报告错误 503(这是正常的),其他的则正常。

问题是:由于 HAProxy 只是随机地对每个 Apache 进行负载平衡(在我的情况下是基于源 IP),所以一些用户会收到 503 错误(指向 tomcat 不工作),而其他用户则正常工作(指向 tomcat 正常)

有没有办法检测这一点?(并确保用户只被重定向到正常工作的前端/后端)

我想我无法在 HAproxy 方面做任何事情,因为 HAproxy 正在转发到“Apache”后端(并报告它们与端口 443 一样健康)并且看不到真正的后端(tomcat 服务器)。我想我必须在 apache 前端做些什么(例如“如果有 503,则停止 apache”或其他东西)。

有什么想法可以解决这个问题吗?

谢谢 !

附言:如果你想查看配置,请告诉我

答案1

您需要为您的后端定义一个健康检查。

找到一些 tomcat 可以处理而不会产生太多处理开销的简单请求;通常/img/empty.gif会使用类似的东西。重点是,当 tomcat 启动并运行时,可以检查它以提供 HTTP 状态 200,而当 tomcat 不工作时,则提供其他错误。

修改你的haproxy.conf:

listen app1 0.0.0.0:8080
  mode http
  option httpchk GET /img/empty.gif HTTP/1.0
  http-check expect status 200
  server backend1 10.0.0.1:443 check fall 3 rise 2 ssl verify none
  server backend2 10.0.0.2:443 check fall 3 rise 2 ssl verify none

您需要添加的是option httpchkhttp-check行,我假设您已经check在行中有了server

如果执行该操作时服务器未以状态 200 响应httpchk,则该服务器将被从池中移除。当该服务器再次正常响应时,将被重新添加。

相关内容