HA Tomcat集群:崩溃后的起始节点

时间:2015-05-26 11:00:19

标签: java tomcat nginx cluster-computing reverse-proxy

我想在nginx反向代理后面运行一个tomcat(v7)集群。 在我的testenviroment中,我设置了tomcat集群(2个节点[A / B])与会话复制和nginx作为反向代理(循环)。

当两个节点(A和B)都在运行时,nginx将通过循环中继请求。

  • 第一个请求=>节点A
  • 第二次请求=>节点B
  • 第3次请求=>节点A ......

一切正常,即使我停止了一个tomcat节点(节点B)。

  • 第一个请求=>节点A
  • 第二次请求=>节点A
  • 第3次请求=>节点A ......

现在的问题是:当我启动一个节点B时(例如重启机器后),nginx正试图将每个第二个请求中继到节点B,但它需要几分钟才能启动(节点正在运行~300个应用程序所以它需要〜20分钟才能启动)而节点B上的tomcat正在回答此请求,但无法将应用程序显示给客户端。所以每一个请求都会在超时时间结束......

有没有办法配置tomcat,在完成启动过程之前停止回复请求?

1 个答案:

答案 0 :(得分:0)

您需要适当地配置nginx运行状况检查。有一些扩展(例如https://github.com/yaoweibin/nginx_upstream_check_module)允许为helth端点指定url

一种可能的解决方案可能是: 为所有应用添加健康端点,创建并部署health-management-app,这将要求所有应用的健康状况(准备就绪),并在获得所有已部署应用的肯定答案后立即恢复状态。

这只是想法,但希望它能帮到你。

P.S。这个想法借鉴了spring-boot-actuator框架。它具有/管理/健康终点,如果依赖于其他服务(例如mongodb或elasticsearch),则询问所有健康服务,并且只有在所有回复都是肯定的情况下才会返回正面状态。