Escrito en C por Willy Tarreau, HAProxy, también conocido como High Availability Proxy, es un equilibrador de carga HTTP y servidor proxy rápido y ligero. Tiene un bajo uso de CPU y es ocasionado por una pequeña huella de memoria. El balanceador de carga es utilizado por sitios web populares como StackOverflow, Twitter, Github y Tumblr, por mencionar solo algunos.
En esta guía, le mostraremos cómo configurar HAProxy como balanceador de carga para el servidor web Nginx en CentOS 7. El balanceador de carga se ubicará frente a 2 servidores web Nginx y distribuirá equitativamente las solicitudes HTTP a los servidores.
Algoritmo de equilibrio HAProxy
Este es el algoritmo que utiliza el equilibrador de carga para la selección de los servidores web al distribuir las cargas de trabajo.
1. turno rotativo
Este es el más simple de los algoritmos. Básicamente, cada nueva conexión será manejada por el siguiente servidor web. Por ejemplo, si tiene 4 servidores back-end, cada uno de ellos manejará las solicitudes en sucesión. Cuando se alcanza el último servidor web de la lista, el balanceador de carga comenzará desde arriba nuevamente con el primer servidor web.
2. Última conexión
Aquí, una nueva solicitud será manejada por el servidor con la menor cantidad de conexiones. Esto es útil cuando la carga y los tiempos de las solicitudes difieren con grandes variaciones.
Cómo empezar
Para comenzar, realice una lista de verificación previa al vuelo y asegúrese de tener lo siguiente.
Nombre de host | Dirección IP del servidor |
---|---|
equilibrador de carga | 173.82.168.96 |
servidor-web-1 | 173.82.2.236 |
servidor-web-2 | 173.82.94.57 |
A continuación se muestra una representación gráfica de la configuración.
Paso 1:Configure el archivo /etc/hosts en el balanceador de carga
Inicie sesión en el balanceador de carga mediante SSH y agregue las direcciones IP y los nombres de host de los servidores web Nginx como se muestra.
vim /etc/hosts
173.82.2.236 web-server-1
173.82.94.57 web-server-2
Guarde y salga del editor de texto vim.
A continuación, inicie sesión en cada uno de los servidores web (web-server-1 y web-server-2) y edite el /etc/hosts
archivo para apuntar al equilibrador de carga.
173.82.168.96 load-balancer
Guarde y salga del editor de texto.
Paso 2:instalar y configurar HAProxy en el servidor del equilibrador de carga
El repositorio de HAProxy está disponible en el repositorio de CentOS. Para instalar y configurar HAProxy, primero inicie sesión y actualice los repositorios del sistema.
yum update -y
Luego, instale HAProxy usando el comando:
yum -y install haproxy
Salida de muestra
Una vez que la instalación sea exitosa y esté completa, dirígete al directorio haproxy.
cd /etc/haproxy
Haga una copia de seguridad de haproxy.cfg
renombrándolo a haproxy.cfg.bak
mv haproxy.cfg haproxy.cfg.bak
A continuación, cree un nuevo archivo de configuración de HAproxy.
vim haproxy.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy running under user and group "haproxy"
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
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
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080 #Haproxy Monitoring run on port 8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats #URL for HAProxy monitoring
stats realm Haproxy\ Statistics
stats auth Password123: Password123 #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd round robin as balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Check the server application is up and healty - 200 status code
server web-server-1 173.82.2.236:80 check #Nginx1
server web-server-2 173.82.94.57:80 check #Nginx2
Tome nota de los servidores web que se han especificado en las últimas 2 líneas como se muestra en el resultado.
Guarde y salga del editor de texto.
A continuación, vamos a configurar el rsyslog daemon para registrar las estadísticas de HAProxy.
Edite el rsyslog.conf
para permitir que rsyslog utilice el puerto UDP 514.
vim /etc/rsyslog.conf
Para permitir la conexión UDP a través del puerto 154, descomente las siguientes líneas.
$ModLoad imudp
$UDPServerRun 514
Guarde y salga del editor de texto.
A continuación, cree un nuevo archivo de configuración de HAProxy para syslog.
vim /etc/rsyslog.d/haproxy.conf
Pegue la siguiente configuración
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info - Backend, loadbalancer
Guarde y salga del editor de texto.
Continúe y reinicie rsyslog.
systemctl restart rsyslog
A continuación, inicie y habilite Haproxy para que se inicie en el arranque.
systemctl start haproxy
systemctl enable haproxy
Para confirmar que HaProxy está funcionando, ejecute:
systemctl status haproxy
En el siguiente paso, instalaremos Nginx en nuestros servidores web.
Paso 3:Instalación y configuración de Nginx
El único paso crucial que queda es la instalación de Nginx en cada uno de nuestros servidores web.
Pero primero, instale el repositorio EPEL como se muestra
yum install epel-release
A continuación, instale Nginx
yum install nginx -y
Salida de muestra
Con Nginx instalado en ambos servidores, vamos a modificar el index.html
archivos en cada uno de los servidores web Nginx para crear una distinción entre cada servidor al simular con el balanceador de carga HAproxy.
Vaya al directorio html como se muestra:
cd /usr/share/nginx/html/
Copia de seguridad del archivo index.html
mv index.html index.html.bak
A continuación, cree un nuevo archivo index.html y pegue contenido de muestra.
Para el servidor web 1
echo "web-server-1. Hey ! This is your first web server" > index.html
Para servidor web 2
echo "web-server-2. Hey ! This is your second web server" > index.html
A continuación, inicie Nginx en ambos servidores web y confirme si el servicio se está ejecutando
systemctl start nginx
systemctl status nginx
Pruebas de equilibrio de carga
Para verificar que todo salió bien, ejecute el siguiente comando repetidamente.
curl 173.82.168.96
Tu salida debería ser similar a esta.
Como puede observar con atención, con cada ejecución subsiguiente del comando curl, la salida alterna entre el primer y el segundo contenido del servidor web ¡Perfecto!
Ahora, intentemos probar usando el navegador web.
https://load-balancer-IP-address
Esto mostrará el contenido en cualquiera de los servidores web, en este caso, web-server-2.
Ahora, intente actualizar una o dos veces y la salida apuntará al otro servidor web, en este caso, web-server-1.
¡Impresionante! Esto confirma que nuestro balanceador de carga puede distribuir equitativamente las solicitudes HTTP entre nuestros servidores web.
PARA recopilar más estadísticas del navegador del balanceador de carga, la siguiente URL
https://load-balancer-IP:8080/stats
Use Password123 como nombre de usuario y Password como definimos en haproxy.cfg
archivo de configuración.
Esto resume este tutorial sobre cómo configurar el balanceador de carga HAProxy para Nginx en CentOS 7. No dude en probarlo y compartir esta guía en sus redes sociales. Como siempre, agradeceremos sus comentarios.