我想在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个应用程序所以它需要〜节点B上的tomcat正在回答此请求,但无法向客户端显示应用程序 . 所以每一个请求都会在超时时间结束......
有没有办法配置tomcat,停止应答请求,直到它完成启动程序?
1 回答
您需要适当地配置nginx运行状况检查 . 有几个扩展(例如https://github.com/yaoweibin/nginx_upstream_check_module)允许为helth endpoints 指定
url
.一种可能的解决方案可能是:为所有应用添加 Health endpoints ,创建和部署
health-management-app
,这将要求所有应用的 Health 状况(准备就绪),并在获得所有已部署应用的肯定答案后立即返回状态 .这只是想法,但希望它会对你有所帮助 .
附:这个想法借鉴了spring-boot-actuator框架 . 它具有/管理/ Health 终点,如果依赖于其他服务(例如mongodb或elasticsearch),则询问所有 Health 服务,并且只有在所有响应都是肯定的情况下才返回正状态 .