Cómo construir un clúster apache+tomcat
En aplicaciones reales, si el sitio web tiene una gran cantidad de visitas, para mejorar la velocidad de acceso, se puede integrar con múltiples servidores Tomcat y servidores Apache para permitirles ejecutar las tareas de servlet/ componentes jsp al mismo tiempo. Varios servidores Tomcat forman un sistema de clúster para proporcionar servicios a los clientes al mismo tiempo. El sistema de clúster tiene las siguientes ventajas:
Alta confiabilidad (HA): al utilizar el software de administración de clúster, cuando falla el servidor principal, el servidor de respaldo puede asumir automáticamente el trabajo del servidor principal y cambiar a él en Es hora de realizar la protección del usuario. ?
Computación de alto rendimiento (HP): Aprovecha al máximo los recursos de cada computadora del clúster para lograr el procesamiento paralelo de operaciones complejas. Suele utilizarse en el campo de la informática científica, como la genética. análisis, análisis químicos, etc. ?
Equilibrio de carga: es decir, la presión de carga se distribuye razonablemente a cada computadora en el clúster de acuerdo con un determinado algoritmo para reducir la presión sobre el servidor principal y reducir los requisitos de hardware y software para el servidor principal. . ?
Principio: el equilibrador de carga del complemento JK es responsable de asignar cargas de trabajo a los servidores Tomcat en el sistema de clúster para lograr el equilibrio de carga según el lbfactor (factor de equilibrio de carga) configurado en trabajador.properties . Cada servidor Tomcat utiliza un administrador de clúster (SimpleTcpCluster) para comunicarse entre sí para realizar la replicación de respuestas HTTP, como la sesión.
A continuación, configuramos un clúster de servidores Apache y dos Tomcat en una máquina:
2. Instalamos Apache, instalamos dos Tomcats y colocamos un proyecto de prueba en el directorio de aplicaciones web de ambos Tomcat para realizar pruebas posteriores. .
3. Copie mod_jk.so a
4. Cree: archivo Workers.properties en el directorio
"pln">worker "pun"> "pln">list "pun">. = "pln">?worker1 "pun">, "pln">worker2 "pun">, "pln">loadbalancer "com">#apache considera a Tomcat como un trabajador y loadbalancer es un equilibrador de carga
worker.worker1.host=localhost#Tomcat?worker1 servidor
worker.worker1.port=8009#Puerto Tomcat
worker.worker1.type=ajp13#Protocolo
worker.worker1.lbfactor=100#Factor de equilibrio de carga
worker.worker2.host=localhost#Tomcat?worker2 server
worker.worker2.port=8009#Porque está activado una máquina, los puertos no pueden ser los mismos
worker.worker2.type=ajp13#Protocol
worker.worker2.lbfactor=100# Si se establece en el mismo, significa que la carga de las dos máquinas es la misma
worker.loadbalancer.type=1b
worker.loadbalancer.balanced_workers=worker1,worker2
worker.loadbalancer.sticky_seesion= false
worker.loadbalancer.sticky_session_force=false
Explicación: 1.worker.loadbalancer.sticky_seesion Si se establece en verdadero, significa que la sesión es "fija", es decir, si un usuario establece una sesión en un Tomcat y, a partir de ahora, todas las operaciones de este usuario serán realizadas por este servidor Tomcat. Los sistemas en clúster no realizan replicación de sesiones. Si se establece en falso, el siguiente sticky_session_force no tiene sentido.
2. sticky_session_force: suponiendo que sticky_session esté establecido en verdadero, la sesión del usuario se vuelve fija cuando el servidor Tomcat actual deja de funcionar, si sticky_session_force es verdadero, lo que significa que la sesión se ve obligada a asociarse con el actual. Tomcat, se informará un error 500. Si se establece en falso, irá a otro servidor Tomcat.
5. Modifique
"com">LoadModule?jk_module?modules/mod_jk.so
JkWorkersFile. ?conf/workers.properties
#Mis trabajadores
JkLogFile?logs/mod_jk.log
#Archivo de registro
JkLogLevel ?debug ?
#modo de ejecución de Tomcat
JkMount?/*.jsp?loadbalancer?
#Reciba el archivo que termina en .jsp y entréguelo al balanceador de carga Procesando
JkMount?/helloapp/*?loadbalancer?
#Reciba la ruta helloapp/ y entréguela al balanceador de carga para su procesamiento
6. los dos archivos Tomcat conf/service.xml
6.1 Primero modifique los puertos AJP para asegurarse de que sean los mismos que los configurados en Workers.properties
Por ejemplo, según nuestro. configuración anterior, solo necesitamos cambiar Tomcat2. El puerto AJP debe ser 8109.
6.2 Además, después de usar el balanceador de carga, se requiere que el nombre del trabajador sea consistente con el atributo jvmRoute del elemento Engine en service.xml de Tomcat
Por ejemplo, trabajador1 se modifica a:
6.3 Además, si Hay dos servidores Tomcat instalados en una máquina, se deben garantizar sus puertos. No hay conflicto. Hay tres puertos configurados en Tomcat:
Simplemente cambie uno de ellos y hágalo diferente.
Después de completar los pasos anteriores, nuestro clúster está básicamente completo. Abra Apache y dos navegadores Tomcat e ingrese: localhost/demo/. >Para probar, escribimos un archivo jsp: test.jsp
"tag">
<%
System.out.printfln("llamada?prueba .jsp"); p>
%>
sesión:<%=session.getId()?%>
Se coloca en dos proyectos de demostración en Tomcat. Cuando el navegador accede a esta página, solo una consola Tomcat imprime declaraciones cada vez que se accede.
Sin embargo, el ID de sesión en la página cambiará. En este caso, si un usuario salta a otro servidor Tomcat mientras accede, su sesión desaparecerá, lo que puede provocar un error.
7. Configurar el administrador de clústeres
Si los lectores conocen HttpSession, deben saber que el estado de la sesión del usuario se almacena en la sesión. Cuando un navegador accede a varias páginas web, sus solicitudes. siempre están dentro del alcance de una sesión, por lo que el ID de sesión debe ser constante.
El ID de sesión en el navegador que vimos arriba es diferente, porque la sesión actual finaliza después de cambiar a otro Tomcat y se abre una nueva sesión en otro servidor.
Entonces, ¿cómo se permite que varios servidores Tomcat compartan una sesión?
Para resolver el problema anterior, habilitamos el administrador de clústeres de Tomcat (SimpleTcpCluster):
7.1 Modificar los servlets Tomcat1 y Tomcat2 .xml, agregue el siguiente elemento Cluster al elemento Engine
"tag">
channelSendOptions="8">
expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> bind="127.0.0.1" address="228.0.0.4 " port="45564" frecuencia="500" dropTime="3000"/> catalina.ha.session.JvmRouteBinderValve"/> tempDir="/tmp/war- temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false "/> ? Para obtener información sobre Cluster, consulte: 7.2 Modifique los archivos web.xml de los proyectos de demostración Tomcat1 y Tomcat2 respectivamente y agregue el elemento " etiqueta"> "pln">... "etiqueta"> Si el elemento 7.3 Reiniciaron los dos Tomcat y descubrieron que la consola Tomcat aún. Imprimió la página Call test.jsp en secuencia. El ID de sesión no ha cambiado. La prueba está completa. Notas importantes: (1). las clases relacionadas necesitan implementar la interfaz de serialización java.io.Serializable. (2). Los Tomcats en el clúster se comunican mediante multidifusión. Si hay varias tarjetas de red en la máquina, la multidifusión puede fallar. La solución es configurar el elemento (3). Si el clúster es pequeño, puede utilizar el administrador de sesiones DeltaManager. Si hay muchos, se recomienda utilizar BackupManager. (4). Membresía> está configurada en "228.0.0.4", cuando se ejecuta, debe asegurarse de que la máquina pueda acceder a esta dirección a través de Internet; de lo contrario, la operación puede fallar.