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. Comentarios (8) |