El balanceo de carga es el proceso que permite dividir la cantidad de trabajo que debe realizar un ordenador, entre dos o más ordenadores, de manera que se obtiene más resultados de trabajo en la misma cantidad de tiempo.

 

Modelo servidor aplicaciones varios

De esta manera podemos tener un servidor web como el Apache HTTP Server que se encargará recibir las peticiones y enviar los resultados al cliente, y podemos tener varios servidores de aplicaciones (por ejemplo con GlassFish), en la misma o distintas máquinas, que acceden a una misma base de datos.

Así se puede obtiener el beneficio de repartir el trabajo de proceso realizado por el servidor de aplicaciones entre varios servidores, aumentando la productividad. Además si uno de los servidores de aplicaciones deja de funcionar, puede seguir funcionando el otro sin dejar de dar el servicio.

Para realizar una prueba de este tipo de estructura, vamos a necesitar dos servidores con Ubuntu Server y GlassFish instalado en cada uno de ellos. En una de estas máquinas se dispondrá también del servidor web de Apache para atender las peticiones, redireccionar la carga de trabajo y enviar las respuestas.

Instalar el redireccionador mod_jk

En el servidor web Apache es necesario instalar el módulo mod_jk que hará las funciones de redireccionador. Para ello, ejecuta:

sudo apt-get install libapache2-mod-jk

Al finalizar la instalación comprueba que en la carpeta de módulos activados se encuentran los archivos correspondientes es este módulo.

balanceo01

Configurar el redireccionador

Este módulo redireccionador dispone de unos archivos de configuración que se encuentran en la carpeta /etc/libapache2-mod-jk

balanceo02

Edita el archivo llamado workers.properties, y realiza los siguientes cambios:

En la línea workers.tomcat_home=/usr/share/tomcat6, indica la ruta en la que se encuentre instalado Tomcat7. Por ejemplo:

workers.tomcat_home=/usr/share/tomcat7

Busca la línea worker.list=ajp13_worker, y cambia la parte derecha por el nombre que se le asigne al balanceador. El nombre que le asigna por defecto es loadbalancer, como puedes encontrar al final de ese mismo fichero.

worker.list=loadbalancer

La configuración viene preparada para trabajar con un solo servidor de aplicaciones, al que denomina ajp13_worker. Necesitamos indicar que vamos a trabajar con un segundo servidor de aplicaciones, por lo que buscamos la configuración del primer worker y le añadimos la del segundo, que vamos a denominar worker2. El puerto 8009 es el que utiliza Tomcat por defecto para conectarse con el servidor web Apache. En este ejemplo, el segundo servidor se encuentra en la IP 192.168.55.3, y el primero en la misma máquina que el servidor web (localhost):

worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.worker2.port=8009
worker.worker2.host=192.168.55.3
worker.worker2.type=ajp13

Ahora debes indicar el modo en el que deseas repartir la carga entre los servidores de aplicaciones. Esto se indica en la línea worker.ajp13_worker.lbfactor=1, donde se debe asignar un valor numérico a cada servidor. Si se asigna el mismo valor a ambos, la carga estará repartida por igual, pero al que se le asigne un valor más bajo, tendrá menos carga. En este ejemplo se va a repartir por igual:

worker.ajp13_worker.lbfactor=1
worker.worker2.lbfactor=1

Por último, debe indicar al balanceador (loadbalancer) qué máquinas va a utilizar para utilizar para realizar el trabajo. En este caso añadimos el worker2.

worker.loadbalancer.balance_workers=ajp13_worker,worker2

Configurar el VirtualHost para usar el balanceador con la aplicación web

En la configuración del VirtualHost que vaya a almacenar la aplicación web que se desea balancear, se debe establecer que se quiere hacer ese reparto de carga. Por ejemplo, si la aplicación se encuentra dentro del 000-default, edita el archivo de su configuración /etc/apache2/sites-enabled/000-default y añade, antes del cierre de la etiqueta </VirtualHost>, las siguientes líneas, donde debes cambiar nombreAplicacion por el nombre correspondiente a la aplicación web.

    JkMount /nombreAplicacion loadbalancer
    JkMount /nombreAplicacion/* loadbalancer
</VirtualHost>

Recuerda reiniciar el servidor web Apache para que todos los cambios que hayas realizado tengan efecto.

Configurar el servidor de aplicaciones Tomcat para que atienda las peticiones del balanceador

Edita el archivo /etc/tomcat7/server.xml en todos los servidores que se vayan a utilizar para el balanceo, descomentando la línea del conector en el puerto 8009:

<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->

Quedando como:

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Recuerda reiniciar Tomcat7 para asegurar que los cambios tengan efecto.