HAProxy es un servidor proxy y equilibrador de carga de alta disponibilidad HTTP/TCP gratuito. Distribuye las solicitudes entre múltiples servidores para mitigar los problemas que resultan de la falla de un solo servidor. HA Proxy es utilizado por varios sitios web de alto perfil, incluidos GitHub, Bitbucket, Stack Overflow, Reddit, Tumblr, Twitter y Tuenti, y se utiliza en el producto OpsWorks de Amazon Web Services.
Aquí en LinuxAPT, como parte de nuestros Servicios de Administración de Servidores, ayudamos regularmente a nuestros Clientes a realizar consultas relacionadas con la configuración de HAProxy.
En este contexto, veremos cómo instalar HAProxy en su sistema CentOS 8.
Pasos para instalar y configurar HAProxy en CentOS 8
1. Realice la actualización del sistema
Primero, comencemos asegurándonos de que su sistema esté actualizado:
$ sudo clean all
$ sudo dnf update
2. Instale HAProxy en el sistema
HAProxy está disponible en el CentOS 8 predeterminado. Ahora use el siguiente comando dnfa para instalar HAProxy:
$ sudo dnf install haproxy
A continuación, tenemos que verificar que HAProxy se inicia cada vez que reiniciamos nuestro servidor. Podemos lograr eso con el siguiente comando chkconfig:
$ chkconfig haproxy on
3. Configurar HAProxy
Vamos a crear un archivo de configuración /etc/haproxy/haproxy.cfg que contiene los ajustes y configuraciones necesarios:
$ sudo nano /etc/haproxy/haproxy.cfg
Introduzca lo siguiente en el archivo:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
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 main
bind *:5000
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend app
backend static
balance roundrobin
server static 127.0.0.1:4331 check
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
Puede ver los detalles de configuración y más información en esta URL. Una vez que haya configurado HAProxy, es hora de iniciar el servicio:
$ sudo systemctl start haproxy
$ sudo systemctl enable haproxy
4. Configurar cortafuegos
Agregaremos HAProxy al firewall de CentOS 8 y actualizaremos las reglas con los siguientes comandos:
$ sudo firewall-cmd --add-port=8088/tcp --permanent
$ sudo firewall-cmd --reload
5. Configurar el registro HAProxy
Para configurar el registro estándar de HAProxy, edite /etc/rsyslog.conf y habilite la recepción UDP Syslog en el puerto 514:
$ sudo nano /etc/rsyslog.conf
...
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
...
*.info;mail.none;authpriv.none;cron.none,local2.none /var/log/messages
local2.* /var/log/haproxy.log
...
Luego, guarde el archivo de configuración y ejecute el siguiente comando para verificar si hay errores:
$ rsyslogd -N1
$ sudo systemctl restart rsyslog haproxy
6. Configure Apache X-Forwarded-For Logging en servidores backend
Ahora iniciamos sesión en los servidores backend y configuramos Apache para registrar encabezados X-Forwarded-For. La línea predeterminada que estamos cambiando es:
...
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
...
Edite esta línea para que se vea así:
...
LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
...
Guarde el archivo y reinicie Apache:
$ apachectl configtest
$ sudo systemctl restart httpd
¿Cómo probar el balanceador de carga HAProxy?
Para verificar que HAProxy puede equilibrar la carga de las solicitudes HTTP, navegue hasta el navegador y acceda a HAProxy utilizando el nombre de host o la dirección IP.
¿Cómo reiniciar HAProxy?
Después de configurar la capa 4 o la capa 7, reinicie HAProxy con el siguiente comando:
$ systemctl restart haproxy
Un reinicio exitoso no generará resultados, lo que significa que HAProxy está funcionando con los cambios que acaba de implementar.