Para garantizar la máxima disponibilidad, escalabilidad y alto rendimiento de las aplicaciones web, ahora es común implementar tecnologías que introducen redundancia, como la agrupación 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 frente a ellos para distribuir el tráfico.
HAProxy es un TCP/HTTP de alta disponibilidad de código abierto, potente, de alto rendimiento, confiable, seguro y ampliamente utilizado equilibrador de carga, servidor proxy y terminador SSL/TLS construido para sitios web de muy alto tráfico. Funciona correctamente en Linux , Solaris , FreeBSD ,
Esta guía muestra cómo configurar un balanceador de carga de alta disponibilidad dedicado con HAProxy en CentOS 8 para controlar el tráfico en un clúster de NGINX servidores web También demuestra cómo configurar SSL/TLS terminación en HAProxy .
Requisitos previos:
Un total de 4 servidores con una instalación mínima de CentOS 8.
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
# dnf install Nginx
# systemctl start nginx # systemctl enable nginx # systemctl status nginx
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
Probar la instalación de Nginx en todas las máquinas cliente CentOS 8
----------- 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
# dnf install haproxy
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy
Verificar el estado de HAProxy en CentOS 8
# vi /etc/haproxy/haproxy.cfg
El archivo de configuración se divide en cuatro secciones principales.
- configuración global – establece parámetros para todo el proceso.
- predeterminados – esta sección establece parámetros predeterminados para todas las demás secciones después de su declaración.
- frontal – esta sección describe un conjunto de conectores de escucha que aceptan conexiones de clientes.
- Back-end – esta sección describe un conjunto de servidores a los que se conectará el proxy para reenviar las conexiones entrantes.
Para comprender las opciones en configuración global y predeterminados , lea la documentación de HAProxy (enlace proporcionado al final del artículo). Para esta guía, usaremos los valores predeterminados.
Configuración del registro HAProxy
El parámetro de registro (resaltado en la siguiente captura de pantalla) declara un Syslog global servidor (como rsyslog el predeterminado en CentOS) que recibirá mensajes de registro. Aquí se puede declarar más de un servidor.
La configuración predeterminada apunta a localhost (
Parámetro de registro predeterminado de HAProxy
# 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
También agregue estas líneas para instruir a rsyslog para escribir en dos archivos de registro separados según 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
# systemctl restart rsyslog
Configuración de front-end y back-end de HAProxy
La siguiente configuración define una escucha sección utilizada para mostrar las Estadísticas de HAProxy página. El vínculo El parámetro asigna un oyente a una dirección IP dada (*
para todos en este caso) y puerto (
Las estadísticas habilitan la configuración habilita la página de estadísticas a la que se accederá utilizando el URI /stats (es decir, http://server_ip:9000/stats
).
Las estadísticas auth La configuración se usa para agregar una autenticación básica al acceder a la página (reemplace haproxy y [correo electrónico protegido] con un nombre de usuario y contraseña de su elección).
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:[email protected]
La 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 simple HTTP si no está hecho sobre SSL .
Luego, el encabezado del conjunto de solicitudes http La configuración se utiliza 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 ).
El backend_predeterminado o use_backend directiva define los servidores backend, en este caso, a los que hace referencia TL_web_servers .
Tenga en cuenta que HAProxy devolverá un “Error de servicio no disponible 503 ” si una solicitud no es enrutada por un use_backend o default_backend directiva.
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
La cookie directiva habilita basado en cookies persistencia, instruye a HAProxy para enviar una cookie llamada SERVERID al cliente y asociarlo con el ID del servidor que dio la respuesta inicial.
El servidor La directiva se usa para definir los servidores ascendentes en el formato sever_name (por ejemplo, websrv1 ), IP_del_servidor:puerto y opciones .
Una opción clave es marcar que le dice a HAProxy para seguir comprobando la disponibilidad de un servidor e informar 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 siguiente captura de pantalla. Guarde el archivo y ciérrelo.
Configuración de front-end y back-end de HAProxy
# systemctl restart haproxy
# 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:Probar la configuración de HAProxy y ver las estadísticas
10.42.0.247 www.tecmint.lan
http://10.42.0.247/ OR http://www.tecmint.lan/
Compruebe la configuración de HAProxy
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 (consulte el parámetro de autenticación de estadísticas).
Página de inicio de sesión de estadísticas de HAProxy
Después de un inicio de sesión exitoso, aterrizará en el HAProxy página de estadísticas que le muestra métricas que cubren el estado de sus servidores, las tasas de solicitud actuales, los 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 colocado uno de los servidores back-end.
Informe de estadísticas HAProxy
Paso 4:Configuración de HTTPS en HAProxy mediante un certificado SSL autofirmado
En SSL/TLS modo de descarga, HAProxy descifra el tráfico en el lado del cliente y se conecta en tráfico claro a los servidores backend.
Comenzaremos creando el certificado y clave como se muestra (responda las preguntas según corresponda según los detalles de su empresa durante la creación del certificado, como se destaca 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
Crear SSL para HAProxy
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
Configurar el front-end de HAProxy con SSL
Guarde el archivo y ciérrelo.
# systemctl restart haproxy.service
Error de conexión SSL HAProxy
Continuar con la conexión
Acceder al sitio a través de HTTPS
¡Eso es todo por ahora! Cada aplicación web tiene su propio conjunto de requisitos, debe diseñar y configurar el balanceo de carga para adaptarse a su infraestructura de TI y 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, sobre cómo usar HAProxy , consulte la documentación oficial de la edición comunitaria de HAProxy o la documentación de la versión empresarial de HAProxy. Puede publicar cualquier pregunta o comentario a través del formulario de comentarios a continuación.
Compartir es cuidar…Compartir en FacebookCompartir en TwitterCompartir en LinkedinCompartir en Reddit