Traducerea articolului a fost pregătită în ajunul începerii cursului
Echilibrarea sarcinii este o soluție comună pentru scalarea orizontală a aplicațiilor web pe mai multe gazde, oferind în același timp utilizatorilor un singur punct de acces la serviciu.
HAProxy se străduiește să optimizeze utilizarea resurselor, să maximizeze debitul, să minimizeze timpul de răspuns și să evite supraîncărcarea oricărei resurse individuale. Poate fi instalat pe o varietate de distribuții Linux, cum ar fi CentOS 8, pe care ne vom concentra în acest ghid, precum și sisteme
HAProxy este potrivit în special pentru site-urile web cu trafic foarte mare și, prin urmare, este adesea folosit pentru a îmbunătăți fiabilitatea și performanța configurațiilor de servicii web cu mai multe servere. Acest ghid prezintă pașii pentru a configura HAProxy ca echilibrator de încărcare pe o gazdă în cloud CentOS 8, care apoi direcționează traficul către serverele dvs. web.
Ca o condiție prealabilă pentru cele mai bune rezultate, ar trebui să aveți cel puțin două servere web și un server de echilibrare a încărcăturii. Serverele web trebuie să ruleze cel puțin un serviciu web de bază, cum ar fi nginx sau httpd, pentru a testa echilibrarea încărcării între ele.
Instalarea HAProxy pe CentOS 8
Deoarece HAProxy este o aplicație open source care evoluează rapid, este posibil ca distribuția disponibilă pentru dvs. în depozitele standard CentOS să nu fie cea mai recentă versiune. Pentru a afla versiunea curentă, executați următoarea comandă:
sudo yum info haproxy
HAProxy oferă întotdeauna trei versiuni stabile din care să aleagă: cele mai recente două versiuni acceptate și o a treia versiune, mai veche, care încă primește actualizări critice. Puteți oricând să verificați cea mai recentă versiune stabilă listată pe site-ul web HAProxy și apoi să decideți cu ce versiune doriți să lucrați.
În acest ghid, vom instala cea mai recentă versiune stabilă 2.0, care nu era încă disponibilă în arhivele standard la momentul scrierii ghidului. Va trebui să îl instalați din sursa originală. Dar mai întâi, verificați dacă ați îndeplinit condițiile necesare pentru a descărca și compila programul.
sudo yum install gcc pcre-devel tar make -y
Descărcați codul sursă folosind comanda de mai jos. Puteți verifica dacă există o versiune mai nouă disponibilă pe
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Odată ce descărcarea este completă, extrageți fișierele folosind comanda de mai jos:
tar xzvf ~/haproxy.tar.gz -C ~/
Accesați directorul sursă dezambalat:
cd ~/haproxy-2.0.7
Apoi compilați programul pentru sistemul dvs.:
make TARGET=linux-glibc
Și, în sfârșit, instalați HAProxy în sine:
sudo make install
HAProxy este acum instalat, dar necesită câteva manipulări suplimentare pentru ca acesta să funcționeze. Să continuăm configurarea software-ului și a serviciilor de mai jos.
Configurarea HAProxy pentru serverul dvs
Acum adăugați următoarele directoare și fișiere de statistici pentru intrările HAProxy:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Creați o legătură simbolică pentru binare, astfel încât să puteți rula comenzile HAProxy ca utilizator obișnuit:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Dacă doriți să adăugați un proxy la sistemul dumneavoastră ca serviciu, copiați fișierul haproxy.init din exemple în directorul dumneavoastră /etc/init.d. Editați permisiunile fișierului astfel încât scriptul să ruleze, apoi reporniți 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
De asemenea, trebuie să permiteți serviciului să repornească automat când sistemul pornește:
sudo chkconfig haproxy on
Pentru comoditate, se recomandă, de asemenea, să adăugați un utilizator nou pentru a rula HAProxy:
sudo useradd -r haproxy
După aceasta, puteț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 se arată în exemplul de ieșire de mai sus.
În cele din urmă, firewall-ul implicit din CentOS 8 este destul de restrictiv pentru acest proiect. Utilizați următoarele comenzi pentru a permite serviciile necesare și pentru a reseta 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
Configurare Load Balancer
Configurarea HAProxy este un proces destul de simplu. În esență, tot ce trebuie să faceți este să spuneți HAProxy ce conexiuni ar trebui să asculte și unde ar trebui să le transmită.
Acest lucru se realizează prin crearea unui fișier de configurare /etc/haproxy/haproxy.cfg cu setări definitorii. Puteți citi despre opțiunile de configurare HAProxy
Echilibrarea sarcinii la nivelul de transport (stratul 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 următoarele secțiuni la fișier. A inlocui numele serverului ce ar trebui să numească serverele dvs. pe pagina de statistici și private_ip — adrese IP private ale serverelor către care doriți să direcționați traficul web. Puteți verifica adresele IP private
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 un echilibrator de încărcare a stratului de transport (layer 4) denumit extern http_front ascultare pe portul 80, care apoi redirecționează traficul către un backend implicit numit http_back. Statistici suplimentare /haproxy?stats conectează pagina de statistici la adresa specificată.
Diversi algoritmi de echilibrare a sarcinii.
Specificarea serverelor în secțiunea backend permite HAProxy să utilizeze aceste servere pentru echilibrarea încărcăturii conform unui algoritm round-robin atunci când este posibil.
Algoritmii de echilibrare sunt utilizați pentru a determina la ce server din backend este transmisă fiecare conexiune. Iată câteva dintre opțiunile utile:
- Roundrobin: Fiecare server este folosit pe rând în funcție de greutatea sa. Acesta este cel mai fluid și mai corect algoritm atunci când timpul de procesare al serverelor rămâne distribuit uniform. Acest algoritm este dinamic, permițând ca greutatea serverului să fie ajustată din mers.
- Leastconn: este selectat serverul cu cele mai puține conexiuni. Round robin se realizează între servere cu aceeași încărcare. Utilizarea acestui algoritm este recomandată pentru sesiuni lungi precum LDAP, SQL, TSE etc., dar nu este foarte potrivită pentru sesiuni scurte precum HTTP.
- Primul: Primul server cu sloturi de conexiune disponibile primește conexiunea. Serverele sunt selectate de la cel mai mic ID numeric la cel mai mare, care este implicit la poziția serverului în fermă. Odată ce un server ajunge la maxconn, este folosit următorul server.
- Sursa: Adresa IP sursă este hashing și împărțită la greutatea totală a serverelor care rulează pentru a determina care server va primi cererea. În acest fel, aceeași adresă IP a clientului va merge întotdeauna la același server, în timp ce serverele rămân aceleași.
Configurarea echilibrării sarcinii la nivel de aplicație (nivelul 7)
O altă opțiune disponibilă este configurarea unui echilibrator de încărcare pentru a rula la nivelul aplicației (nivelul 7), ceea ce este util atunci când părți ale aplicației dvs. web sunt situate pe gazde diferite. Acest lucru poate fi realizat prin limitarea transmisiei conexiunii, de exemplu prin URL.
Deschideți fișierul de configurare HAProxy folosind 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
Interfața declară o regulă ACL numită url_blog care se aplică tuturor conexiunilor cu căi care încep cu /blog. Use_backend specifică că conexiunile care se potrivesc cu condiția url_blog ar trebui să fie deservite de un backend numit blog_back, iar toate celelalte solicitări sunt gestionate de backend-ul implicit.
Pe partea de backend, configurația stabilește două grupuri de servere: http_back, ca înainte, și unul nou numit blog_back, care gestionează conexiunile la example.com/blog.
După modificarea setărilor, salvați fișierul și reporniți HAProxy folosind următoarea comandă:
sudo systemctl restart haproxy
Dacă primiți avertismente sau mesaje de eroare în timpul pornirii, verificați configurația pentru acestea și asigurați-vă că ați creat toate fișierele și folderele necesare, apoi încercați să reporniți.
Testarea configurației
Odată ce HAProxy este configurat și rulează, deschideți adresa IP publică a serverului de echilibrare a încărcăturii într-un browser și verificați dacă sunteți conectat corect la backend. Parametrul stats uri din configurație creează o pagină de statistici la adresa specificată.
http://load_balancer_public_ip/haproxy?stats
Când încărcați pagina de statistici, dacă toate serverele dvs. sunt verzi, atunci configurarea a avut succes!
Pagina de statistici conține câteva informații utile pentru urmărirea gazdelor dvs. web, inclusiv timpul de sus/încărcare și numărul de sesiuni. Dacă serverul este marcat cu roșu, asigurați-vă că serverul este pornit și că îl puteți ping de la mașina de echilibrare a încărcăturii.
Dacă echilibratorul de încărcare nu răspunde, asigurați-vă că conexiunile HTTP nu sunt blocate de un firewall. De asemenea, asigurați-vă că HAProxy funcționează folosind comanda de mai jos:
sudo systemctl status haproxy
Protejarea paginii de statistici cu o parolă
Cu toate acestea, dacă pagina de statistici este pur și simplu listată pe front end, atunci este deschisă pentru toată lumea, ceea ce poate să nu fie o idee bună. În schimb, îi puteți atribui un număr de port personalizat adăugând exemplul de mai jos la sfârșitul fișierului haproxy.cfg. A inlocui nume de utilizator и parola pentru ceva sigur:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
După ce adăugați un nou grup de ascultători, eliminați vechiul link uri de statistici din grupul de front-end. Când ați terminat, salvați fișierul și reporniți HAProxy.
sudo systemctl restart haproxy
Apoi deschideți din nou echilibrul 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 încă verde și apoi deschideți doar IP-ul de echilibrare a încărcăturii fără numere de port în browser.
http://load_balancer_public_ip/
Dacă aveți cel puțin o varietate de pagini de destinație pe serverele dvs. back-end, veți observa că de fiecare dată când reîncărcați pagina, primiți un răspuns de la o gazdă diferită. Puteți încerca diferiți algoritmi de echilibrare în secțiunea de configurare sau puteți verifica
Concluzie: HAProxy Load Balancer
Felicitări pentru configurarea cu succes a echilibratorului de încărcare HAProxy! Chiar și cu o configurație de bază de echilibrare a sarcinii, puteți îmbunătăți semnificativ performanța și disponibilitatea aplicației dvs. web. Acest ghid este doar o introducere în echilibrarea încărcării cu HAProxy, care este capabil de mult mai mult decât ceea ce poate fi acoperit în ghidul de configurare rapidă. Vă recomandăm să experimentați cu diferite configurații folosind
Folosind mai multe gazde pentru a vă proteja serviciul web cu spațiu liber, echilibratorul de încărcare în sine poate prezenta în continuare un punct de eșec. Puteți îmbunătăți și mai mult disponibilitatea ridicată instalând un IP plutitor între mai multe dispozitive de echilibrare a încărcăturii. Puteți afla mai multe despre acest lucru în pagina noastră
Mai multe despre curs
Sursa: www.habr.com