Articolul este tradus în cadrul pregătirii pentru lansarea cursului

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. 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 și .

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 haproxyHAProxy 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 -yDescarcă codul sursă folosind comanda de mai jos. Poți verifica dacă există o versiune mai recentă disponibilă pe .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzDupă 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.7Apoi compilează programul pentru sistemul tău:
make TARGET=linux-glibcȘi, în final, instalează HAProxy:
sudo make installAcum 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/statsCreează 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/haproxyDacă 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-reloadTrebuie de asemenea să permiți serviciului să se repornească automat la pornirea sistemului:
sudo chkconfig haproxy onPentru comoditate, este recomandat să adaugi un nou utilizator pentru a rula HAProxy:
sudo useradd -r haproxyDupă 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 --reloadConfigurarea 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 , 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.cfgAdă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 ș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 checkAceasta 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.cfgApoi, 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 checkFrontendul 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 haproxyDacă î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?statsCând încărcați pagina de statistică, dacă toate serverele dvs. sunt afișate în verde, atunci configurația a fost reușită!

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 haproxyProtecț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:passwordDupă 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 haproxyApoi, 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:8181Asiguraț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 .
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 , 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 .
Mai multe detalii despre curs ***
Sursa: habr.com
