Estou tentando Tomcat Clustering
com mod_jk
há meses e, até agora, não está tão ruim, mas enfrentei um problema durante a implantação. Estou usando FarmDeployer
para copiar e implantar o WAR em outros nós no cluster, mas na maioria das vezes o WAR não é implementado corretamente e, assim, deixa a página em 404
error. Mesmo depois de remover o diretório war explodido e novamente ter o tomcat extraído o WAR, o navegador não pôde renderizar o site real até que eu reinicie / pare o serviço tomcat naquele nó em particular (é claro, link funciona se a guerra foi reimplantada, mas não o link uma vez que a página 404 foi renderizada. E também acho que esse problema está relacionado ao navegador (tentei todos os navegadores) como a página renderizada em outros computadores quando reimplantada após o erro 404. Eu também tentei fail_on_status
e por isso coloca os nós no estágio de erro que sempre render 404 status HTTP e redirecionar para outro nó, mas em meu teste, descobri que ele coloca completamente os nós para estado de erro e nenhuma solicitação é enviada para esses nós até reiniciar embora estejam de volta ao trabalho.
Workers.properties no balanceador de carga:
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
Alguém tem alguma idéia de pular o nó de erro 404 e, em vez disso, acertar outros nós implementados corretamente ?. Pelo menos, quaisquer dicas de configuração, se alguma coisa, para que ele processa a página atual depois de enfrentar 404 tendo stickey session
habilitado.
Atualização: 1
Apache Virtual Hosting no balanceador de carga (192.168.1.5 ou balancer1):
<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>
Hospedagem virtual do Tomcat comum em todos os nós:
<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 "%r" %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"/>
NO replicação de sessão com o armazenamento em cluster do tomcat : desativado por enquanto comentando <cluster>
elemento, pois está consumindo muita memória atualizando e interagindo todas as vezes entre si no cluster. Por enquanto eu tenho Load balancing
e Auto Failover
com mod_jk
ou proxy_ajp
MAS com problema de erro 404 quando myapp está indisponível (e disponível novamente) conforme descrito acima.
Como todos lidam com isso?