Haproxy es popular para el equilibrio de carga debido a su eficiencia, confiabilidad y bajo consumo de memoria y CPU. El balanceo de carga es una solución común para distribuir aplicaciones web de forma horizontal en varios hosts y, al mismo tiempo, proporcionar a los usuarios un único punto de acceso al servicio.
Está disponible para su instalación en las principales distribuciones de Linux. En esta guía, aprenderemos cómo instalar y configurar el balanceador de carga HAProxy en Ubuntu 20.04.
Compruebe también:
- Cómo instalar y configurar el balanceador de carga HAProxy en Rocky Linux/Alma Linux 8
- Cómo instalar y configurar el balanceador de carga HAProxy en Debian 11
Algoritmos de equilibrio de carga HAProxy
Los algoritmos de equilibrio se utilizan para decidir a qué servidor en el backend se transfiere cada conexión. Algunas de las opciones útiles incluyen las siguientes:
- Roundrobin: Cada servidor se usa por turnos según sus pesos. Este es el algoritmo más fluido y justo cuando el tiempo de procesamiento de los servidores permanece igualmente distribuido. Este algoritmo es dinámico, lo que permite que los pesos de los servidores se ajusten sobre la marcha.
- Leastconn:se elige el servidor con el menor número de conexiones. El round-robin se realiza entre servidores con la misma carga. Se recomienda usar este algoritmo con sesiones largas, como LDAP, SQL, TSE, etc., pero no es muy adecuado para sesiones cortas como HTTP.
- Primero: el primer servidor con ranuras de conexión disponibles recibe la conexión. Los servidores se eligen desde el identificador numérico más bajo hasta el más alto, que de forma predeterminada es la posición del servidor en la granja. Una vez que un servidor alcanza su valor maxconn , se utiliza el siguiente servidor.
- Fuente: la dirección IP de origen se codifica y se divide por el peso total de los servidores en ejecución para designar qué servidor recibirá la solicitud. De esta forma la misma dirección IP de cliente siempre llegará al mismo servidor mientras los servidores permanecen iguales.
Tabla de contenido
- Asegurarse de que el servidor esté actualizado
- Instalación de HAProxy
- Configuración de HAProxy como equilibrador de carga
- Probar la configuración
- Contraseña que protege la página de estadísticas de HAProxy
1. Asegurarse de que el servidor esté actualizado
Antes de continuar, asegurémonos de que el servidor esté actualizado. Use este comando para lograr esto:
sudo apt update
sudo apt upgrade -y
2. Instalación de Haproxy
El paquete que proporciona haproxy está disponible en los repositorios predeterminados de Debian. Instalar usando este comando:
sudo apt install -y haproxy
Confirme la instalación con este comando:
$ apt-cache policy haproxy
haproxy:
Installed: 2.0.13-2ubuntu0.3
Candidate: 2.0.13-2ubuntu0.3
Version table:
*** 2.0.13-2ubuntu0.3 500
500 http://eu-west-3.ec2.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
100 /var/lib/dpkg/status
2.0.13-2 500
500 http://eu-west-3.ec2.archive.ubuntu.com/ubuntu focal/main amd64 Packages
3. Configuración de HAProxy como equilibrador de carga
Para configurar HAProxy como equilibrador de carga, debemos indicarle qué tipo de conexiones debe escuchar y dónde se deben retransmitir las conexiones. Esto se hace creando un archivo de configuración /etc/haproxy/haproxy.cfg
con la configuración de definición.
Equilibrio de carga en la capa 4
Tras la instalación, HAProxy ya tendrá una plantilla para configurar el balanceador de carga. Abra el archivo de configuración usando su editor de texto, estoy usando vim:
sudo vim /etc/haproxy/haproxy.cfg
Agregue este contenido para configurar la interfaz de escucha y la interfaz de back-end donde se equilibrará la carga del tráfico.
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server <server1 name> <private IP 1>:80 check
server <server2 name> <private IP 2>:80 check
Reemplace
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server web_server_1 10.70.5.41:80 check
server web_server_2 10.70.5.187:80 check
Lo anterior define un balanceador de carga de capa 4 con un nombre de front-end http_front que escucha el número de puerto 80, que luego dirige el tráfico al backend predeterminado llamado http_back. El URI de estadísticas adicional /haproxy?stats
habilita la página de estadísticas en esa dirección especificada.
Equilibrio de carga en la capa 7
También podemos configurar el balanceador de carga para que funcione en la capa 7. Esto es útil cuando partes de su aplicación web están ubicadas en diferentes hosts. Esto se puede lograr condicionando la transferencia de conexión, por ejemplo, por la URL.
Abra el archivo de configuración usando su editor de texto, estoy usando vim:
sudo vim /etc/haproxy/haproxy.cfg
Luego agregue estas configuraciones
frontend http_front
bind *:80
stats uri /haproxy?stats
acl url_blog path_beg /blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server <server name> <private IP>:80 check
server <server name> <private IP>:80 check
backend blog_back
server <server name> <private IP>:80 check
server <server name> <private IP>:80 check
El front-end declara una regla de ACL llamada url_blog que se aplica a todas las conexiones con rutas que comienzan con /blog. Use_backend define que las conexiones que coincidan con la condición url_blog deben ser atendidas por el backend denominado blog_back, mientras que el backend predeterminado gestiona todas las demás solicitudes.
En el backend, la configuración establece dos grupos de servidores, http_back como antes y el nuevo llamado blog_back que sirve específicamente para conexiones a example.com/blog.
Después de realizar las configuraciones, guarde el archivo y reinicie HAProxy con el siguiente comando.
sudo systemctl restart haproxy
Si recibe algún error o advertencia al inicio, verifique la configuración en busca de errores de escritura y luego intente reiniciar nuevamente.
Configuración de SSL
Si tiene un archivo de clave privada y un archivo de certificado que desea usar con HAProxy, combínelos con este comando.
cat citizix.fullchain.pem citizix.key > citizix.pem
Luego configure HAProxy para usar el certificado SSL en la interfaz.
frontend http_front
bind *:80
bind *:443 ssl crt /etc/letsencrypt/live/apps.citizix.com/citizix.pem
4. Probando la configuración
Con HAProxy configurado y ejecutándose, abra la IP pública de su servidor de balanceador de carga en un navegador web y verifique que esté conectado a su backend correctamente. El parámetro stats uri en la configuración habilita la página de estadísticas en la dirección definida.
http://<Haproxy public IP>/haproxy?stats
Cuando carga la página de estadísticas y todos sus servidores aparecen en verde, ¡su configuración fue exitosa!
La página de estadísticas contiene información útil para realizar un seguimiento de sus servidores web, incluidos los tiempos de actividad y de inactividad y el recuento de sesiones. Si un servidor aparece en rojo, verifique que el servidor esté encendido y que pueda hacer ping desde la máquina del balanceador de carga.
En caso de que su balanceador de carga no responda, verifique que las conexiones HTTP no estén bloqueadas por un firewall. Además, confirme que HAProxy se está ejecutando con el siguiente comando.
sudo systemctl status haproxy
5. Contraseña que protege la página de estadísticas de HAProxy
Sin embargo, tener la página de estadísticas simplemente enumerada en la parte delantera está abierta públicamente para que cualquiera la vea, lo que podría no ser una buena idea. En su lugar, puede configurarlo en su propio número de puerto agregando el siguiente ejemplo al final de su haproxy.cfg
expediente. Reemplace el nombre de usuario y la contraseña con algo seguro.
listen stats bind *:8181 stats enable stats uri / stats realm Haproxy\ Statistics stats auth username:password
Después de agregar el nuevo grupo de escucha, elimine la referencia anterior al uri de estadísticas del grupo de interfaz. Cuando termine, guarde el archivo y reinicie HAProxy nuevamente.
sudo systemctl restart haproxy
Luego abra el balanceador de carga nuevamente con el nuevo número de puerto e inicie sesión con el nombre de usuario y la contraseña que estableció en el archivo de configuración.
http://<load balancer public IP>:8181
Verifique que sus servidores aún estén en verde y luego abra solo la IP del balanceador de carga sin ningún número de puerto en su navegador web.
http://<load balancer public IP>/
Si sus servidores back-end tienen al menos páginas de destino ligeramente diferentes, notará que cada vez que recarga la página, obtiene la respuesta de un host diferente.
Conclusiones
¡Eso es! En esta guía, aprendimos cómo instalar y configurar HAProxy para equilibrar la carga del tráfico. Esto aumentará el rendimiento y la disponibilidad de su aplicación web.