Apache mod_proxy_balancer + Balanceamento de carga do Tomcat - Não deve redirecionar até que os aplicativos da Web estejam prontos

1

Estou usando apache2 mod_proxy e mod_proxy_balancer para equilibrar a carga em 4 instâncias separadas tomcat8 em servidores diferentes. Estou usando portas AJP diferentes para cada instância do tomcat e usando a diretiva jvmRoute no tomcat server.xml , desta forma: Primeira instância:

<Connector port="[port1]" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

Segunda instância:

<Connector port="[port2]" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

E assim por diante.

Na configuração do apache2, defino um cluster, assim:

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

E as diretivas proxypass:

ProxyPass / balancer://myCluster/
ProxyPassReverse / balancer://myCluster/
...

Funciona como esperado, faz o balanceamento de carga como deveria e, se uma instância do Tomcat estiver desativada, o load blaancer não redireciona para essa instância. Tudo está funcionando bem até este ponto.

Mas o problema é que, quando eu acionar a implantação nas instâncias do tomcat, eu as paro uma por uma, carrego o novo artefato e reinicio a instância. Mas o balanceador de carga redireciona a instância do tomcat mesmo antes de os artefatos do aplicativo da web serem implementados, inicializados e preparados. Assim, o usuário enfrenta a tela em branco se fizer uma solicitação para uma URL que ainda não está pronta.

Como posso lidar com essa situação para evitar o redirecionamento até que o aplicativo da Web esteja completamente pronto? Como posso verificar o status deles?

Qualquer ajuda é muito apreciada.

    
por Utku Özdemir 12.06.2014 / 13:36

1 resposta

1

Provavelmente, a melhor abordagem é construir um tipo de servlet de status que saiba como verificar se o contexto desejado (war) está totalmente operacional e utilize a diretiva failonstatus .

Outra opção é usar o link em sua implantação. Etapas sendo:

  • Desativar um trabalhador
  • implantar
  • Aguarde até que esteja pronto / verifique
  • Ativar trabalhador
por 12.06.2014 / 15:01