Introducción al balanceo de carga con HAProxy
Un Balanceador de carga es un dispositivo de hardware o software que se pone al frente de un conjunto de servidores que ofrecen una aplicación y, tal como su nombre lo indica, asigna o balancea las solicitudes que llegan de los clientes a los servidores usando algún algoritmo (round robin, conexiones mínimas, …). Ejemplos: apache2, nginx, haproxy, . . .
HAProxy es un software que nos permite balancear carga entre varios servidores. Se suele usar para balancear servicios web, pero puede balancear cualquier servicio que funcione bajo protocolo TCP.
Vamos a usar los ficheros del directorio haproxy del repositorio taller_http para crear el escenario, con las siguientes máquinas:
frontend: Será a la máquina que realizará el balanceo de carga. En ella instalaremosHAProxyy accederemos con el nombrewww.example.org.backend1ybackend2: Los dos servidores web entre los que vamos a balancear la carga. Cada uno tiene un ficheroindex.htmldistinto para que veamos bien el balanceo.
Configuración de HAProxy
Una vez levantado el escenario accede a frontend y vamos a configurar el HAProxy. Para ello añade la siguiente configuración en el fichero /etc/haproxy/haproxy.cfg y luego reinicia el servicio:
frontend servidores_web
bind *:80
mode http
stats enable
stats uri /ha_stats
stats auth cda:cda
default_backend servidores_web_backend
backend servidores_web_backend
mode http
balance roundrobin
server backend1 10.10.10.11:80 check
server backend2 10.10.10.22:80 check
- La sección
frontendrepresenta al balanceador de carga:bind: identifica desde que red se va a responder, en este caso se va a escuchar en todas las interfaces en el puerto 80.mode: Se va a balancear la carga usando el protocolo http.stats enable:: Se va a ofrecer estadística en la URL/ha_statsy el usuario y contraseña de la autentificación para acceder a la estadística se configura en el parámetrostats auth.default_backend:y que va a balancear en los servidores definido en eldefault_backend.
- La sección
backenddefine los servidores entre los que se va a balancear, el tipo de balanceo y el modo.mode: Indica el modo de balanceo en nuestro caso http.balance: Indica el algoritmo de balanceo, en nuestro caso round robin.server: Para cada servidor se indica el nombre, la ip y el puerto y con el parámetrocheckse indica que se va a comprobar si está funcionando para mandarle peticiones.
Acceso a HAProxy
Vamos a configurar la resolución estática para acceder a la IP del servidor frontend con el nombre www.example.org. Cada petición que se haga se mandará a los nodos backend1 y backend2 alternativamente.
Puedes ver las estadísticas de acceso, accediendo a http://www.example.org/ha_stats y poniendo como credenciales el usuario y contraseña que has definido en el parámetro stats auth.
Controlando HAProxy
Podemos acceder a las estadísticas y controlar a que nodos se está balanceado la carga utilizando la herramientahatop:
apt install hatop
Y conectamos a un socket unix donde escucha HAProxy:
hatop -s /run/haproxy/admin.sock
Podemos ver los frontend y backend que tenemos definido, además podemos las peticiones que se están balanceado en cada nodo. Podemos activar o desactivar un nodo del backend, para ello lo seleccionamos y pulsamos F10 para desactivar y F9 para activar.
Más detalles en Opciones de configuración HAPproxy 2.6.