Inicio Linux & Systems Networks & Infrastructure Cybersecurity Cloud & DevOps SIEM & Monitoring DFIR & Threat Intel Development & Other Todas las categorias Herramientas

Apache Tomcat: Balanceo de carga y alta disponibilidad

Apache Tomcat: Balanceo de carga y alta disponibilidad

Tabla de contenidos

¿Que es un balanceandor? (Wikipedia)

Un balanceador de carga fundamentalmente es un dispositivo de hardware o software que se pone al frente de un conjunto de servidores que atienden una aplicación y, tal como su nombre lo indica, asigna o balancea las solicitudes que llegan de los clientes a los servidores usando algún algoritmo (desde un simple Round Robin hasta algoritmos más sofisticados).1

Funcionamiento:

Mediante estos servlets o programas podemos realizar configuraciones de alta disponibilidad y balanceo de carga. Tomcat se suele instalar en equipos externos al servidor web apache (balanceador de carga), y se pueden configurar para recibir peticiones las dos al mismo tiempo o como servidor secundario por si falla el primer tomcat.

Esquema de arquitectura

balanceador

Instalación balanceador:

bash
apt-get install apache2 openjdk-7-jre libapache2-mod-jk

Configuramos el fichero workers.properties

bash
vi  /etc/libapache2-mod-jk/workers.properties

Añadimos la siguiente configuración:

text
# Propiedades del entorno necesarias de configurar

workers.tomcat_home=/usr/local/tomcat

workers.java_home=/usr/lib/jvm/java-7-openjdk-amd64
# Los servidores a balancear estarán definidos más abajo en «balancer»

worker.list=balancer
#Configuramos tomcat 1
worker.worker1.port=8009

worker.worker1.host=192.168.1.80

worker.worker1.type=ajp13

worker.worker1.lbfactor=1
#Configuramos tomcat2
worker.worker2.port=8009

worker.worker2.host=192.168.1.81

worker.worker2.type=ajp13

worker.worker2.lbfactor=1
#Configuracion del balanceador
worker.balancer.type=lb

worker.balancer.balance_workers=worker1,worker2

worker.balancer.method=B
# El siguiente parámetro indica al balanceador que todas las peticiones de una misma

# sesión (usuario) vayan al mismo servidor

worker.balancer.sticky_session=true

A continuación configuramos JkMount para que todas las peticiones se dirijan a los distintos servidores tomcat, para ello debemos configurar el fichero  /etc/apache2/sites-enabled/000-default entre las etiquetas VirtualHost *:80 y VirtualHost

apache
VirtualHost *:80>

ServerAdmin webmaster@localhost
DocumentRoot /var/www

<Directory />

Options FollowSymLinks

AllowOverride None

</Directory>

<Directory /var/www/>

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

allow from all

</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory «/usr/lib/cgi-bin»>

AllowOverride None

Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

Order allow,deny

Allow from all

</Directory>

JkMount /node/* balancer
JkMount /* balancer

ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,

# alert, emerg.

LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Habilitamos la configuración de los modulos jk y procedemos a iniciar el apache

bash
cp /etc/apache2/mods-available/jk.* /etc/apache2/mods-enabled/

/etc/init.d/apache2 restart
Una vez ya hayamos configurado el balanceador pasamos a instalar nuestros dos servidores apache tomcat. Dejo un tutorial detallado de su instalación:
Instalar tomcat:
Por ultimo en el archivo server.xml de cada servidor tomcat (<TOMCAT_HOME>/conf/servers.xml), modificamos el parámetro jvmRoute del elemento Engine.
 clustomcat01
text
<Engine name=»Catalina» defaultHost=»localhost» jvmRoute=»worker1″>
clustomcat02
text
<Engine name=»Catalina» defaultHost=»localhost» jvmRoute=»worker2″>
Pruebas:
Añadimos dos paginas diferentes en cada nodo de los servidores tomcat
Iniciamos los tomcat y mediante nuestro navegador accedemos a la IP del balanceador y comprobamos por cual nodo resuelve. (En mi caso resuelve por el nodo01) como podemos ver en la siguiente imagen:
Captura de pantalla de 2015-04-12 10:19:09
Paramos en nodo01, volvemos a refrescar la URL y debería resolver por el nodo02
Captura de pantalla de 2015-04-12 10:21:54
Un saludo, rokitoh
:wq!

Comentarios