Esto es un extracto a modo de prueba de concepto para ver cómo funciona el tema del balanceo de carga web con el módulo de Apache mod_proxy_server, así que si quieres algo más completo (p.ej. para gestionar también sesiones/cookies), aquí tienes el enlace de referencia en HowtoForge. Y como no podía ser de otro modo, no puede faltar una referencia tal que la documentación oficial de Apache.org. Manos a la obra. La explicación teórica breve de esto es sencilla: tendremos un frontend web que será el balanceador, quien inicialmente recibirá todas las peticiones de los clientes, para posteriormente redirigirlas a los backends web que configuremos. Efectivamente, esto será transparente para los clientes. Un gráfico que tomé prestado que ejemplifica esto es el siguiente:
A la derecha figuran los equipos cliente (los que realizan las peticiones web), en el centro tendríamos el equipo balanceador (frontend), quien recibe todas las peticiones, y finalmente éste las distribuiría a los backends en función del algoritmo elegido para tal efecto. En este pequeño ejemplo, toda la configuración que a continuación se detalla se realiza en el frontend. Primero es preciso habilitar los siguientes módulos: a2enmod proxy a2enmod proxy_balancer a2enmod proxy_http a2enmod status /etc/init.d/apache2 restart A continuación, la configuración simplificada para el Virtualhost de un dominio tal que www.perico.com con balanceo de carga web quedaría tal que:
NameVirtualHost www.perico.com:*
<VirtualHost www.perico.com:*>
ServerName www.perico.com
# Actuamos como reverse proxy, apareciendo a los clientes
# como un servidor web corriente.
ProxyRequests Off
# Acceso sin restringir.
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# El recurso balancer-manager será el único servido localmente.
# El resto, lo pasaremos a balancer://mycluster/, que veremos
# se trata del recurso de balanceo formado por los backends.
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ nofailover=On
# Reescbirimos la URL en las cabeceras HTTP Location,
# Content-Location y URI para que en lugar de los requests
# locales (frontend), figuren como remotos (backends).
ProxyPassReverse / http://web1.perico.com/
ProxyPassReverse / http://web2.perico.com/
# Añadimos miembros (backends) al grupo de balanceo y definimos
# el método del mismo. En este caso, balancemos por número de
# requests.
<Proxy balancer://mycluster>
BalancerMember http://web1.perico.com
BalancerMember http://web2.perico.com
ProxySet lbmethod=byrequests
</Proxy>
# Habilitamos el sencillo interfaz web de management del
# balanceador. Convendría restringir acceso y protegerlo con
# contraseña.
<Location /balancer-manager>
SetHandler balancer-manager
Order deny,allow
Allow from all
</Location>
</VirtualHost>
Un detalle a destacar es que en el balanceador no vamos a necesitar definir ningún DocumentRoot dado éste no va a albergar ningún contenido. Sólo se dedicará a redirigir las peticiones web a los backends (nodos finales). Reiniciamos el servidor web y si en los backends hay definidos logs de acceso, podemos ver cómo indistintamente el balanceador va repartiendo las visitas que hagamos a la url principal (www.perico.com). Otro modo de verlo es accediendo al recurso /balancer-manager (www.perico.com/balancer-manager) y mirando los valores de Elected y To/From. Además, desde éste último podremos manejar los parámetros de balanceo de cada nodo. 3564 hits Comentarios (3) |