lunes, 23 de junio de 2008

Tutorial de Tomcat en Cluster

Lo primero que necesitaremos será descargar el servidor Web Apache para poder hacer el balanceo de carga (Load Balancing) y la compartición de carga (Load Sharing).

Para esto, descargaremos el archivo apache_2.2.9-win32-x86-no_ssl-r2.msi desde aquí. Una vez descargado, procedemos a la instalación.








Ya instalado el servidor Web Apache, deberemos proceder a instalar Tomcat y definir el tipo de cluster a implementar.

Existen dos tipos de cluster que podemos construir en Tomcat: cluster vertical (en una sola maquina) o cluster horizontal (en muchas maquinas).


Cluster vertical

El primer paso será la instalación de Tomcat, para lo que deberemos bajar el archivo apache-tomcat-6.0.9.exe desde aquí.

Una vez descargado el archivo, procederemos instalar Tomcat. Para este ejemplo, vamos a simular que el cluster está compuesto por tres nodos, por lo tanto, necesitaremos instalar tres instancias de Tomcat las cuales llamaremos: TomcatNodo1, TomcatNodo2 y TomcatNodo3.

El paso que realizaremos a continuación deberemos repetirlo para cada nodo.







Una vez instalado los tres nodos, deberemos realizar una pequeña modificación al archivo server.xml de cada uno de los nodos. Este archivo se encuentra en la carpeta "conf" de cada uno de los nodos.

Para cada uno de los server.xml deberemos realizar los siguientes cambios:

Cambiar los puertos



Agregamos el “jvmRoute” para cada caso.



Descomentamos el tag “cluster



Nodo1



Nodo2



Nodo3




Con estos cambios ya tenemos configurado nuestro cluster vertical.


Cluster Horizontal

La configuración de un cluster horizontal es un poco más fácil ya que no es necesario realizar cambios a los puertos.

Para cada uno de los archivos server.xml se debe realizar los siguientes cambios:

Agregamos el “jvmRoute” para cada caso (igual que para el cluster vertical)



Descomentamos el tag “cluster” (igual que para el cluster vertical)




Configuración del cluster con Apache

Una vez configurado el tipo de cluster (Horizontal o Vertical), vamos a construir una pequeña aplicación de ejemplo.

El primer paso será definir en el web.xml de la aplicación el tag <distributable /> para activar el intercambio de la sesión a través de la instancia del cluster.



Ahora necesitaremos integrar el servidor web Apache con Tomcat instalando el modulo mod_jk. Para esto, deberemos descargar el archivo mod_jk-1.2.26-httpd-2.2.4.so desde aquí y dejarlo en la carpeta “modules” de Apache.

Ya instalado el mod_jk, deberemos editar el archivo httpd.conf que está en la carpeta “conf” con las siguientes líneas:



Ahora deberemos crear el archivo workers.properties dentro de la carpeta “conf” del Apache. En este archivo definiremos las propiedades para cada una de las instancias de Tomcat a ejecutar.

En el caso de que nuestro cluster sea vertical, el archivo de propiedades deberá contener lo siguiente:



Para el caso de que el cluster sea horizontal deberemos definir el host para cada uno de los nodos del cluster:



Uno de los atributos más importantes es “Ibfactor”, el cual define el factor para el balanceo de carga, restringiendo el numero de “request” a enviar a una instancia particular de Tomcat.

Por último, crearemos unas páginas JSP para cada uno de los nodos, con los cuales validaremos que el cluster este funcionado correctamente.


TomcatNodo1



TomcatNodo2



TomcatNodo3




Por último, se debe reiniciar el Apache y luego iniciar cada una de las instancias del Tomcat.

Una vez los nodos estén iniciados, ejecutaremos la página cluster.jsp y validaremos el ID de la sesión asignada además del nombre del nodo que atendió la petición.

Recargamos nuevamente la pagina, y validamos que el ID de la sesión siga siendo la misma, con esto, validamos que el cluster este funcionado correctamente.





Si necesitan ajustar mejor la configuración del cluster, les recomiendo el libro “PROFESIONAL APACHE TOMCAT 6”.

6 comentarios:

Anónimo dijo...

Interesante articulo. Creo que voy a buscar el libro que mencionas porque hay ciertas cosas relacionadas con alta disponibilidad que me gustaria saber si estan resueltas en Tomcat.. cosas como: que pasa si un nodo se cae? existe algun heartbeat entre los tomcat's del cluster que permita eliminar ese nodo del balanceo de carga?

Ahh y una moraleja: todo lo que pongan en session tiene que implementar Serializable :P..la verdad no entiendo porque a estas alturas esto no es una restriccion a nivel de API de Servlet.

José Luis Coronel Cortés dijo...

El libro es muy bueno, pero en algunos conceptos (cluster por ejemplo) es bastante basico. Una mejor documentacion la puedes encotrar en http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

Frank's dijo...

Hola saludos.
Bueno primero. En mi trabajo nos encontramos en campaña para buscar la mejor configuración para tomcat en producción.
Bueno a pesar de que tenia una idea de que es un cluster. Decidí buscar una introducción sobre el tema.
http://www.linux-magazine.es/issue/19/Tomcat.pdf

Ahora entiendo que: siguiendo la ley de Murphy, "si algo puede fallar entonces fallará!", en una Arquitectura de sistemas donde los fallos son importantes las maquinas de forma redundante evitan estas situaciones.

Pero que pasa con la pregunta de Ariel.
Servidores de alta disponibilidad: Heartbeat.
Este articulo me explico un poco de que se trata.

http://bytecoders.homelinux.com/content/servidores-de-alta-disponibilidad-heartbeat.html

Ok. Muchas gracias por publicar este artículo me a servido mucho...

José Luis Coronel Cortés dijo...

Frank....esta muy buena la información!!!

Anónimo dijo...

Muy bueno tu articulo. Adicional a tu cluster de tomcat, yo agregaria un Load Balancing a Nivel de Sistema Operativo aumentar la disponibilidad. Asi si un nodo cae se pasa al otro.

Anónimo dijo...

Muchas gracias, un artículo muy claro y gráfico, perfecto para iniciarse en este tema.

Saludos.