Proxy balanceador de carga con Lighttpd
Aquí explicaré cómo configurar lighttpd en modo proxy, con round-robin para balancear la carga de una web entre varios servidores, pero primero, voy a explicar qué es todo esto.
Cuando una página web tiene muchas visitas, es posible que sea demasiado trabajo para un único servidor web, o tal vez el tráfico de datos es demasiado y la conectividad (el puerto de red) se queda pequeño creando un cuello de botella.
En este caso se utilizan varios servidores, incluso cientos de ellos en empresas grandes. Aún así, las peticiones van a llegar de ún único sitio (la conexión a internet) y deben repartirse a los servidores. Éste trabajo lo hace un proxy con balanceador de carga.
El proxy elige cada vez a un servidor distinto, para que la carga se reparta de igual manera entre los servidores (eso es balancear). En algunos casos se mantiene a un usuario conectado siempre al mismo servidor si tiene que mantener una sesión abierta.
Configuración de Lighttpd
El proxy puede funcionar en un dominio específico, una dirección IP, un puerto, una URL o casi cualquier otra condición. En mi caso no hay condiciones, de forma que todas las peticiones vayan al proxy y desde ahí a los dos servidores web.
Primero hay que editar el archivo de configuración del proxy. En mi caso (FreeBSD 11) se encuentra en /usr/local/etc/lighttpd/conf.d/proxy.conf y he añadido:
$HTTP["host"] =~ "" {
proxy.balance = "round-robin"
proxy.server = ( "" => (
( "host" => "192.168.2.52" ),
( "host" => "192.168.2.53" )
) )
}
He elegido el método llamado Round Robin, que consiste en mandar cada petición en orden a cada uno de los servidores. Las peticiones se enviarán al servidor 192.168.2.52 y al servidor 192.168.2.53.
También hay que recordar añadir incluir la configuración del proxy en el archivo modules.conf. La configuración ya se creó cuando se instaló Lighttpd, pero está comentada con un # al principio de la línea que hay que quitar. En mi caso el archivo está en /usr/local/etc/lighttpd/modules.conf:
##
## mod_proxy
##
include "conf.d/proxy.conf"
Después de configurarlo, al reiniciar el servidor (normalmente con el comando service lighttpd restart) el proxy debería funcionar correctamente.
Mi caso personal
Actualmente tengo 4 Raspberry Pi modelo B. Cada una tiene una dirección IP acabada en 51, 52, 53 y 54. Uso la 51 para el proxy, mientras la 52 y la 53 se encargan de servir webs. La 54 está sin configurar y la estoy utilizando para probar otras distribuciones de Linux, FreeBSD, FreeNAS, etc.
Las Raspberry Pi tienen una ventaja y una desventaja (en especial mi modelo). La ventaja es el bajo consumo energético (unos 5W por servidor). La desventaja es la poca potencia de proceso, por eso tengo 4. Con el proxy se reparten el trabajo y el resultado es mucho mejor.