Balanceo de carga con Apache 2 + mod_proxy

Existen otras opciones a la hora de instalar un balanceador de carga, como Linux Virtual Server, finalmente me he decantado por utilizar mod_proxy debido a su sencillez y porque no es necesario actualizar el Kernel.

El escenario es el siguiente:

En las 3 máquinas es necesario tener instalado Apache 2 y en la máquina apache-balancer hay que tener activos los módulos proxy_balancer y proxy_http, para ello ejecutamos:

a2enmod proxy_balancer
a2enmod proxy_http

Antes de nada debemos preparar el fichero /etc/hosts de la máquina apache-balancer. Añadimos lo siguiente:

192.168.1.11 nodo1.mydomain.com
192.168.1.12 nodo2.mydomain.com

Ahora pasaremos a configurar el balanceo, para ello crea un sitio nuevo o utiliza el sitio por defecto (/etc/apache2/sites-available/default) y añade esta configuración antes de </VirtualHost> :

# cluster member 1
BalancerMember http://nodo1.mydomain.com:80 route=lb1

# cluster member 2
BalancerMember http://nodo2.mydomain.com:80 route=lb2

ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ lbmethod=byrequests stickysession=BALANCEID
ProxyPassReverse / http://nodo1.mydomain.com/
ProxyPassReverse / http://nodo2.mydomain.com/

Guardamos el fichero y reiniciamos el Apache.

Con la opción stickysession=BALANCEID lo que conseguimos es pasar la variable de sesión al servidor dónde nos lleve el balanceador y asi permanecer en el mismo durante toda la sesión aunque actualicemos.

Para ello tenemos que configurar los nodos para que reciban la variable de sesión, editamos la configuración del VirtualHost y añadimos:

RewriteEngine On
RewriteRule .* - [CO=BALANCEID:balancer.lb1:.mydomain.com]

En el segundo nodo habría que poner lb2.

Reiniciamos los Apaches y ya deberíamos tener el balanceador funcionando ;)

Para probar puedes crearte un fichero distinto en cada máquina y borrar las sesiones autenticadas antes de recargar. En FireFox (Ctrl+Mayús.+Supr).

 

Leave a Reply