Para garantizar la máxima disponibilidad, escalabilidad y alto rendimiento de las aplicaciones web, ahora es común implementar tecnologías que introduzcan redundancia, como el agrupamiento de servidores y el equilibrio de carga. Por ejemplo, configurar un grupo de servidores que ejecuten las mismas aplicaciones y luego implementar balanceadores de carga delante de ellos para distribuir el tráfico.
HAProxy es un equilibrador de carga de alta disponibilidad, servidor proxy y terminador SSL/TLS de código abierto, potente, de alto rendimiento, confiable, seguro y ampliamente utilizado para sitios web con tráfico muy alto. Funciona de manera confiable en sistemas operativos Linux, Solaris, FreeBSD, OpenBSD y AIX.
Esta guía muestra cómo configurar un equilibrador de carga dedicado de alta disponibilidad con HAProxy en CentOS 8 para controlar el tráfico en un grupo de servidores web NGINX. También demuestra cómo configurar la terminación SSL/TLS en HAProxy.
Prerrequisitos:
A total of 4 servers with minimal CentOS 8 installation.
Configuración del entorno de prueba
----------- HAProxy Server Setup ----------- HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247 Test Site Domain: www.tecmint.lan ----------- Client Web Servers Setup ----------- Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200 Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21 Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34
Paso 1: Configuración del servidor HTTP Nginx en las máquinas cliente
1. Inicie sesión en todas sus máquinas cliente CentOS 8 e instale el servidor web Nginx utilizando el administrador de paquetes dnf como se muestra.
# dnf install Nginx
2. A continuación, inicie el servicio Nginx, habilítelo para que se inicie automáticamente en el arranque del sistema y confirme que está en funcionamiento verificando su estado mediante los comandos systemctl (haga esto en todas las máquinas cliente).
# systemctl start nginx # systemctl enable nginx # systemctl status nginx
3. Además, si el servicio firewalld está en ejecución en todas las máquinas cliente (lo cual puede verificar ejecutando systemctl start firewalld), debe agregar los servicios HTTP y HTTPS en la configuración del firewall para permitir que las solicitudes del equilibrador de carga pasen a través del firewall hacia los servidores web Nginx. Luego, recargue el servicio firewalld para que se apliquen los cambios (haga esto en todas las máquinas cliente).
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
4. A continuación, abra un navegador web en sus máquinas locales y pruebe si la instalación de Nginx funciona correctamente. Utilice las IP de los clientes para navegar, una vez que vea la página de prueba de Nginx, significa que el servidor web instalado en la máquina cliente está funcionando correctamente.

5. A continuación, necesitamos crear páginas de prueba en las máquinas cliente que utilizaremos más adelante para probar la configuración de HAProxy.
----------- Web Server #1 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html ----------- Web Server #2 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html ----------- Web Server #3 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html
Paso 2: Instalación y configuración del servidor HAProxy en CentOS 8
6. Ahora instala el paquete HAProxy en el servidor HAProxy ejecutando el siguiente comando.
# dnf install haproxy
7. A continuación, inicia el servicio HAProxy, habilítalo para que se inicie automáticamente al arrancar el sistema y verifica su estado.
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy

8. Ahora configuraremos el HAProxy utilizando el siguiente archivo de configuración.
# vi /etc/haproxy/haproxy.cfg
El archivo de configuración se divide en cuatro secciones principales.
- configuración global – establece parámetros de todo el proceso.
- por defecto – esta sección establece parámetros predeterminados para todas las demás secciones que siguen su declaración.
- frontend – esta sección describe un conjunto de sockets de escucha que aceptan conexiones de clientes.
- Backend – esta sección describe un conjunto de servidores a los cuales el proxy se conectará para reenviar las conexiones entrantes.
Para entender las opciones bajo configuración global y por defecto, lee la documentación de HAProxy (enlace proporcionado al final del artículo). Para esta guía, utilizaremos los valores predeterminados.
Configuración de registro de HAProxy
9. HAProxy una vez desplegado, desempeñará un papel significativo en tu infraestructura de TI, por lo que configurar el registro es un requisito básico; esto te permite obtener información sobre cada conexión a tus servidores web de respaldo.
El parámetro log (resaltado en la captura de pantalla siguiente) declara un servidor Syslog global (como rsyslog, el predeterminado en CentOS) que recibirá los mensajes de registro. Aquí se puede declarar más de un servidor.
La configuración predeterminada apunta a localhost (127.0.0.1) y local2 es el código de instalación predeterminado utilizado para identificar los mensajes de registro de HAProxy en rsyslog.

10. A continuación, debe indicar al servidor rsyslog cómo recibir y procesar los mensajes de registro de HAProxy. Abra el archivo de configuración de rsyslog en /etc/rsyslog.conf o cree un nuevo archivo en el directorio /etc/rsyslog.d, por ejemplo, /etc/rsyslog.d/haproxy.conf.
# vi /etc/rsyslog.d/haproxy.conf
Copie y pegue la siguiente configuración para recopilar registros con UDP en el puerto predeterminado 514.
$ModLoad imudp $UDPServerAddress 127.0.0.1 $UDPServerRun 514
Agregue también estas líneas para indicar a rsyslog que escriba en dos archivos de registro separados en función de la gravedad, donde local2 es el código de instalación definido en la configuración de HAProxy anterior.
local2.* /var/log/haproxy-traffic.log local2.notice /var/log/haproxy-admin.log
11. Guarde y cierre el archivo. A continuación, reinicie el servicio rsyslog para aplicar los cambios recientes.
# systemctl restart rsyslog
Configuración de front-end y back-ends de HAProxy
En esta sección, demostraremos cómo configurar los proxies de frontend y backend. Vuelve al archivo de configuración de HAProxy y modifica las secciones predeterminadas de frontend y backend de la siguiente manera. No entraremos en una explicación detallada de cada parámetro, siempre puedes consultar la documentación oficial.
La siguiente configuración define una sección listen utilizada para servir la página de estadísticas de HAProxy. El parámetro bind asigna un oyente a una dirección IP dada (*
en este caso) y al puerto (9000).
La configuración enable de las estadísticas habilita la página de estadísticas que se accederá utilizando el URI /stats (es decir, http://server_ip:9000/stats
).
La configuración auth se utiliza para agregar una autenticación básica al acceder a la página (reemplaza haproxy y Lostp@1ss con un nombre de usuario y contraseña de tu elección).
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:Lostp@1ss
13. La siguiente configuración define una sección frontend llamada TL (puedes darle el nombre que desees). El parámetro mode define el modo en el que opera HAProxy.
El parámetro acl (Lista de Control de Acceso) se utiliza para tomar una decisión basada en el contenido extraído de la solicitud. En este ejemplo, la solicitud se considera simplemente HTTP si no se realiza a través de SSL.
Luego, se utiliza la configuración http-request set-header para agregar un encabezado HTTP a la solicitud. Esto ayuda a informar a Nginx que la solicitud inicial se realizó a través de HTTP (o a través del puerto 80).
La directiva default_backend o use_backend define los servidores de back-end, en este caso, referenciados por TL_web_servers.
Tenga en cuenta que HAProxy devolverá un error “503 Servicio no disponible” si una solicitud no es enrutada por una directiva use_backend o default_backend.
frontend TL bind *:80 mode http acl http ssl_fc,not http-request set-header X-Forwarded-Protocol http if http default_backend TL_web_servers
14. Luego necesitamos definir una sección de back-end donde la configuración balance define cómo HAProxy selecciona los servidores de back-end para procesar una solicitud si ningún método de persistencia anula esa selección.
La directiva cookie habilita la persistencia basada en cookies, instruye a HAProxy para enviar una cookie llamada SERVERID al cliente y asociarla con el ID del servidor que dio la respuesta inicial.
La directiva servidor se utiliza para definir los servidores upstream en el formato nombre_servidor (por ejemplo, websrv1), IP_servidor:puerto y opciones.
Una opción clave es comprobar que le indica a HAProxy que verifique continuamente la disponibilidad de un servidor y reporte en la página de estadísticas.
backend TL_web_servers mode http balance roundrobin option httpchk HEAD / cookie SERVERUID insert indirect nocache server websrv1 10.42.0.200:80 cookie websrv1 check server websrv2 10.42.0.21:80 cookie websrv2 check server websrv3 10.42.0.34:80 cookie websrv3 check
Comente cualquier otra sección de frontend y backend como se muestra en la captura de pantalla que sigue. Guarde el archivo y cárguelo.

15. Ahora reinicie el servicio HAProxy para aplicar los nuevos cambios.
# systemctl restart haproxy
16. A continuación, asegúrese de que los servicios HTTP (puerto 80) y HTTPS (puerto 433) estén abiertos en el firewall para aceptar solicitudes de clientes como se indica a continuación. Además, abra el puerto 9000 en el firewall para acceder a la página de estadísticas y recargue la configuración del firewall.
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent –add-service=https # firewall-cmd --zone=public --permanent --add-port=9000/tcp # firewall-cmd --reload
Paso 3: Prueba de la configuración de HAProxy y visualización de estadísticas
17. Ahora es el momento de probar la configuración de HAPrxoy. En la máquina de escritorio local desde donde accede a todos los servidores, agregue la siguiente línea en el archivo /etc/hosts para permitirnos usar el dominio de sitio ficticio.
10.42.0.247 www.tecmint.lan
18. Luego abra un navegador y navegue utilizando la dirección del servidor o el dominio del sitio.
http://10.42.0.247/ OR http://www.tecmint.lan/

19. Para acceder a la página de estadísticas de HAProxy, use la siguiente dirección.
http://10.42.0.247:9000/stats
Luego use el nombre de usuario y la contraseña que definió en el archivo de configuración de HAProxy (refiérase al parámetro de autenticación de estadísticas).

Después de iniciar sesión correctamente, aterrizará en la página de estadísticas de HAProxy que le muestra métricas que abarcan la salud de sus servidores, tasas de solicitud actuales, tiempos de respuesta y mucho más.
Para demostrar cómo funciona el informe de estado con respecto a los códigos de color, hemos detenido uno de los servidores de respaldo.

Paso 4: Configurar HTTPS en HAProxy usando un certificado SSL autofirmado
20. En esta sección final, demostraremos cómo configurar SSL/TLS para asegurar todas las comunicaciones entre el servidor HAProxy y el cliente. HAProxy admite cuatro modos principales de configuración de HTTPS, pero para esta guía, utilizaremos la descarga de SSL/TLS.
En el modo de descarga de SSL/TLS, HAProxy descifra el tráfico en el lado del cliente y se conecta en tráfico claro a los servidores de respaldo.
Comenzaremos creando el certificado y la clave como se muestra (responda las preguntas según los detalles de su empresa durante la creación del certificado, como se resalta en la captura de pantalla).
# mkdir /etc/ssl/tecmint.lan # cd /etc/ssl/tecmint.lan/ # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt # cd /etc/ssl/tecmint.lan/ # cat tecmint.crt tecmint.key >tecmint.pem # ls -l

21. A continuación, abra el archivo de configuración de HAProxy (/etc/haproxy/haproxy.cfg) y edite la sección delantero.
frontend TL bind *:80 bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem redirect scheme https if !{ ssl_fc } mode http acl http ssl_fc,not acl https ssl_fc http-request set-header X-Forwarded-Protocol http if http http-request set-header X-Forwarded-Protocol https if https default_backend TL_web_servers

Guarde el archivo y cierre.
22. Luego reinicie el servicio HAProxy para aplicar los nuevos cambios.
# systemctl restart haproxy.service
23. A continuación, abra un navegador web e intente acceder al sitio una vez más. El navegador mostrará un error debido al certificado autofirmado, haga clic en Avanzado para continuar.



¡Eso es todo por ahora! Cada aplicación web tiene su propio conjunto de requisitos, debes diseñar y configurar el equilibrio de carga para adaptarlo a tu infraestructura de TI y a los requisitos de la aplicación.
Para obtener más información sobre algunas de las opciones de configuración utilizadas en esta guía, y en general cómo utilizar HAProxy, consulta la documentación oficial de la edición comunitaria de HAProxy o la documentación de la versión empresarial de HAProxy. Puedes enviar cualquier pregunta o pensamiento a través del formulario de comentarios a continuación.
Source:
https://www.tecmint.com/setup-nginx-haproxy-load-balancer-in-centos-8/