我正在使用apache2 mod_proxy和mod_proxy_balancer来平衡负载到不同服务器上的4个独立的tomcat8实例。 我为每个tomcat实例使用不同的AJP端口,并在tomcat server.xml使用jvmRoute指令,如下所示:第一个实例:
<Connector port="[port1]" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
第二审:
<Connector port="[port2]" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
等等。
在apache2configuration中,我定义了一个集群,像这样:
<Proxy balancer://myCluster> BalancerMember ajp://[ip1]:[port1] route=tomcat1 loadfactor=1 BalancerMember ajp://[ip2]:[port2] route=tomcat2 loadfactor=1 BalancerMember ajp://[ip3]:[port3] route=tomcat3 loadfactor=1 BalancerMember ajp://[ip4]:[port4] route=tomcat4 loadfactor=1 ProxySet lbmethod=bybusyness ProxySet stickysession=JSESSIONID Order Deny,Allow Deny from none Allow from all </Proxy>
和proxypass指令:
ProxyPass / balancer://myCluster/ ProxyPassReverse / balancer://myCluster/ ...
它按预期工作,负载平衡,因为它应该,如果一个Tomcat实例closures,加载blaancer不会redirect到该实例。 一切都很好,直到这一点。
但问题是,当我在tomcat实例上触发部署时,我一个接一个地停下来,上传新的工件并重启实例。 但是,即使在Web应用程序工件被部署,初始化并准备就绪之前,负载平衡器也会redirecttomcat实例。 因此,如果用户请求尚未准备好的URL,用户将面临空白屏幕。
如何处理这种情况,以防止redirect,直到Web应用程序完全准备好? 我如何检查他们的状态?
任何帮助深表感谢。
可能最好的方法是构build一种状态servlet,知道如何检查您所期望的上下文(war)是否完全运行,并使用failonstatus指令。
另一个select是在您的部署中使用http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html#balancer_manager 。 步骤是: