Apache Tomcat: Balanceo de carga y alta disponibilidad

¿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:

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

Configuramos el fichero workers.properties

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

Añadimos la siguiente configuración:

# 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

 

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

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

 

<Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”worker1″>

 

clustomcat02

 

<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!

6 thoughts on “Apache Tomcat: Balanceo de carga y alta disponibilidad

  1. Pingback: Apache Tomcat: Balanceo de carga y alta disponibilidad | PlanetaLibre

  2. cuando se configura el workers.properties y se configura el workers.tomcat_home=/usr/local/tomcat esto quiere decir que tambien debe tener el tomcat instalado???
    En esta parte me pedí

    Saludos.

    • Buenas,

      Solo se instala el servicio tomcat en los servidores clustomcat01 y clustomcat02
      En el servidor que se utiliza como balanceador se instalan apache y mod-jk (apt-get install apache2 openjdk-7-jre libapache2-mod-jk)

      un saludo.

  3. disculpe, soy totalmente nuevo en esto y tengo muchas dudas, una de ella es la siguiente:

    Ya tengo configurado el balanceador de carga y tomcat, y cree una carpeta den webaps/tomcat-demo/helloword/index.jsp

    coloco en el navegador: http://localhost:8080/tomcat-demo/helloword/index.jsp

    y funciona muy bien. me muestra el mensaje indicado. mi duda es la siguiente. donde coloco mi proyecto.war para que se ejecute normalmente, en esa misma carpeta?? o lo subo a traves del manager de tomcat, y el apache atraves de la url que se especifico en el virtualhost lo reconocera automaticamente, que en el ejemplo pusiste.

    JkMount /node/* balancer

    JkMount /* balancer

    • Buenos días,

      Para realizar un despliegue en tomcat y sí actualizar la web sería de la siguiente forma:

      – Realiza un backup del .war a modificar
      – Para el tomcat
      – Mueve el nuevo .war a la carpeta de webapp path-tomcat/webapp/
      – Borra la carpeta creada en webapp/ con el mismo nombre
      – Borra los temporales creados en:
      path-tomcat/work/catalina/localhost/
      – Inicia el tomcat

      Ejemplo:

      mv /usr/local/apache-tomcat-7.0.35/webapp/proyecto.war /backup
      /etc/init.d/tomcat stop
      cp proyecto.war /usr/local/apache-tomcat-7.0.35/webapp/
      rm /usr/local/apache-tomcat-7.0.35/webapp/proyecto
      rm /usr/local/apache-tomcat-7.0.35/work/Catalina/localhost/proyecto
      /etc/init.d/tomcat start

      Su proyecto iniciara en este ejemplo como: http://localhost:8080/proyecto

      Tengo pendiente realizar un manual respecto a esto. Me lo apunto.

      Un saludo.

  4. hola, soy nuevo en el tema, para replicar sesiones en el tomcat se debe configurar un balanceador de cargar también?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*