Instalăm balansatorul de încărcare HAProxy pe CentOS

Articolul este tradus în cadrul pregătirii pentru lansarea cursului „Administrator Linux. Virtualizare și clusterizare”

Instalăm balansatorul de încărcare HAProxy pe CentOS

Balansarea încărcării este o soluție comună pentru scalarea orizontală a aplicațiilor web pe mai multe gazde, oferind utilizatorilor un singur punct de acces la serviciu. HAProxy este unul dintre cele mai populare programe de balansare a încărcării cu sursă deschisă, care asigură, de asemenea, o disponibilitate ridicată și funcționalitate de proxy.

HAProxy își propune să optimizeze utilizarea resurselor, să maximizeze lățimea de bandă, să minimizeze timpul de răspuns și să evite suprasarcina fiecărei resurse în parte. Poate fi instalat pe numeroase distribuții Linux, cum ar fi CentOS 8, pe care ne vom concentra în acest ghid, precum și în sisteme Debian 8 și Ubuntu 16.

Instalăm balansatorul de încărcare HAProxy pe CentOS

HAProxy este deosebit de potrivit pentru site-uri web cu un trafic foarte mare și este, din acest motiv, frecvent folosit pentru a îmbunătăți fiabilitatea și performanța configurațiilor de servicii web cu mai multe servere. În acest ghid, sunt prezentate pașii pentru configurarea HAProxy ca balansor de încărcare pe un gazduire cloud CentOS 8, care apoi direcționează traficul către serverele dvs. web.

Ca o cerință necesară pentru a obține cele mai bune rezultate, trebuie să aveți cel puțin două servere web și un server pentru balansarea încărcării. Pe serverele web ar trebui să ruleze cel puțin un serviciu web de bază, cum ar fi nginx sau httpd, pentru a putea verifica balansarea încărcării între acestea.

Instalarea HAProxy pe CentOS 8

Având în vedere că HAProxy este o aplicație în rapidă dezvoltare cu sursă deschisă, distribuția disponibilă în repozitoarele standard CentOS poate să nu fie cea mai recentă versiune. Pentru a verifica versiunea actuală, executați următoarea comandă:

sudo yum info haproxy

HAProxy oferă întotdeauna trei versiuni stabile: două cele mai recente versiuni suportate și a treia, mai veche, care primește încă actualizări critice. Puteți verifica întotdeauna cea mai recentă versiune stabilă indicată pe site-ul HAProxy și apoi decide cu ce versiune doriți să lucrați.

În acest ghid, vom instala cea mai recentă versiune stabilă 2.0, care nu a fost disponibilă în repositoare standard la momentul scrierii ghidului. Vei trebui să o instalezi din sursa originală. Dar mai întâi, verifică dacă ai îndeplinit cerințele necesare pentru a descărca și compila programul.

sudo yum install gcc pcre-devel tar make -y

Descarcă codul sursă folosind comanda de mai jos. Poți verifica dacă există o versiune mai recentă disponibilă pe pagina de descărcare HAProxy.

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

După ce descărcarea s-a finalizat, dezarhivează fișierele folosind comanda de mai jos:

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

Accesează directorul dezarhivat cu sursele:

cd ~/haproxy-2.0.7

Apoi compilează programul pentru sistemul tău:

make TARGET=linux-glibc

Și, în final, instalează HAProxy:

sudo make install

Acum HAProxy este instalat, dar sunt necesare câteva manipulări suplimentare pentru a-l face să funcționeze. Să continuăm cu configurarea software-ului și serviciilor mai jos.

Configurarea HAProxy pentru serverul tău

Acum adaugă următoarele directoare și fișierul de statistică pentru înregistrările HAProxy:

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

Creează un link simbolic pentru fișierele binare, astfel încât să poți executa comenzile HAProxy ca utilizator obișnuit:

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

Dacă vrei să adaugi serverul proxy în sistem ca un serviciu, copiază fișierul haproxy.init din examples în directorul tău /etc/init.d. Editează permisiunile fișierului astfel încât scriptul să fie executabil, apoi reîncarcă demonul 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

Trebuie de asemenea să permiți serviciului să se repornească automat la pornirea sistemului:

sudo chkconfig haproxy on

Pentru comoditate, este recomandat să adaugi un nou utilizator pentru a rula HAProxy:

sudo useradd -r haproxy

După asta, poți verifica din nou numărul versiunii instalate folosind următoarea comandă:

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

În cazul nostru, versiunea ar trebui să fie 2.0.7, așa cum este arătat în exemplul de mai sus.

În cele din urmă, firewall-ul în CentOS 8 este destul de restrictiv pentru acest proiect. Folosește comenzile de mai jos pentru a permite serviciile necesare și pentru a reîncărca firewall-ul:

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

Configurarea echilibratorului de încărcare

Configurarea HAProxy este un proces destul de simplu. Practic, tot ce trebuie să faceți este să îi spuneți HAProxy ce conexiuni trebuie să asculte și unde să le retransmită.

Acest lucru se face prin crearea unui fișier de configurare /etc/haproxy/haproxy.cfg cu setările necesare. Puteți citi despre parametrii de configurare HAProxy pe pagina de documentație, dacă doriți să aflați mai multe despre aceasta.

Echilibrarea încărcăturii la nivel de transport (layer 4)

Să începem cu configurația de bază. Creați un nou fișier de configurare, de exemplu, folosind vi cu comanda de mai jos:

sudo vi /etc/haproxy/haproxy.cfg

Adăugați în fișier următoarele secțiuni. Înlocuiți server_name cu ceea ce ar trebui să apară pe serverele dvs. în pagina de statistică, iar private_ip - cu IP-urile private ale serverelor către care doriți să redirecționați traficul web. Puteți verifica IP-urile private în panoul de control UpCloud și pe tab-ul Rețea privată din meniu Rețea.

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

Aceasta definește echilibratorul de încărcare la nivel de transport (layer 4) cu numele extern http_front, care ascultă pe portul 80 și apoi redirecționează traficul către backend-ul implicit numit http_back. Statistica suplimentară /haproxy?stats conectează pagina de statistică la adresa specificată.

Diferitele algoritme de echilibrare a încărcăturii.

Specificația serverelor în secțiunea backend permite HAProxy să utilizeze aceste servere pentru echilibrarea încărcăturii conform algoritmului de rotire, atunci când este posibil.

Algoritmii de echilibrare a încărcăturii sunt utilizați pentru a determina pe care server din backend se va trimite fiecare conexiune. Iată câteva dintre opțiunile utile:

  • Roundrobin: fiecare server este folosit pe rând conform greutății sale. Acesta este cel mai fluid și corect algoritm, atunci când timpul de procesare al serverelor rămâne distribuit uniform. Acest algoritm este dinamic, permițând ajustarea greutății serverului în timp real.
  • Leastconn: se alege serverul cu cel mai mic număr de conexiuni. Se efectuează o selecție ciclică între serverele cu sarcini egale. Utilizarea acestui algoritm este recomandată pentru sesiuni lungi, cum ar fi LDAP, SQL, TSE etc., dar nu este foarte potrivită pentru sesiuni scurte, cum ar fi HTTP.
  • Primul: primul server cu sloturi disponibile pentru conectare primește conexiunea. Serverele sunt selectate de la cel mai mic identificator numeric la cel mai mare, care, în mod implicit, corespunde poziției serverului în fermă. Odată ce serverul atinge valoarea maxconn, se utilizează următorul server.
  • Sursa: Adresa IP sursă este hashată și împărțită la greutatea totală a serverelor active pentru a determina care server va primi cererea. Astfel, aceeași adresă IP a clientului va fi întotdeauna livrată aceluiași server, în timp ce serverele rămân neschimbate.

Configurarea echilibrării încărcării la nivel de aplicație (layer 7)

O altă opțiune disponibilă este configurarea unui echilibror de încărcare pentru a funcționa la nivel de aplicație (layer 7), ceea ce este util atunci când părțile aplicației web sunt situate pe diferite gazde. Acest lucru poate fi realizat prin reglementarea transferului de conexiune, de exemplu, după URL.

Deschideți fișierul de configurare HAProxy cu un editor de text:

sudo vi /etc/haproxy/haproxy.cfg

Apoi, configurați segmentele frontend și backend conform exemplului de mai jos:

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

Frontendul declară o regulă ACL numită url_blog, care se aplică tuturor conexiunilor cu căile care încep cu /blog. Use_backend determină că conexiunile care corespund condiției url_blog trebuie să fie gestionate de backendul numit blog_back, iar toate celelalte cereri sunt procesate de backendul implicit.

Din partea backend-ului, configurația stabilește două grupuri de servere: http_back, ca și înainte, și noul, numit blog_back, care gestionează conexiunile cu example.com/blog.

După modificarea setărilor, salvați fișierul și reporniți HAProxy cu următoarea comandă:

sudo systemctl restart haproxy

Dacă în timpul pornirii ați primit orice avertizări sau mesaje de eroare, verificați configurația pentru a le identifica și asigurați-vă că ați creat toate fișierele și folderele necesare, apoi încercați din nou să reporniți.

Testarea configurației

Când HAProxy este configurat și pornit, deschideți adresa IP publică a serverului de echilibrare a încărcării în browser pentru a verifica dacă v-ați conectat corect la backend. Parametrul stats uri din configurație generează o pagină de statistică la adresa specificată.

http://load_balancer_public_ip/haproxy?stats

Când încărcați pagina de statistică, dacă toate serverele dvs. sunt afișate în verde, atunci configurația a fost reușită!

Instalăm balansatorul de încărcare HAProxy pe CentOS

Pagina de statistică conține informații utile pentru monitorizarea host-urilor dvs. web, inclusiv timpul de funcționare / oprire și numărul de sesiuni. Dacă un server este marcat cu roșu, asigurați-vă că serverul este activ și că îl puteți pinge de pe mașina de echilibrare a încărcării.

Dacă echilibratorul dvs. de încărcare nu răspunde, asigurați-vă că conexițile HTTP nu sunt blocate de un firewall. De asemenea, verificați că HAProxy funcționează cu comanda de mai jos:

sudo systemctl status haproxy

Protecția paginii de statistică cu parolă

Totuși, dacă pagina de statistică este pur și simplu expusă în frontend, aceasta este deschisă pentru observație publică, ceea ce nu este neapărat o idee bună. În schimb, puteți aloca un număr de port propriu, adăugând exemplul de mai jos la sfârșitul fișierului dvs. haproxy.cfg. Înlocuiți username și parola cu ceva sigur:

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

După ce ați adăugat noua grupă de ascultători, eliminați referința veche la stats uri din grupul frontend. Când ați terminat, salvați fișierul și reporniți HAProxy.

sudo systemctl restart haproxy

Apoi, redeschideți echilibratorul de încărcare cu noul număr de port și conectați-vă cu numele de utilizator și parola pe care le-ați specificat în fișierul de configurare.

http://load_balancer_public_ip:8181

Asigurați-vă că toate serverele dvs. sunt în continuare afișate în verde, apoi deschideți doar IP-ul echilibratorului de încărcare fără niciun număr de port în browserul dvs.

http://load_balancer_public_ip/

Dacă aveți o oarecare diversitate de pagini țintă pe serverele dvs. interne, veți observa că de fiecare dată când reîncărcați pagina, primiți un răspuns de la un alt gazdă. Puteți încerca diverse algoritmi de balansare în secțiunea de configurare sau să consultați documentația completă.

Concluzie: balansorul de încărcare HAProxy

Felicitări pentru configurarea cu succes a balansorului de încărcare HAProxy! Chiar și cu o configurație de bază a balansării sarcinilor, puteți îmbunătăți semnificativ performanța și disponibilitatea aplicației dvs. web. Acest ghid este doar o introducere în balansarea încărcăturii cu HAProxy, care poate realiza mult mai mult decât ceea ce se poate descrie într-un scurt manual de configurare. Vă recomandăm să experimentați cu diferite configurații folosind documentația extinsă, disponibilă pentru HAProxy, și apoi să începeți să planificați balansarea încărcăturii pentru mediul dvs. de producție.

Folosind mai multe gazde pentru a proteja serviciul dvs. web cu un surplus de putere, balansorul de încărcare în sine poate reprezenta totuși un punct de eșec. Puteți îmbunătăți și mai mult disponibilitatea ridicată prin configurarea unui IP flotant între mai multe balansori de încărcare. Puteți afla mai multe despre acest lucru în articolul nostru despre IP-urile flotante de pe UpCloud.

Mai multe detalii despre curs „Administrator Linux. Virtualizare și clusterizare”***

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster