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.
últimas postagens
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.
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.
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.
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?