Como implementar un balanceador de carga para servidores de aplicaciones Tomcat con Apache y no morir en el intento

Para implementar el balanceo de carga de tres servidores tomcat se hace uso del servidor http Apache a través de los modulos proxy_module, proxy_balancer_module y proxy_ajp_module haciendo uso del protocolo AJP el diagrama de despliegue es el siguiente:

Diagrama de despliegue

1. Ambiente:

3 Maquinas virtuales con Sistema Operativo Ubuntu 13.04 con un servidor de aplicaciones Tomcat 6.014

1 Maquina virtual con Sistema Operativo Ubuntu 13.04 con un servidor http Apache 2.4.3

ambiente

2. Herramientas necesarias

3.Procedimiento de Instalación

3.1 Creacion de las maquinas virtuales

Para la creación de las maquinas virtuales es necesario seguir el siguiente tutorial:

CREACION DE UNA MAQUINA VIRTUAL o DISCO DURO VIRTUAL con VirtualBox

3.2 Instalacion del sistema operativo en las maquinas virtuales

Para la instalación del sistema operativo en las maquinas virtuales es necesario seguir este otro tutorial

Instalando PASO A PASO Ubuntu Raring Ringtail 13.04

Nota: Para montar la imagen iso del sistema operativo es necesario seleccionar la configuración de la maquina virtual seleccionar «Almacenamiento», en el icono de unidad de cd seleccionar el icono que muestra un disco y seleccionar un archivo de disco duro virtual de cd/dvd, seleccionar el archivo de imagen de Ubuntu y hacer click en aceptar.

No es necesario hacer la instalación en las cuatro maquinas, simplemente se instala en una maquina y se clona haciendo click derecho sobre la maquina en el administrador de virtual box, seleccionando la opcion de clonar, se selecciona el nombre de la maquina, clonacion completa y listo.

3.3 Instalación de XAMPP

XAMPP contiene un servidor apache que en este caso sera el balanceador de los servidores apache Para instalar XAMPP se debe seguir esto otro tutorial

Welcome to the Linux version of XAMPP (on x86-compatible processors)

Si el sistema operativo es de 64 bits se deben ejecutar los siguientes commandos en una consola

sudo apt-get update

sudo apt-get install ia32-libs

Podemos arrancar el servidor a través del comando

sudo /opt/lampp/lampp start

startapache

y probar la url http://localhost en la maquina donde se instala.

para detener el servidor basta con el comando

sudo /opt/lampp/lampp stop

3.4 Instalación de los servidores tomcat:

Instalar jre en el servidor donde se va a instalar tomcat:

sudo cp /directorio_donde_esta_instalador/jre-6u25-linux-x64.bin /opt

sudo sh jre-6u25-linux-x64.bin

Crear la variable de entorno JAVA_HOME

export JAVA_HOME=/opt/jre-6u25 , si se quiere crear de forma permanente en la sesión de usuario se debe agregar esta linea al final del archivo .profile en el directorio HOME del usuario, en este caso /diegoParada/home/.profile

Decomprimir el archivo apache-tomcat-6.0.36.tar.gz en el directorio /opt

tar xvfz apache-tomcat-6.0.36.tar.gz -C /opt

concedemos permisos al usuario al directorio apache-tomcat-6.0.36

chown -R diegoParada /opt/apache-tomcat-6.0.36

para iniciar el servidor se ejecuta

/opt/apache-tomcat-6.0.36/bin/startup.sh

starttomcat

para detener el servidor se ejecuta el comando

/opt/apache-tomcat-6.0.36/bin/shutdown.sh

3.5 Configuración de los servidores Tomcat

Para configurar cada uno de los servidores es necesario configurar el archivo server.xml ubicado en el directorio conf de cada servidor.

Primero es necesario habilitar la siguiente linea

<Engine name=»Catalina» defaultHost=»localhost» jvmRoute=»tomcatnodo1″>

donde tomcatnodo1 es la ruta del protocolo jvm para el balanceador. Para apache2 y apache3 las rutas seran tomcatnodo2 y tomcatnodo1 respectivamente

Luego es necesario desactivar la linea de la implementación del cluster del servido

<Cluster className=»org.apache.catalina.ha.tcp.SimpleTcpCluster»/>

por ultimo se guarda el archivo y se reinicia el servidor.

3.4 Configuración del servidor apache

La configuración del balanceador en el servidor apache se hace mediante el archivo http.conf ubicado en el archivo /opt/lampp/etc

Primero se deben habilitar los siguientes modulos

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

Luego, justo antes de las lineas

# XAMPP
Include etc/extra/httpd-xampp.conf

se define el cluster así;

<Proxy balancer://testcluster stickysession=JSESSIONID>

BalancerMember ajp://apache1:8009 min=10 max=100 route=tomcatnodo1 loadfactor=1
BalancerMember ajp://apache2:8009 min=20 max=200 route=tomcatnodo2 loadfactor=1
BalancerMember ajp://apache3:8009 min=20 max=200 route=tomcatnodo3 loadfactor=1

</Proxy>

y se donde balancer://testcluster es la definicion del clustes que servirá para la definición del contexto y el atributo stickysession=JSESSIONID la replica de las sessiones en los servidores.

Luego se define el contexto del cluster a través de la siguiente línea

ProxyPass /clusterapp balancer://testcluster/clusterapp

Se guarda el archivo y se reinicia el servidor.

3.5 Aplicacion para prueba del cluster

La aplicacion esta compuesta por un formulario que muestra el ID de sesión y un contador que permite verificar si la sesión a sido replicada a los largo de los servidores.

aplicacion

4 Pruebas

El balanceador implementa el algoritmo round robin es decir que por cada petición asignara un servidor diferente.

La primera prueba consiste en hacer tres peticiones diferentes eliminando los datos de sesión del cliente, estos fueron los resultados

sesiones

La segunda prueba consiste en bajar los servidores y verificar la disponibilidad de la aplicación en el servidor.

a. Todos los servidores arriba.

nodo2

La respuesta la procesa el nodo 2 luego el servidor a bajar sera el 2

b. Nodo 2 apagado

nodo1

la respuesta fue procesada por el nodo 1

c. Nodo 1 y nodo 2 Apagado

nodo3

la respuesta fue procesada por el nodo 3

5. Conclusiones

Tomcat utiliza el protocolo AJP para su funciuonamiento en cluster

Apache tiene dos tipos de conectores AJP: mod_jk y proxy_ajp para el segundo ofrece soporte nativo y permite el balanceo de los servidores a través de los modulos proxy_module y proxy_balancer_module.

Apache soporta la réplica de sesiones para garantizar la disponibilidad del servicio de manera completamente transparente al usuario.

6. Referencias

http://www.richardnichols.net/2010/08/5-minute-guide-clustering-apache-tomcat/

http://www.apache.org

http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

Publicado en Ubuntu
4 comments on “Como implementar un balanceador de carga para servidores de aplicaciones Tomcat con Apache y no morir en el intento
  1. Marco dice:

    Trabaja super bien, yo implementé algo similar, pero ahora me gustaria saber como debiera hacerle para que una aplicacion en particular me la atendiera un solo servidor

  2. Victor dice:

    Hola, muy buen tutorial, ¿ésto tambien funcionaría para Apache 2.4 ejecutando php? , Saludos.

    • icebishop13 dice:

      Victor para balancear peticiones a su página implementada en PHP debe implementar un balanceador proxy con los miembros de su cluster, que pueden ser otros servidores apache, el tag del archivo de configuración de apache es

Deja un comentario