Configurar Tomcat con Apache utilizando 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 siguiente paso a paso sobre cómo configurar Apache con Tomcat para configurar Load Balancer usando Mod Proxy.
En un entorno de producción siempre se recomienda equilibrar la carga para mejorar la disponibilidad.
Configuración del servidor web Apache
- Activar
proxy_module
,proxy_balancer_module
yproxy_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
Añada el pase de proxy junto con el nombre del equilibrador para la raíz del contexto de la aplicación.
En este ejemplo, tengo un proxy ruta como ejemplos y equilibrador nombre como micluster.
Es muy importante incluir stickysession ya que no tener esta opción distribuirá la misma petición a múltiples servidores Tomcat, y tendrá problemas de expiración de sesión en una aplicación.
ProxyRequests Desactivado ProxyPass /ejemplos balancer://mycluster stickysession=JSESSIONID ProxyPassReverse /ejemplos balancer://mycluster stickysession=JSESSIONID BalancerMember http://localhost:8080/examples route=servidor1 BalancerMember http://localhost:8090/examples route=servidor2
Como se puede ver en la configuración anterior, he añadido una ruta en BalancerMember por lo que el valor de la ruta se puede añadir a la ID de sesión.
Ahora, vamos a configurar Apache para que imprima JSESSIONID en los logs de acceso.
- Añada lo siguiente en la directiva LogFormat
%{JSESSIONID}C
Ex:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combinado
- Reiniciar el servidor web Apache
Configuración de Tomcat
Debe configurar las instancias de tomcat con el mismo id de ruta que hizo en EquilibradorMiembro arriba.
- Añadir
jvmRoute
parámetro enserver.xml
de Tomcat. Esto debe añadirse en la etiqueta de nombre del motor.
Instancia de Tomcat configurada con 8080 puerto
Instancia de Tomcat configurada con 8090 puerto
- Reinicie el servidor Tomcat
Verificación
Genere un poco de carga en la aplicación y compruebe el registro de acceso del servidor apache para asegurarse de que su solicitud se enruta a una sola instancia de tomcat.
También observará que su ID de sesión se añade 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 te ayude en la configuración de Tomcat Load Balancer con Apache Mod Proxy y Session Sticky.
Si está interesado en aprender sobre la administración de Tomcat, consulte esto curso en línea.