HAProxy significa Proxy de alta disponibilidad. Escrito en C, es un equilibrador de carga TCP/HTTP gratuito y de código abierto y una solución de proxy para aplicaciones basadas en TCP y HTTP. HAProxy se utiliza para mejorar el rendimiento de un entorno de servidor mediante la distribución de la carga de trabajo entre varios servidores.
HAProxy permite que una aplicación se reinicie automáticamente o redirija el trabajo a otro servidor en caso de falla. Este balanceador de carga potente, de alto rendimiento, confiable y seguro es el más utilizado y fue diseñado especialmente para sitios web de muy alto tráfico.
En este tutorial, le mostraremos cómo configurar un balanceador de carga de alta disponibilidad con HAProxy en CentOS 8.
Requisitos
- Tres CentOS 8 VPS nuevos en la plataforma en la nube Atlantic.Net
- Una contraseña raíz configurada en cada VPS
Para este tutorial, utilizaremos la siguiente configuración:
Servidor HAProxy: – nombre de host:haproxy IP:192.168.0.10
Servidor web 1:- nombre de host:web1 IP:192.168.0.11
Servidor web 2:- nombre de host:web2 IP:192.168.0.12
Paso 1:crear un servidor en la nube de Atlantic.Net
Primero, inicie sesión en su servidor en la nube de Atlantic.Net. Cree un nuevo servidor, eligiendo CentOS 8 como sistema operativo con al menos 1 GB de RAM. Conéctese a su servidor en la nube a través de SSH e inicie sesión con las credenciales resaltadas en la parte superior de la página.
Una vez que haya iniciado sesión en su servidor CentOS 8, ejecute el siguiente comando para actualizar su sistema base con los últimos paquetes disponibles.
dnf update -y
Paso 2:instalar y configurar Nginx
Nota:Complete este paso en WebServer 1 y WebServer2
Primero, deberá instalar el servidor web Nginx en las instancias web1 y web2.
Puede instalar Nginx ejecutando el siguiente comando:
dnf install nginx -y
Una vez que se haya instalado Nginx, inicie el servicio Nginx y habilítelo para que se inicie en el arranque en ambas instancias:
systemctl start nginx systemctl enable nginx
A continuación, modifique el index.html archivo en cada instancia.
Modificar index.html archivo en web1 instancia con el siguiente comando:
echo "This is My First Nginx Web Server" > /usr/share/nginx/html/index.html
Modificar index.html archivo en web2 instancia con el siguiente comando:
echo "This is My Second Nginx Web Server" > /usr/share/nginx/html/index.html
Guarde y cierre el archivo cuando haya terminado.
Paso 3:instalar y configurar HAProxy
Nota:complete este paso en el servidor HAProxy
Primero, instale HAProxy en la instancia del servidor haproxy con el siguiente comando:
dnf install haproxy -y
Una vez completada la instalación, haga una copia de seguridad del archivo de configuración predeterminado de haproxy:
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg-bak
El archivo de configuración se divide en cuatro secciones principales.
- configuración global: Se utiliza para establecer parámetros de todo el proceso.
- valores predeterminados: Se utiliza para establecer parámetros predeterminados para todas las demás secciones.
- interfaz: Se utiliza para definir cómo se accede externamente a HAProxy para habilitar el acceso al backend.
- backend: Se utiliza para definir un conjunto de servidores a los que se conectará el proxy para reenviar las conexiones entrantes.
A continuación, cree un nuevo archivo de configuración de haproxy con el siguiente comando:
nano /etc/haproxy/haproxy.cfg
Agregue las siguientes líneas que coincidan con su infraestructura:
#————————————————————————
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon
# activar estadísticas socket unix
stats socket /var/lib/haproxy/stats
# utilizar políticas criptográficas en todo el sistema
ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM
#————————————————————————
defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000
#————————————————————————
# frontend principal que actúa como proxy a los backends
#————————————————————————
frontend haproxy_balancer # define the name of the frontend. bind 192.168.0.10:80 # IP address of HAProxy server option http-server-close option forwardfor stats uri /haproxy?stats # Specify the HAProxy status page. default_backend webservers
#————————————————————————
# Equilibrio por turnos entre los distintos backends
#————————————————————————
servidores web backend # Especifique un nombre para identificar una aplicación
mode http balance roundrobin # defines the roundrobin load balancer scheduling algorithm option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost server nginx-web1 192.168.0.11:80 check # IP address of the first backend server server nginx-web2 192.168.0.12:80 check # IP address of the second backend server
Nota:asegúrese de modificar la dirección IP anterior con la IP relevante para la configuración de su servidor
Guarde y cierre el archivo cuando haya terminado. Luego, verifique el archivo de configuración de haproxy en busca de errores con el siguiente comando:
haproxy -c -f /etc/haproxy/haproxy.cfg
Deberías obtener el siguiente resultado:
Configuration file is valid
Finalmente, inicie el servicio haproxy y habilítelo para que se inicie en el arranque con el siguiente comando:
systemctl start haproxy systemctl enable haproxy
También puede verificar haproxy con el siguiente comando:
systemctl status haproxy
Deberías obtener el siguiente resultado:
haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2020-04-24 02:14:55 EDT; 5min ago Process: 1371 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS) Main PID: 1373 (haproxy) Tasks: 2 (limit: 6087) Memory: 2.8M CGroup: /system.slice/haproxy.service ├─1373 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid └─1374 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid Apr 24 02:14:55 haproxy systemd[1]: Starting HAProxy Load Balancer... Apr 24 02:14:55 haproxy systemd[1]: Started HAProxy Load Balancer.
Paso 4:configurar el registro HAProxy
El registro de HAProxy le permite ver estadísticas de cada conexión a sus servidores web backend.
Puede configurar rsyslog editando el archivo /etc/rsyslog.conf:
nano /etc/rsyslog.conf
Descomente la siguiente línea:
module(load="imudp") input(type="imudp" port="514")
Guarde y cierre el archivo cuando haya terminado. A continuación, deberá configurar un servidor rsyslog para recibir y procesar los mensajes de registro de HAProxy.
Para ello, cree un nuevo archivo de configuración haproxy.conf:
nano /etc/rsyslog.d/haproxy.conf
Agregue las siguientes líneas:
local2.=info /var/log/haproxy-access.log local2.notice /var/log/haproxy-info.log
Guarde y cierre el archivo cuando haya terminado. Luego, reinicie el servicio rsyslog y habilítelo para que comience en el arranque con el siguiente comando:
systemctl restart rsyslog systemctl enable rsyslog
Paso 5:Probar el equilibrio de carga de HAProxy
En este punto, HAProxy está instalado y configurado. Es hora de probar si el equilibrio de carga funciona o no.
Abra su navegador web y escriba su IP HAProxy http://192.168.0.10. Debería ver el contenido de su primer servidor web Nginx en la siguiente pantalla:
A continuación, actualice la página web. Debería ver el contenido de su segundo servidor web Nginx en la siguiente pantalla:
Puede ver el estado de haproxy usando la URL http://192.168.0.10/haproxy?stats. Debería ver el estado de sus servidores, las tasas de solicitudes actuales, los tiempos de respuesta y otras métricas en la siguiente pantalla:
Conclusión
En la guía anterior, aprendimos cómo configurar un balanceador de carga de alta disponibilidad con HAProxy en CentOS 8. Ahora puede diseñar y configurar fácilmente el balanceo de carga para adaptarse a su infraestructura de TI y los requisitos de la aplicación; pruébelo en VPS Hosting de Atlantic.Net.