Balanceo de carga con HAProxy en Ubuntu 18.04
El balanceo de carga es comúnmente utilizado en entornos web, para distribuir aplicaciones de manera horizontal a través de múltiples nodos, al mismo tiempo que proporciona a los usuarios un único punto de acceso. Uno de los productos más populares dentro del campo del software libre, en lo que respecta a soluciones de balanceo de carga es HAProxy, que nos ofrece además de alta disponibilidad, funcionalidades de proxy. Funciona con aplicaciones que usen los protocolos TCP, HTTP y HTTPS, sobre la capa 4 (capa de transporte)
Cuéntame más sobre HAProxy
HAProxy tiene como principal objetivo optimizar el uso de los recursos, maximizar el rendimiento y minimizar el tiempo de respuesta. Esta disponible en la mayoría de los repositorios de nuestras distribuciones favoritas GNU/Linux, pero en nuestro caso vamos a utilizar una distribución con Ubuntu 18.04
HAProxy está pensado para sitios web con mucho tráfico con el objetivo de proporcionar estabilidad, confiabilidad y rendimiento. En este ejemplo utilizaremos tres servidores web, que previamente he creado en mi proveedor de confianza Clouding.io, dos de ellos tendrán servidores web con Apache , con el servidor web ya instalado (hace un tiempo escribí como instalar un servidor LAMP)y en el tercero tendremos instalado HAProxy. También se podría hacer algo similar en un solo nodo, utilizando la tecnología de contenedores de Docker, pero eso quizás os lo explico otro día.
En un entorno ideal solo el servidor con HAProxy debe estar de cara al público en la parte de frontend en la DMZ, en cambio los dos servidores web, estarán en la parte de backend. Para conseguir esto, habilitaremos solo el puerto 80 para el servidor frontal. Para que los hosts se comuniquen entre sí, sin utilizar sus IP públicas habilitamos su red privada.
La configuración de la red, en el caso de los nodos de prueba para esta entrada, es la siguiente:
frontal.bitsandlinux.com 10.20.10.6/24 webserver01.bitsandlinux.com 10.20.10.2/24 webserver02.bitsandlinux.com 10.20.10.5/24
Instalar HAProxy en Ubuntu 18.04
Una vez ya hemos accedido al servidor frontal ya podemos realizar la instalación del producto, para ello primero habilitamos el repositorio correspondiente (para tener una versión reciente) y a continuación instalamos el paquete:
sudo add-apt-repository ppa:vbernat/haproxy-2.1
sudo apt-get update
sudo apt-get install haproxy
Configurar el balanceo de carga en HAProxy
Los primero que haremos es realizar una copia de seguridad del fichero de configuración ubicado en /etc/haproxy/haproxy.cfg
, de la siguiente manera:
sudo cp -p /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.original
A la configuración por defecto le añadiremos los datos que a nosotros nos interesan.
Añadir el puerto de escucha
Primero añadimos un puerto de escucha (listener), que es el que recibirá las nuevas conexiones:
frontend frontal bind *:80 mode http default_backend nodoswebserve
Ahora toca añadir la configuración de los nodos de la parte del backend, en la misma sección:
backend nodoswebserver
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1rnHost:localhost
server webserver01.bitsandlinux.com 10.20.10.2:80
server webserver02.bitsandlinux.com 10.20.10.5:80
Añadir estadísticas
De manera adicional podemos habilitar la consulta de estadísticas en directo del funcionamiento del servidor. Aquí podemos escoger el puerto que queramos. También es importante definir un usuario y contraseña para el acceso:
listen stats bind *:8185 mode http stats enable stats uri /stats stats realm HAProxy\ Statistics stats auth haproxyuser:haproxypasswd
Ahora ya podemos guardar y reiniciar el servicio:
systemctl restart haproxy
De esta forma, si todo ha ido bien, ya podemos comprobar que efectivamente está funcionando.
He modificado el index.html por defecto en los nodos, para que me diga que nodo está usando en cada momento:
Si consultamos la IP o URL del frontal más el puerto definidio anteriormente, para consultar las estadísticas, tendremos un resultado similar al siguiente:
Si queremos que el refresco de la información sea diferente, debemos modificar el fichero de configuración y añadir:
#Es un ejemplo
stats refresh 10s
Y esto es todo. Hemos visto como instalar y configurar un servidor para balanceo de carga básico con HAProxy. El tema tiene mucha miga, por lo que puede que más adelante siga jugando con este producto, por lo que estad atentos 🙂