Tomcat Load Balancer con Apache usando Mod Proxy y Session Sticky

Configure Tomcat con Apache usando el módulo Proxy y Sticky Session

Configurar Tomcat Load Balancer con el servidor web Apache usando Mod Proxy es bastante fácil.

Es fácil cuando sigues la secuencia y todo va bien. He enumerado los siguientes pasos paso a paso sobre cómo configurar Apache con Tomcat para configurar Load Balancer usando Mod Proxy.

Siempre se recomienda tener equilibrio de carga en un entorno de producción para una mejor disponibilidad.

Configuración del servidor web Apache

  • Habilite proxy_module, proxy_balancer_module y proxy_http_module en httpd.conf del 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

Agregue el pase de proxy junto con el nombre del balanceador para la raíz del contexto de la aplicación.

En este ejemplo, tengo una ruta de proxy como ejemplos y un nombre de equilibrador como mycluster.

Es muy importante incluir stickysession, ya que al no tener esta opción, se distribuirá la misma solicitud a varios servidores Tomcat y tendrá problemas de caducidad de sesión en una aplicación.

<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 puede ver en la configuración anterior, agregué una ruta en BalancerMember para que el valor de la ruta se pueda agregar a la ID de la sesión.

Ahora, configuremos Apache para imprimir JSESSIONID en los registros de acceso.

  • Agregue lo siguiente en la directiva LogFormat
%{JSESSIONID}C

Ex:

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

Configuración de Tomcat

Debe configurar las instancias de Tomcat con el mismo ID de ruta que lo hizo en BalancerMember arriba.

  • Agregue el parámetro jvmRoute en server.xml de Tomcat. Esto debe agregarse en la etiqueta de nombre del motor.

Instancia de Tomcat configurada con puerto 8080

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

Instancia de Tomcat configurada con puerto 8090

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

Verificación

Genere algo de carga en la aplicación y verifique el registro de acceso del servidor Apache para asegurarse de que su solicitud se enruta a una sola instancia de Tomcat.

También notará que su ID de sesión se adjunta a la ruta como se muestra en el siguiente ejemplo.

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 esto le ayude a configurar Tomcat Load Balancer con Apache Mod Proxy y Session Sticky.

Si está interesado en aprender sobre la administración de Tomcat, consulte esto curso por Internet.

¿Te gustó leer el artículo? ¿Qué tal compartir con el mundo?