La traducción del artículo ha sido preparada en la víspera del inicio del curso

La balanceo de carga es una solución común para escalar horizontalmente aplicaciones web a través de múltiples hosts, proporcionando a los usuarios un único punto de acceso al servicio. es uno de los programas de balanceo de carga más populares de código abierto, que también ofrece alta disponibilidad y funcionalidad de proxy.
HAProxy busca optimizar el uso de recursos, maximizar el ancho de banda, minimizar el tiempo de respuesta y evitar la sobrecarga de cada recurso individual. Puede ser instalado en múltiples distribuciones de Linux, como CentOS 8, que es donde nos centraremos en esta guía, así como en sistemas y .

HAProxy es particularmente adecuado para sitios web con tráfico muy elevado y, por lo tanto, se utiliza con frecuencia para mejorar la fiabilidad y el rendimiento de configuraciones de servicios web con múltiples servidores. En esta guía, se describen los pasos para configurar HAProxy como un balanceador de carga en un host en la nube CentOS 8, que luego dirige el tráfico a sus servidores web.
Como requisito necesario para alcanzar los mejores resultados, debe tener al menos dos servidores web y un servidor para el balanceo de carga. En los servidores web debe estar en funcionamiento al menos un servicio web básico, como nginx o httpd, para poder verificar el balanceo de carga entre ellos.
Instalación de HAProxy en CentOS 8
Dado que HAProxy es una aplicación de código abierto en rápido desarrollo, la distribución disponible para usted en los repositorios estándar de CentOS puede no ser la versión más reciente. Para comprobar la versión actual, ejecute el siguiente comando:
sudo yum info haproxyHAProxy siempre ofrece a elección tres versiones estables: las dos últimas versiones soportadas y una tercera, más antigua, que todavía recibe actualizaciones críticas. Siempre puede verificar la última versión estable indicada en el sitio web de HAProxy y luego decidir con cuál versión desea trabajar.
En esta guía, instalaremos la última versión estable 2.0, que aún no estaba disponible en los repositorios estándar al momento de escribir la guía. Necesitarás instalarla desde la fuente original. Pero primero, verifica si cumples con los requisitos necesarios para descargar y compilar el programa.
sudo yum install gcc pcre-devel tar make -yDescarga el código fuente usando el siguiente comando. Puedes verificar si hay una versión más reciente disponible en .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzUna vez completada la descarga, descomprime los archivos usando el siguiente comando:
tar xzvf ~/haproxy.tar.gz -C ~/Navega al directorio descomprimido con los archivos fuente:
cd ~/haproxy-2.0.7Luego, compila el programa para tu sistema:
make TARGET=linux-glibcY, finalmente, instala HAProxy:
sudo make installAhora HAProxy está instalada, pero se requieren algunos pasos adicionales para que funcione. Continuemos con la configuración del software y los servicios a continuación.
Configuración de HAProxy para tu servidor
Ahora añade los siguientes directorios y archivo de estadísticas para las entradas de HAProxy:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/statsCrea un enlace simbólico para los archivos binarios, para que puedas ejecutar los comandos de HAProxy como un usuario normal:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxySi deseas agregar el proxy a la sistema como un servicio, copia el archivo haproxy.init de examples a tu directorio /etc/init.d. Edita los permisos del archivo para que el script se ejecute, y luego recarga el demonio systemd:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reloadTambién necesitas permitir que el servicio se reinicie automáticamente al inicio del sistema:
sudo chkconfig haproxy onPor conveniencia, también se recomienda agregar un nuevo usuario para ejecutar HAProxy:
sudo useradd -r haproxyDespués de esto, puedes volver a verificar el número de versión instalada usando el siguiente comando:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/En nuestro caso, la versión debería ser 2.0.7, como se muestra en el ejemplo de salida anterior.
Por último, el firewall en CentOS 8 es bastante restrictivo por defecto para este proyecto. Usa los siguientes comandos para permitir los servicios necesarios y reiniciar el firewall:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reloadConfiguración del equilibrador de carga
La configuración de HAProxy es un proceso bastante sencillo. Básicamente, lo único que necesitas hacer es indicar a HAProxy qué conexiones debe escuchar y a dónde debe retransmitirlas.
Esto se realiza creando un archivo de configuración /etc/haproxy/haproxy.cfg con las configuraciones definitorias. Puedes leer sobre los parámetros de configuración de HAProxy , si deseas saber más al respecto.
Equilibrio de carga en el nivel de transporte (capa 4)
Comencemos con la configuración básica. Crea un nuevo archivo de configuración, usando por ejemplo vi con el siguiente comando:
sudo vi /etc/haproxy/haproxy.cfgAgrega las siguientes secciones al archivo. Reemplaza server_name por lo que debe llamar a tus servidores en la página de estadísticas, y private_ip — las direcciones IP privadas de los servidores a los que deseas dirigir el tráfico web. Puedes verificar las direcciones IP privadas y en la pestaña Red privada en el menú Red.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 checkEsto define un equilibrador de carga en el nivel de transporte (capa 4) con el nombre externo http_front, que escucha en el puerto 80, y luego dirige el tráfico al backend por defecto llamado http_back. La estadística adicional /haproxy?stats conecta la página de estadísticas en la dirección especificada.
Diferentes algoritmos de balanceo de carga.
Especificar servidores en la sección del backend permite a HAProxy usar estos servidores para equilibrar la carga de acuerdo con el algoritmo de round-robin cuando es posible.
Los algoritmos de balanceo se utilizan para determinar a qué servidor del backend se transmite cada conexión. Aquí hay algunas opciones útiles:
- Roundrobin: cada servidor se utiliza por turnos según su peso. Este es el algoritmo más suave y justo, cuando el tiempo de procesamiento de los servidores permanece distribuido uniformemente. Este algoritmo es dinámico, lo que permite ajustar el peso del servidor sobre la marcha.
- Leastconn: se elige el servidor con la menor cantidad de conexiones. Se realiza un recorrido cíclico entre los servidores con la misma carga. Se recomienda el uso de este algoritmo para sesiones largas, como LDAP, SQL, TSE, etc., pero no es muy adecuado para sesiones cortas como HTTP.
- Primero: el primer servidor con ranuras disponibles para conexión recibe la conexión. Los servidores se seleccionan desde el identificador numérico más bajo hasta el más alto, que por defecto corresponde a la posición del servidor en la granja. Una vez que el servidor alcanza el valor maxconn, se utiliza el siguiente servidor.
- Fuente: La dirección IP del origen se hash y se divide por el peso total de los servidores en ejecución para determinar qué servidor recibirá la solicitud. Así, la misma dirección IP del cliente siempre será asignada al mismo servidor, mientras que los servidores permanecen inalterados.
Configuración de balanceo de carga a nivel de aplicación (capa 7)
Otra opción disponible es configurar el balanceador de carga para operar a nivel de aplicación (capa 7), lo que es útil cuando partes de su aplicación web están distribuidas en diferentes hosts. Esto se puede lograr mediante la regulación de la transmisión de conexiones, por ejemplo, por URL.
Abre el archivo de configuración de HAProxy con un editor de texto:
sudo vi /etc/haproxy/haproxy.cfgLuego, configure los segmentos frontend y backend de acuerdo con el siguiente ejemplo:
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_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
backend blog_back
server server_name3 private_ip3:80 checkEl frontend declara una regla ACL llamada url_blog, que se aplica a todas las conexiones con rutas que comienzan con /blog. Use_backend determina que las conexiones que coincidan con la condición url_blog deben ser atendidas por el backend llamado blog_back, mientras que todas las demás solicitudes son manejadas por el backend por defecto.
En el lado del backend, la configuración establece dos grupos de servidores: http_back, como antes, y uno nuevo llamado blog_back, que atiende conexiones a example.com/blog.
Después de cambiar la configuración, guarda el archivo y reinicia HAProxy con el siguiente comando:
sudo systemctl restart haproxySi al iniciar recibió advertencias o mensajes de error, verifique la configuración para ver si están presentes y asegúrese de haber creado todos los archivos y carpetas necesarios, luego intente reiniciar de nuevo.
Prueba de configuración
Cuando HAProxy esté configurado y en funcionamiento, abra la dirección IP pública del servidor balanceador de carga en su navegador y verifique si se ha conectado correctamente al backend. El parámetro stats uri en la configuración crea una página de estadísticas en la dirección especificada.
http://load_balancer_public_ip/haproxy?statsCuando cargue la página de estadísticas, si todos sus servidores se muestran en verde, ¡la configuración fue exitosa!

La página de estadísticas contiene información útil para rastrear sus hosts web, incluyendo tiempo de actividad/inactividad y el número de sesiones. Si el servidor está marcado en rojo, asegúrese de que el servidor esté encendido y que pueda hacer ping desde la máquina del balanceador de carga.
Si su balanceador de carga no responde, asegúrese de que las conexiones HTTP no estén bloqueadas por el firewall. También asegúrese de que HAProxy esté en funcionamiento usando el siguiente comando:
sudo systemctl status haproxyProteger la página de estadísticas con contraseña
Sin embargo, si la página de estadísticas está simplemente expuesta en el frontend, está abierta al público, lo cual puede no ser una buena idea. En su lugar, puede asignarle un puerto propio, agregando el siguiente ejemplo al final de su archivo haproxy.cfg. Reemplace username y password por algo seguro:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Estadísticas de Haproxy
stats auth usuario:contraseñaDespués de agregar el nuevo grupo de oyentes, elimine el antiguo enlace a stats uri del grupo del frontend. Cuando termine, guarde el archivo y reinicie HAProxy.
sudo systemctl restart haproxyLuego vuelva a abrir el balanceador de carga con el nuevo número de puerto e inicie sesión con el nombre de usuario y la contraseña que especificó en el archivo de configuración.
http://load_balancer_public_ip:8181Asegúrese de que todos sus servidores todavía se muestran en verde, luego abra solo la IP del balanceador de carga sin ningún número de puerto en su navegador.
http://load_balancer_public_ip/Si en sus servidores internos hay al menos algún tipo de diversidad en las páginas de destino, notará que cada vez que recarga la página recibe una respuesta de un host diferente. Puede probar varios algoritmos de balanceo en la sección de configuración o consultar la .
Conclusión: balanceador de carga HAProxy
¡Felicitaciones por configurar exitosamente el balanceador de carga HAProxy! Incluso con una configuración básica de balanceo de carga, puede mejorar significativamente el rendimiento y la disponibilidad de su aplicación web. Esta guía es solo una introducción al balanceo de carga con HAProxy, que puede hacer mucho más de lo que se puede describir en una breve guía de configuración. Le recomendamos que experimente con diferentes configuraciones utilizando la , disponible para HAProxy, y luego comience a planificar el balanceo de carga para su entorno de producción.
Al utilizar varios hosts para proteger su servicio web con capacidad adicional, el mismo balanceador de carga todavía puede representar un punto único de falla. Puede aumentar aún más la alta disponibilidad configurando una IP flotante entre varios balanceadores de carga. Puede aprender más sobre esto en nuestro .
Más sobre el curso ***
Fuente: habr.com
