/Apache2-->Tomcat 7
/ ---node1--
/
http
/
https/http --> ApacheLoadBalancer [mod_proxy_http]
\
\
http
\
\
\Apahe2-->Tomcat 7
---node2---
.......mode nodes ...
目前我正在使用 Apache 负载平衡器mod_proxy_http
在两个节点之间平衡负载,每个节点前面的 tomcat7 和 apache2,基本上我是在两个 Apache 节点上进行负载平衡。在任何一个节点上,如果 tomcat 由于某种原因停止/失败,我希望停止该节点上的 Apache,以便负载平衡器识别出不可用的节点并分配负载。目前,即使任何节点上的 tomcat 关闭,由于 Apache 处于启动状态(每个节点上的 tomcat 前面的 Apache),负载平衡器也会认为该节点仍然可用并发送请求.. 并最终失败。有没有办法在后端 tomcat 失败时停止特定节点上的 Apache。我认为这样做的一种方法是运行 cron 作业(继续检查)或 Linux 脚本,以便当 tomcat 关闭时我可以停止 Apache,试图找出是否有更简洁的方法?任何想法。谢谢。
请注意,我们在每个节点上都使用 Apache,而没有直接将 tomcat 暴露给负载均衡器,原因有很多,其中之一是我们在前端 Apache 中再次使用 mod proxy 来导航到不同的 tomcat 池
如果我缩小我的问题范围,除非你有更好的建议。问:当后端 tomcat 关闭/失败时,有没有更干净的方法来停止或向前端 Apache2 发送信号。
注意:我知道平衡器和 Tomcat 之间的直接通信应该可以解决这个问题,但是情况有所不同。
谢谢!
答案1
您应该处理此问题的方式是在负载均衡器上进行一个或多个健康检查,测试实际的 tomcat 应用程序(可以是 jsp ping 页面、应用程序自我检查等)。
当 tomcat 后端或应用程序发生故障时,健康检查页面也会发生故障。负载均衡器将检测到它并停止向后端发送流量,直到后端恢复。