Instal·lació de l'equilibrador de càrrega HAProxy a CentOS

La traducció de l'article es va preparar la vigília de l'inici del curs administrador de Linux. Virtualització i clúster»

Instal·lació de l'equilibrador de càrrega HAProxy a CentOS

L'equilibri de càrrega és una solució habitual per ampliar les aplicacions web a diversos hosts alhora que ofereix als usuaris un únic punt d'accés a un servei. HAProxy és un dels programaris d'equilibri de càrrega de codi obert més populars que també ofereix alta disponibilitat i funcionalitat de proxy.

HAProxy té com a objectiu optimitzar l'ús dels recursos, maximitzar el rendiment, minimitzar el temps de resposta i evitar la sobrecàrrega de qualsevol recurs únic. Es pot instal·lar en una varietat de distribucions de Linux, com CentOS 8, en què ens centrarem en aquesta guia, així com en sistemes Debian 8 и Ubuntu 16.

Instal·lació de l'equilibrador de càrrega HAProxy a CentOS

HAProxy és especialment adequat per a llocs web de molt trànsit i, per tant, s'utilitza sovint per millorar la fiabilitat i el rendiment de les configuracions de serveis web multiservidor. Aquesta guia descriu els passos per configurar HAProxy com a equilibrador de càrrega en un amfitrió al núvol CentOS 8, que després encamina el trànsit als vostres servidors web.

Com a requisit previ per obtenir els millors resultats, hauríeu de tenir almenys dos servidors web i un servidor d'equilibri de càrrega. Els servidors web han d'executar almenys un servei web bàsic com nginx o httpd per comprovar l'equilibri de càrrega entre ells.

Instal·lant HAProxy a CentOS 8

A causa del fet que HAProxy és una aplicació de codi obert de desenvolupament ràpid, és possible que la distribució disponible als dipòsits estàndard de CentOS no sigui la versió més recent. Per esbrinar la darrera versió, executeu l'ordre següent:

sudo yum info haproxy

HAProxy sempre ofereix tres versions estables per triar: les dues versions compatibles més recents i la tercera versió més antiga que encara està rebent actualitzacions crítiques. Sempre podeu comprovar la darrera versió estable que apareix al lloc web d'HAProxy i després decidir amb quina versió voleu treballar.

En aquesta guia, instal·larem l'última versió estable 2.0, que encara no estava disponible als repositoris estàndard en el moment d'escriure. Haureu d'instal·lar-lo des de la font original. Però primer, comproveu si heu complert les condicions necessàries per descarregar i compilar el programa.

sudo yum install gcc pcre-devel tar make -y

Baixeu el codi font amb l'ordre següent. Podeu comprovar si hi ha una versió més nova disponible a Pàgina de descàrrega d'HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Un cop finalitzada la descàrrega, extreu els fitxers mitjançant l'ordre següent:

tar xzvf ~/haproxy.tar.gz -C ~/

Canvieu al directori font descomprimit:

cd ~/haproxy-2.0.7

A continuació, compileu el programa per al vostre sistema:

make TARGET=linux-glibc

I finalment instal·leu el mateix HAProxy:

sudo make install

Ara està instal·lat HAProxy, però requereix algunes manipulacions addicionals perquè funcioni. Continuem configurant el programari i els serveis a continuació.

Configurant HAProxy per al vostre servidor

Ara afegiu els següents directoris i fitxers d'estadístiques per a les entrades HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Creeu un enllaç simbòlic per als binaris perquè pugueu executar ordres HAProxy com a usuari normal:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Si voleu afegir el proxy al vostre sistema com a servei, copieu el fitxer haproxy.init dels exemples al vostre directori /etc/init.d. Editeu els permisos del fitxer perquè s'executi l'script i torneu a carregar el dimoni systemd:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

També heu de permetre que el servei es reiniciï automàticament a l'inici del sistema:

sudo chkconfig haproxy on

Per comoditat, també es recomana afegir un usuari nou per executar HAProxy:

sudo useradd -r haproxy

Després d'això, podeu tornar a comprovar el número de versió instal·lada amb l'ordre següent:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

En el nostre cas, la versió hauria de ser 2.0.7, tal com es mostra a la sortida de mostra anterior.

Finalment, el tallafoc predeterminat a CentOS 8 és força restrictiu per a aquest projecte. Utilitzeu les ordres següents per habilitar els serveis necessaris i restablir el tallafoc:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Configuració d'un equilibrador de càrrega

Configurar HAProxy és un procés bastant senzill. Bàsicament, tot el que heu de fer és dir-li a HAProxy quines connexions hauria d'escoltar i on transmetre-les.

Això es fa mitjançant la creació d'un fitxer de configuració /etc/haproxy/haproxy.cfg amb la configuració definida. Podeu llegir sobre les opcions de configuració d'HAProxy a la pàgina de documentaciósi en voleu saber més.

Equilibri de càrrega a la capa de transport (capa 4)

Comencem amb la configuració bàsica. Creeu un fitxer de configuració nou, per exemple utilitzant vi amb l'ordre següent:

sudo vi /etc/haproxy/haproxy.cfg

Afegiu les seccions següents al fitxer. Substitueix nom_servidor el que hauria de trucar als vostres servidors a la pàgina d'estadístiques, i ip_privada - adreces IP privades dels servidors als quals voleu dirigir el trànsit web. Podeu comprovar les adreces IP privades al tauler de control d'UpCloud i a la pestanya Xarxa privada al menú Xarxa.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

Això defineix un equilibrador de càrrega de la capa de transport (capa 4) anomenat externament http_front listening al port 80, que després encamina el trànsit al backend predeterminat anomenat http_back. Estadístiques addicionals /haproxy?stats connecta la pàgina d'estadístiques amb l'adreça especificada.

Diversos algorismes d'equilibri de càrrega.

L'especificació de servidors a la secció de fons permet que HAProxy utilitzi aquests servidors per equilibrar la càrrega segons l'algoritme round robin quan sigui possible.

S'utilitzen algorismes d'equilibri per determinar a quin servidor del backend s'envia cada connexió. Aquestes són algunes de les opcions útils:

  • Roundrobin: cada servidor s'utilitza al seu torn segons el seu pes. Aquest és l'algoritme més fluid i just quan el temps de processament dels servidors es distribueix uniformement. Aquest algorisme és dinàmic, que permet ajustar el pes del servidor sobre la marxa.
  • Leastconn: se selecciona el servidor amb menys connexions. Round robin es realitza entre servidors amb la mateixa càrrega. Es recomana utilitzar aquest algorisme per a sessions llargues com ara LDAP, SQL, TSE, etc., però no molt adequat per a sessions curtes com HTTP.
  • Primer: el primer servidor amb ranures de connexió disponibles rep la connexió. Els servidors es seleccionen des de l'ID numèric més baix fins al més alt, que per defecte correspon a la posició del servidor a la granja. Una vegada que el servidor arriba al valor maxconn, s'utilitza el següent servidor.
  • font: L'adreça IP d'origen es classifica i es divideix pel pes total dels servidors en execució per determinar quin servidor rebrà la sol·licitud. Així, la mateixa adreça IP del client anirà sempre al mateix servidor, mentre que els servidors romandran sense canvis.

Configuració de l'equilibri de càrrega a la capa d'aplicació (capa 7)

Una altra opció disponible és configurar l'equilibrador de càrrega perquè funcioni a la capa d'aplicació (capa 7), cosa que és útil quan parts de la vostra aplicació web es troben en diferents amfitrions. Això es pot aconseguir limitant la transferència de la connexió, per exemple per URL.

Obriu el fitxer de configuració HAProxy amb un editor de text:

sudo vi /etc/haproxy/haproxy.cfg

A continuació, configureu els segments d'interfície i backend segons l'exemple següent:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

La interfície declara una regla ACL anomenada url_blog que s'aplica a totes les connexions amb camins que comencen per /blog. Use_backend especifica que les connexions que coincideixen amb la condició url_blog s'han de servir pel backend anomenat blog_back i totes les altres sol·licituds es gestionen pel backend predeterminat.

A la part posterior, la configuració configura dos grups de servidors: http_back, com abans, i un de nou anomenat blog_back, que gestiona les connexions a example.com/blog.

Després de canviar la configuració, deseu el fitxer i reinicieu HAProxy amb l'ordre següent:

sudo systemctl restart haproxy

Si rebeu algun advertiment o error durant l'inici, comproveu-ne la configuració i assegureu-vos que heu creat tots els fitxers i carpetes necessaris i, a continuació, proveu de reiniciar-lo.

Provant la configuració

Un cop HAProxy estigui configurat i en funcionament, obriu l'adreça IP pública del servidor d'equilibri de càrrega en un navegador i comproveu si us heu connectat correctament al backend. El paràmetre stats uri de la configuració crea una pàgina d'estadístiques a l'adreça especificada.

http://load_balancer_public_ip/haproxy?stats

Quan carregueu la pàgina d'estadístiques, si tots els vostres servidors són verds, la configuració va ser correcta.

Instal·lació de l'equilibrador de càrrega HAProxy a CentOS

La pàgina d'estadístiques conté informació útil per fer el seguiment dels vostres amfitrions web, inclòs el temps d'activació/desactivació i el nombre de sessions. Si el servidor està marcat en vermell, assegureu-vos que el servidor estigui activat i que hi podeu fer ping des de l'equilibrador de càrrega.

Si el vostre equilibrador de càrrega no respon, assegureu-vos que les connexions HTTP no estiguin bloquejades per un tallafoc. Assegureu-vos també que HAProxy funcioni amb l'ordre següent:

sudo systemctl status haproxy

Protecció de la pàgina d'estadístiques amb una contrasenya

Tanmateix, si la pàgina d'estadístiques només apareix a la interfície, està oberta al públic, cosa que potser no és una bona idea. En lloc d'això, podeu assignar-li el vostre propi número de port afegint l'exemple següent al final del fitxer haproxy.cfg. Substitueix nom d'usuari и contrasenya a alguna cosa segura:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Després d'afegir el nou grup d'escolta, traieu la referència antiga de l'uri d'estadístiques del grup d'interfície. Quan hàgiu acabat, deseu el fitxer i reinicieu HAProxy.

sudo systemctl restart haproxy

A continuació, torneu a obrir l'equilibrador de càrrega amb el nou número de port i inicieu sessió amb el nom d'usuari i la contrasenya que heu especificat al fitxer de configuració.

http://load_balancer_public_ip:8181

Assegureu-vos que tots els vostres servidors encara siguin verds i, a continuació, obriu només la IP de l'equilibrador de càrrega sense cap número de port al vostre navegador.

http://load_balancer_public_ip/

Si teniu almenys una varietat de pàgines de destinació als vostres servidors interns, notareu que cada vegada que torneu a carregar la pàgina, rebeu una resposta d'un amfitrió diferent. Podeu provar diferents algorismes d'equilibri a la secció de configuració o veure documentació completa.

Conclusió: HAProxy Load Balancer

Enhorabona per configurar correctament el vostre equilibrador de càrrega HAProxy! Fins i tot amb una configuració bàsica d'equilibri de càrrega, podeu millorar molt el rendiment i la disponibilitat de la vostra aplicació web. Aquesta guia és només una introducció a l'equilibri de càrrega amb HAProxy, que és capaç de molt més del que es pot descriure en una guia de configuració ràpida. Recomanem experimentar amb diferents configuracions utilitzant extensa documentaciódisponible per a HAProxy i, a continuació, comenceu a planificar l'equilibri de càrrega per al vostre entorn de producció.

Mitjançant l'ús de diversos amfitrions per protegir el vostre servei web amb marge, el propi equilibrador de càrrega encara pot representar un punt de fallada. Podeu millorar encara més l'alta disponibilitat configurant una IP flotant entre diversos equilibradors de càrrega. Podeu obtenir més informació sobre això al nostre article sobre adreces IP flotants a UpCloud.

Més informació sobre el curs administrador de Linux. Virtualització i clúster»***

Font: www.habr.com

Afegeix comentari