Balanceador de carga Tomcat com Apache usando Mod Proxy e Session Sticky

Configure o Tomcat com o Apache usando o Proxy Module e a Sticky Session

Configurar o Tomcat Load Balancer com o servidor web Apache usando o Mod Proxy é bastante fácil.

É fácil quando você segue a sequência, e tudo vai bem. Eu listei a seguir o passo a passo sobre como configurar o Apache com o Tomcat para configurar o Load Balancer usando o Mod Proxy.

Ter balanceamento de carga é sempre recomendado em um ambiente de produção para melhor disponibilidade.

Configuração do servidor web Apache

  • Habilite proxy_module, proxy_balancer_module e proxy_http_module em httpd.conf do servidor web Apache
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Adicione o proxy pass junto com o nome do balanceador para a raiz de contexto do aplicativo.

Neste exemplo, tenho um caminho de proxy como exemplos e o nome do balanceador como mycluster.

  Como mesclar várias contas do Google Drive e do Google Fotos

Muito importante incluir stickysession, pois não ter essa opção distribuirá a mesma solicitação para vários servidores Tomcat e você terá problemas de expiração de sessão em um aplicativo.

<IfModule proxy_module>
ProxyRequests Off
ProxyPass /examples balancer://mycluster stickysession=JSESSIONID
ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONID
<Proxy balancer://mycluster>
BalancerMember http://localhost:8080/examples route=server1
BalancerMember http://localhost:8090/examples route=server2
</Proxy>
</IfModule>

Como você pode ver na configuração acima, adicionei uma rota no BalancerMember para que o valor da rota possa ser anexado ao ID da sessão.

Agora, vamos configurar o Apache para imprimir JSESSIONID nos logs de acesso.

  • Adicione o seguinte na diretiva LogFormat
%{JSESSIONID}C

Ex:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
  • Reinicie o servidor web Apache

Configuração do Tomcat

Você deve configurar instâncias do tomcat com o mesmo ID de rota que você fez no BalancerMember acima.

  • Adicione o parâmetro jvmRoute no server.xml do Tomcat. Isso deve ser adicionado na tag de nome do mecanismo.
  Como usar um Apple HomePod como um intercomunicador

Instância do Tomcat configurada com porta 8080

<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">

Instância do Tomcat configurada com porta 8090

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">

Verificação

Gere alguma carga no aplicativo e verifique o log de acesso do servidor apache para garantir que sua solicitação seja roteada para apenas uma instância do tomcat.

Você também notará que seu ID de sessão está anexado à rota, conforme mostrado no exemplo abaixo.

Ex:

127.0.0.1 - - [18/Sep/2013:10:02:02 +0800] "POST /examples/servlets/servlet/RequestParamExample HTTP/1.1" 200 662 "http://localhost/examples/servlets/servlet/RequestParamExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:06 +0800] "GET /examples/servlets/servlet/RequestInfoExample HTTP/1.1" 200 693 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:17 +0800] "GET /examples/servlets/reqinfo.html HTTP/1.1" 200 3607 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:20 +0800] "GET /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1124 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:26 +0800] "POST /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1142 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:28 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf HTTP/1.1" 200 1159 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B4EC1D73CF8C7482B7D46.server2" 
127.0.0.1 - - [18/Sep/2013:10:02:32 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=foo&datavalue=bar HTTP/1.1" 200 1174 "http://localhost/examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:36 +0800] "GET /examples/servlets/servlet/RequestHeaderExample HTTP/1.1" 200 1423 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"

Espero que isso ajude você a configurar o Tomcat Load Balancer com Apache Mod Proxy e Session Sticky.

  Como classificar respostas no Quora por votos

Se estiver interessado em aprender sobre a administração do Tomcat, verifique este curso online.

Gostou de ler o artigo? Que tal compartilhar com o mundo?