Load Balancing y alta disponibilidad

Este capítulo detalla toda la configuración necesaria para infraestructuras de alta disponibilidad. Antes de leer este capítulo se recomienda leer “SSL y Reverse Proxy“.

Alta disponibilidad (High availability) es un diseño de sistema y su implementación asociada que asegura un cierto grado absoluto de continuidad operacional durante un período de medición dado. Disponibilidad se refiere a la habilidad de la comunidad de usuarios para acceder al sistema, someter nuevos trabajos, actualizar o alterar trabajos existentes o recoger los resultados de trabajos previos. Si un usuario no puede acceder al sistema se dice que está no disponible. El término tiempo de inactividad (downtime) es usado para definir cuándo el sistema no está disponible.

Para la implementación de alta disponibilidad se utiliza el conector de mod_jk de apache2 con balanceo de carga. La siguiente imagen describe una arquitectura de alta disponibilidad de contenedores de aplicaciones Tomcat.

Infraestructure-logic

Para realizar esta configuración nos basamos en las siguientes configuraciones:

  • Configuración de load balancer y servicios de backend.
  • Montar las aplicaciones con URLs a los balanceadores de carga.
  • Configuración de contenedor.
  • Configuración de conectores de alta performance APR para Tomcat.

Configuración del load balancer y servicios de backend

Para la configuración del load balancer se deberán instalar apache para ser utilizado como reverse proxy con los módulos de mod_proxy, mod_proxy_http, mod_jk y mod_balance.

Una vez instalado el proxy reverso, se deberá crear el archivo worker.properties, asumiendo que vamos a utilizar dos servidores para el balanceo de carga y que los mismos se llaman “t1″ y “t2″ esta sería la configuración:

worker.list=router

#Router Load Balancer
worker.router.type=lb
worker.router.balance_workers=t1,t2 //Number of nodes into the balancer
worker.router.sticky_session=1 //Keep session with the first node getting the request

#First node for t1
worker.t1.type=ajp13
worker.t1.host=192.168.170.132
worker.t1.port=8009
worker.t1.lbfactor=1 //Load balancing factor
# Define preferred failover node for t1
worker.t1.redirect=tps2
worker.t1.socket_keepalive=True
worker.t1.ping_mode=A

#Second node for t2
worker.t2.type=ajp13
worker.t2.host=192.168.170.136
worker.t2.port=8009
worker.t2.lbfactor=1 
worker.t2.socket_keepalive=True
worker.t2.ping_mode=A

Se debe tener en cuenta que este archivo “worker.properties” es referenciado desde la configuración del módulo mod_jk, por ejemplo jk.conf:

JkWorkersFile   /etc/apache2/workers.properties
JkLogFile       /var/log/apache2/mod_jk.log
JkShmFile       /var/log/apache2/mod_jk.shm
JkLogLevel      info

Montar las aplicaciones con URLs a los balanceadores de carga.

Una vez configurado el balanceador de carga dentro de los hosts virtuales se deberán montar las URLs correspondientes para que sean atendidas en alta disponibilidad. Para realizar dicha configuración se deberá editar el archivo de virtual hosts de la aplicación y montarlo con la instrucción “jkMount”. Por ejemplo:

#Virtual Office application
JkMount /vo router
JkMount /vo/* router

En este caso suponiendo que la aplicación se llame “vo” será atendida por el balanceador de carga llamado “router”.

Configuración de contenedor.

Para configurar el contenedor tomcat para que se comunique con el load balancer se deberán tener en cuenta las siguientes configuraciones a realizar en el archivo $TOMCAT_HOME/conf/server.xml.

Primero configurar correctamente el conector AJP.

<Connector port="8009" protocol="AJP/1.3" redirectPort="8446" />

Segundo configurar el nombre del nodo dentro del sistema de balanceo.

<!-- You should set jvmRoute to support load-balancing via AJP ie :-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="t1">

Configuración de conectores de alta performance APR para Tomcat.

Para realizar la configuración de los conectores APR se deberán compilar, los mismos se encuentran implementados en C++, por lo tanto se deberá tener instalado el compilador y ensamblador:

$ sudo apt-get install gcc make

Una vez instalado el compilador se deberán seguir los siguientes pasos. Primero obtener APR y compilarlo de la siguiente manera:

wget http://www.apache.org/dist/apr/apr-1.5.1.tar.gz  
tar -xzvf apr-1.5.1.tar.gz 
sudo ./configure 
sudo make
sudo make install

Segundo una vez compilado y generado el conector de APR, se deberá compilar y generar el conector nativo para tomcat de la siguiente manera:

cd /opt/tomcat/bin
tar -xzvf tomcat-native.tar.gz
cd /tomcat-native/jni/native
sudo ./configure --with-apr=/usr/local/apr  --with-java-home=/usr/lib/jvm/jdk1.7.0_25/
sudo make
sudo make install

Tercero verificar la configuración del contenedor donde se compiló el conector nativo

cd /opt/tomcat/conf
vi /opt/tomcat/conf/server.xml
Se debe cambiar en el conector APR la configuración SSL engine a off.

y

<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />

Finalmente, indicar a el motor de catalina donde se encuentran las librerías nativas, generalmente esto se puede hacer dentro del script setenv.sh a crear en el directorio $TOMCAT_HOME/bin.

# increase memory
JAVA_OPTS="-server -Xms512M -Xmx2048M -XX:PermSize=512M -XX:+UseParallelGC -Djava.library.path=/usr/local/apr/lib"

results matching ""

    No results matching ""