Tomcat mod_jk群集跳过404 http状态

我正在尝试使用mod_jk Tomcat Clustering几个月,到目前为止没有那么糟糕,但在部署期间面临一个问题。 我正在使用FarmDeployer将WAR复制并部署到集群中的其他节点,但大部分时间WAR未正确部署,从而使页面出现404错误。 即使在删除爆炸的战争目录并再次使用tomcat提取WAR之后,浏览器仍然无法渲染实际的站点,直到我重新启动/停止该特定节点上的tomcat服务(当然, http:// node-ip / myapp工作如果重新部署的战争,而不是http://site1.mydomain.net一次呈现404页)。 而且我认为这个问题是与浏览器相关的(尝试所有的浏览器),当在404错误之后重新部署时在其他计算机上呈现的页面。 我也尝试fail_on_status ,所以它把节点错误阶段,曾经呈现404 HTTP状态,并redirect到其他节点,但在我的testing,我发现它完全把这些节点错误状态,没有请求发送到这些节点,直到重新启动他们正在回来工作。

负载平衡器上的Workers.properties:

 workers.tomcat_home=/usr/share/tomcat workers.java_home=/usr/lib/jvm/java-6-openjdk ps=/ worker.list=cluster,balancer1,status worker.balancer1.port=8009 worker.balancer1.host=localhost worker.balancer1.type=ajp13 worker.balancer1.lbfactor=2 worker.balancer1.cache_timeout=20 worker.balancer1.socket_timeout=20 #worker.balancer1.fail_on_status=-404,-503 worker.web1.port=8009 worker.web1.host=192.168.1.8 worker.web1.type=ajp13 worker.web1.lbfactor=4 worker.web1.redirect=web2 worker.web1.cache_timeout=20 worker.web1.socket_timeout=20 #worker.web1.fail_on_status=-404,-503 worker.web2.port=8009 worker.web2.host=192.168.1.9 worker.web2.type=ajp13 worker.web2.lbfactor=4 worker.web2.redirect=web1 worker.web2.cache_timeout=20 worker.web2.socket_timeout=20 #worker.web2.fail_on_status=-404,503 worker.cluster.type=lb worker.cluster.balance_workers=web1,web2,balancer1 worker.cluster.sticky_session=True worker.cluster.sticky_session_force=False # Status worker for managing load balancer worker.status.type=status 

任何人有任何想法跳过404错误节点,而不是打其他正确部署的节点? 至less在configuration中有任何提示,以便在面对启用了stickey session 404之后呈现实际页面。

更新:1

负载均衡器(192.168.1.5或balancer1)上的Apache虚拟主机:

 <VirtualHost *:80> ServerName site1.mydomain.net JkAutoAlias /usr/share/tomcat/webapps/myapp DocumentRoot /usr/share/tomcat/webapps/myapp JkMount / cluster JkMount /* cluster JkMount /*.jsp cluster JkUnMount /myapp/*.html cluster JkUnMount /myapp/*.jpg cluster JkUnMount /myapp/*.gif cluster JkUnMount /myapp/*.png cluster JkUnMount /myapp/*.css cluster JkUnMount /abc cluster JkUnMount /abc/* cluster JkUnMount /*.html cluster JkUnMount /*.jpg cluster JkUnMount /*.gif cluster JkUnMount /*.png cluster JkUnMount /*.css cluster ProxyRequests Off ProxyPreserveHost On ProxyVia On <Proxy balancer://ajpCluster/> Order deny,allow Allow from all BalancerMember ajp://192.168.1.8:8009/ route=web1 ttl=60 timeout=20 retry=10 BalancerMember ajp://192.168.1.9:8009/ route=web2 ttl=60 timeout=20 retry=10 BalancerMember ajp://192.168.1.5:8009/ route=balancer1 status=+H ttl=60 ProxySet lbmethod=byrequests ProxySet stickysession=JSESSIONID|jsessionid </Proxy> <Location /> ProxyPass balancer://ajpCluster/ nofailover=off ProxyPassReverse balancer://ajpCluster/ </Location> </VirtualHost> 

Tomcat虚拟主机在所有节点上通用:

 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> <Host name="site1.mydomain.net" debug="0" appBase="webapps" unpackWARs="false" autoDeploy="false" deployOnStartup="false"> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="virtual_log1." suffix=".log" timestamp="true"/> <Context path="" docBase="/usr/share/tomcat/webapps/myapps" debug="0" reloadable="true"/> 

没有使用tomcat集群进行会话复制 :现在通过注释<cluster>元素禁用,因为它消耗了大量的内存更新,并在集群中互相交互。 现在我有Load balancingAuto Failovermod_jkproxy_ajp但404错误的问题,当myapp不可用(和再次可用)如上所述。 大家如何处理?

到目前为止,我唯一能find的解决scheme是在部署过程中禁用Web服务器,只留下一台主机。 部署成功后,激活Web服务器并通过禁用它来单独更新左后端服务器。 可能我们可以在虚拟主机中使用代理balancer-manager或在workers.properties中使用mod_jk的jkstatus来激活/ jkstatus ,例如:

代理

 # Balancer-manager, for monitoring ProxyPass /balancer-manager ! <Location /balancer-manager> SetHandler balancer-manager Order deny,allow Deny from None Allow from all </Location> 

mod_jk

 worker.list=cluster,status ................ ............. ....... # Status worker for managing load balancer worker.status.type=status 

需要大量的用户干预!