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:
Primero es preciso habilitar los siguientes módulos:
a2enmod proxy a2enmod proxy_balancer a2enmod proxy_http a2enmod status /etc/init.d/apache2 restartA 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:*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.ServerName www.perico.com # Actuamos como reverse proxy, apareciendo a los clientes # como un servidor web corriente. ProxyRequests Off # Acceso sin restringir. Order deny,allow Allow from all # 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.BalancerMember http://web1.perico.com BalancerMember http://web2.perico.com ProxySet lbmethod=byrequests # Habilitamos el sencillo interfaz web de management del # balanceador. Convendría restringir acceso y protegerlo con # contraseña.SetHandler balancer-manager Order deny,allow Allow from all
No hay comentarios.:
Publicar un comentario