Apache mod_proxy_balancer + Tomcat 负载平衡 - 在 Web 应用程序准备就绪之前不应重定向

Apache mod_proxy_balancer + Tomcat 负载平衡 - 在 Web 应用程序准备就绪之前不应重定向

我在用阿帕奇2 mod_proxy并将mod_proxy_balancer负载平衡到 4 个独立的tomcat8不同服务器上的实例。我使用不同的急性日照每个 tomcat 实例的端口并使用虚拟机路由tomcat 中的指令server.xml,如下所示:第一个实例:

<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">

等等。

在 apache2 配置中,我定义了一个集群,如下所示:

<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 实例关闭,负载平衡器不会重定向到该实例。到目前为止,一切都运行良好。

但问题是,当我在 tomcat 实例上触发部署时,我会逐个停止它们,上传新的工件并重新启动实例。但是,负载平衡器甚至在 Web 应用程序工件部署、初始化和准备就绪之前就重定向了 tomcat 实例。因此,如果用户向尚未准备好的 URL 发出请求,他将面临空白屏幕。

在 Web 应用程序完全准备就绪之前,我该如何处理这种情况以防止重定向?我如何检查它们的状态?

任何帮助深表感谢。

答案1

可能最好的方法是构建一种状态 servlet,它知道如何检查您所需的上下文(战争)是否完全可操作并利用failonstatus指令。

另一个选择是使用http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html#balancer_manager在您的部署中。步骤如下:

  • 禁用工人
  • 部署
  • 等待启动/检查
  • 启用工作者

相关内容