Com configurar HAProxy com a equilibrador de càrrega per a Nginx a CentOS 8


Per garantir la màxima disponibilitat, escalabilitat i alt rendiment d'aplicacions web, ara és habitual implementar tecnologies que introdueixen redundància, com ara l'agrupació de servidors i l'equilibri de càrrega. Per exemple, configurar un clúster de servidors que executin totes les mateixes aplicacions i després desplegar equilibradors de càrrega davant d'ells per distribuir el trànsit.

HAProxy és un equilibrador de càrrega TCP/HTTP d'alta disponibilitat de codi obert, potent, d'alt rendiment, fiable, segur i àmpliament utilitzat, servidor intermediari i terminador SSL/TLS creat per a llocs web de molt trànsit. Funciona bé de manera fiable en sistemes operatius Linux, Solaris, FreeBSD, OpenBSD i AIX.

Aquesta guia mostra com configurar un equilibrador de càrrega d'alta disponibilitat dedicat amb HAProxy a CentOS 8 per controlar el trànsit en un clúster de servidors web NGINX. També demostra com configurar la terminació SSL/TLS a HAProxy.

Un total de 4 servidors amb una instal·lació mínima de CentOS 8.

----------- 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

Pas 1: Configuració del servidor HTTP Nginx a les màquines client

1. Inicieu sessió a totes les vostres màquines client CentOS 8 i instal·leu el servidor web Nginx mitjançant el gestor de paquets dnf tal com es mostra.

# dnf install Nginx

2. A continuació, inicieu el servei Nginx, de moment, habiliteu-lo perquè s'iniciï automàticament a l'arrencada del sistema i confirmeu que està en funcionament comprovant el seu estat, utilitzant les ordres systemctl (feu-ho a totes les màquines client).

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

3. A més, si el servei tallafocs s'està executant a totes les màquines client (cosa que podeu comprovar executant systemctl start firewalld), heu d'afegir els serveis HTTP i HTTPS a la configuració del tallafoc per permetre que les sol·licituds de l'equilibrador de càrrega passin pel tallafoc. als servidors web de Nginx. A continuació, torneu a carregar el servei tallafocs per efectuar els nous canvis (feu-ho a totes les màquines client).

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent --add-service=https
# firewall-cmd --reload

4. A continuació, obriu un navegador web a les vostres màquines locals i comproveu si la instal·lació de Nginx funciona bé. Utilitzeu les IP del client per navegar, un cop vegeu la pàgina de prova de Nginx, vol dir que el servidor web instal·lat a la màquina client funciona correctament.

5. A continuació, hem de crear pàgines de prova a les màquines client que utilitzarem més endavant per provar la configuració d'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

Pas 2: instal·lació i configuració del servidor HAProxy a CentOS 8

6. Ara instal·leu el paquet HAProxy al servidor HAProxy executant l'ordre següent.

# dnf install haproxy

7. A continuació, inicieu el servei HAProxy, activeu-lo perquè s'iniciï automàticament a l'arrencada del sistema i verifiqueu-ne l'estat.

# systemctl start haproxy
# systemctl enable haproxy
# systemctl status haproxy

8. Ara configurarem l'HAProxy mitjançant el següent fitxer de configuració.

# vi /etc/haproxy/haproxy.cfg

El fitxer de configuració es divideix en quatre seccions principals.

  • Configuració global: estableix els paràmetres de tot el procés.
  • Valors per defecte: aquesta secció estableix els paràmetres predeterminats per a totes les altres seccions després de la seva declaració.
  • Interface: aquesta secció descriu un conjunt de connectors d'escolta que accepten connexions de client.
  • Backend: aquesta secció descriu un conjunt de servidors als quals es connectarà el servidor intermediari per reenviar connexions entrants.

Per entendre les opcions de la configuració global i els valors predeterminats, llegiu la documentació d'HAProxy (enllaç que es proporciona al final de l'article). Per a aquesta guia, utilitzarem els valors predeterminats.

9. HAProxy, un cop desplegat, tindrà un paper important en la vostra infraestructura de TI, per la qual cosa la configuració del registre és un requisit bàsic; això us permet obtenir informació sobre cada connexió als vostres servidors web de fons.

El paràmetre de registre (ressaltat a la captura de pantalla següent) declara un servidor Syslog global (com ara rsyslog el valor predeterminat a CentOS) que rebrà missatges de registre. Aquí es pot declarar més d'un servidor.

La configuració predeterminada apunta al localhost (127.0.0.1) i local2 és el codi d'instal·lació predeterminat utilitzat per identificar els missatges de registre d'HAProxy a rsyslog.

10. A continuació, heu d'indicar al servidor rsyslog com rebre i processar els missatges de registre d'HAProxy. Obriu el fitxer de configuració rsyslog a /etc/rsyslog.conf o creeu un fitxer nou dins del directori /etc/rsyslog.d, per exemple /etc/rsyslog.d/haproxy.conf.

# vi /etc/rsyslog.d/haproxy.conf

Copieu i enganxeu la configuració següent per recopilar el registre amb UDP al port predeterminat 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Afegiu també aquestes línies per indicar a rsyslog que escrigui en dos fitxers de registre separats en funció de la gravetat, on local2 és el codi d'instal·lació definit a la configuració HAProxy anterior.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Deseu el fitxer i tanqueu-lo. A continuació, reinicieu el servei rsyslog per aplicar els canvis recents.

# systemctl restart rsyslog

12. En aquesta secció, demostrarem com configurar els servidors intermediaris front-end i back-end. Torneu al fitxer de configuració d'HAProxy i modifiqueu les seccions de front-end i backend predeterminades de la manera següent. No entrarem en una explicació detallada de cada paràmetre, sempre podeu consultar la documentació oficial.

La configuració següent defineix una secció d'escolta que s'utilitza per mostrar la pàgina Estadístiques d'HAProxy. El paràmetre bind assigna un oient a una adreça IP determinada (* per a tots en aquest cas) i un port (9000).

La configuració d'habilitació d'estadístiques habilita la pàgina d'estadístiques a la qual s'accedirà mitjançant l'URI /stats (és a dir, http://server_ip:9000/stats).

La configuració d'autenticació d'estadístiques s'utilitza per afegir una autenticació bàsica en accedir a la pàgina (substituïu haproxy i [email  per un nom d'usuari i una contrasenya que trieu).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:[email 

13. La següent configuració defineix una secció d'interfície anomenada TL (podeu donar un nom que us agradi). El paràmetre mode defineix el mode en què opera HAProxy.

El paràmetre acl (Llista de control d'accés) s'utilitza per prendre una decisió basada en el contingut extret de la sol·licitud. En aquest exemple, la sol·licitud es considera HTTP normal si no es fa mitjançant SSL.

A continuació, s'utilitza la configuració de la capçalera http-request set-header per afegir una capçalera HTTP a la sol·licitud. Això ajuda a informar Nginx que la sol·licitud inicial es va fer mitjançant HTTP (o mitjançant el port 80).

La directiva default_backend o use_backend defineix els servidors backend, en aquest cas, als quals fa referència TL_web_servers.

Tingueu en compte que HAProxy retornarà un error 503 Service Unavailable si una sol·licitud no s'encamina mitjançant 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. Aleshores hem de definir una secció de fons on la configuració d'equilibri defineix com HAProxy selecciona els servidors de fons per processar una sol·licitud si cap mètode de persistència anul·la aquesta selecció.

La directiva de galetes permet la persistència basada en galetes, indica a HAProxy que enviï una galeta anomenada SERVERID al client i que l'associï amb l'ID del servidor que va donar la resposta inicial.

La directiva de servidor s'utilitza per definir els servidors aigües amunt en el format nom_servidor (per exemple, websrv1), IP_servidor:port i opcions.

Una opció clau és comprovar que indica a HAProxy que segueixi comprovant la disponibilitat d'un servidor i informe a la pàgina d'estadístiques.

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

Comenta qualsevol altra secció d'interfície i backend tal com es mostra a la captura de pantalla que segueix. Deseu el fitxer i tanqueu-lo.

15. Ara reinicieu el servei HAProxy per aplicar els nous canvis.

# systemctl restart haproxy

16. A continuació, assegureu-vos que els serveis HTTP (port 80) i HTTPS (port 433) estiguin oberts al tallafoc per acceptar les sol·licituds dels clients de la manera següent. A més, obriu el port 9000 al tallafoc per accedir a la pàgina d'estadístiques i torneu a carregar la configuració del tallafoc.

# 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

Pas 3: provant la configuració d'HAProxy i visualitzant les estadístiques

17. Ara és el moment de provar la configuració d'HAPrxoy. A la màquina d'escriptori local des d'on accediu a tots els servidors, afegiu la línia següent al fitxer /etc/hosts per permetre'ns utilitzar el domini del lloc fictici.

10.42.0.247  www.tecmint.lan

18. A continuació, obriu un navegador i navegueu mitjançant l'adreça del servidor o el domini del lloc.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. Per accedir a la pàgina d'estadístiques d'HAProxy, utilitzeu l'adreça següent.

http://10.42.0.247:9000/stats

A continuació, utilitzeu el nom d'usuari i la contrasenya que heu definit al fitxer de configuració HAProxy (consulteu el paràmetre d'autenticació d'estadístiques).

Després d'iniciar sessió amb èxit, arribareu a la pàgina d'estadístiques d'HAProxy que us mostra mètriques que cobreixen la salut dels vostres servidors, les taxes de sol·licituds actuals, els temps de resposta i molt més.

Per demostrar com funciona l'informe d'estat pel que fa als codis de color, hem posat un dels servidors de fons.

Pas 4: Configuració d'HTTPS a HAProxy mitjançant un certificat SSL autofirmat

20. En aquesta darrera secció, demostrarem com configurar SSL/TLS per assegurar totes les comunicacions entre el servidor HAProxy i el client. HAProxy admet quatre modes principals de configuració HTTPS, però per a aquesta guia, utilitzarem la descàrrega SSL/TLS.

En el mode de descàrrega SSL/TLS, HAProxy desxifra el trànsit del costat del client i es connecta amb trànsit clar als servidors backend.

Començarem creant el certificat i la clau tal com es mostra (respon les preguntes en conseqüència en funció dels detalls de la teva empresa durant la creació del certificat, tal com es destaca a 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ó, obriu el fitxer de configuració HAProxy (/etc/haproxy/haproxy.cfg) i editeu la secció de la portada.

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

Deseu el fitxer i tanqueu-lo.

22. A continuació, reinicieu el servei HAProxy per aplicar els nous canvis.

# systemctl restart haproxy.service

23. A continuació, obriu un navegador web i proveu d'accedir al lloc una vegada més. El navegador mostrarà un error a causa del certificat autofirmat, feu clic a Avançat per continuar.

Això és tot per ara! Cada aplicació web té el seu propi conjunt de requisits, cal dissenyar i configurar l'equilibri de càrrega per adaptar-se als requisits de la vostra infraestructura informàtica i de l'aplicació.

Per obtenir més informació sobre algunes de les opcions de configuració que s'utilitzen en aquesta guia i, en general, sobre com utilitzar HAProxy, consulteu la documentació oficial de la versió empresarial d'HAProxy. Podeu publicar qualsevol pregunta o reflexió mitjançant el formulari de comentaris a continuació.