Prijevod članka pripremljen je uoči početka kursa
Balansiranje opterećenja je uobičajeno rješenje za skaliranje web aplikacija na više hostova dok korisnicima pruža jednu tačku pristupa usluzi.
HAProxy ima za cilj optimizirati korištenje resursa, maksimizirati propusnost, minimizirati vrijeme odgovora i izbjeći preopterećenje bilo kojeg pojedinačnog resursa. Može se instalirati na različite Linux distribucije, kao što je CentOS 8, na koji ćemo se fokusirati u ovom vodiču, kao i na sisteme
HAProxy je posebno prikladan za web stranice s vrlo visokim prometom i stoga se često koristi za poboljšanje pouzdanosti i performansi konfiguracija web usluga s više servera. Ovaj vodič opisuje korake za postavljanje HAProxy-a kao balansera opterećenja na CentOS 8 cloud hostu, koji zatim usmjerava promet na vaše web servere.
Kao preduvjet za najbolje rezultate, trebali biste imati najmanje dva web servera i server za balansiranje opterećenja. Web serveri moraju pokretati barem osnovnu web uslugu kao što je nginx ili httpd kako bi se testiralo balansiranje opterećenja između njih.
Instaliranje HAProxy na CentOS 8
Zbog činjenice da je HAProxy aplikacija otvorenog koda koja se brzo razvija, distribucija koja vam je dostupna u standardnim CentOS repozitorijumima možda nije najnovija verzija. Da biste saznali najnoviju verziju, pokrenite sljedeću naredbu:
sudo yum info haproxy
HAProxy uvijek nudi tri stabilne verzije koje možete izabrati: dvije najnovije podržane verzije i treću, stariju verziju koja još uvijek prima kritična ažuriranja. Uvijek možete provjeriti najnoviju stabilnu verziju navedenu na HAProxy web stranici, a zatim odlučiti s kojom verzijom želite raditi.
U ovom vodiču ćemo instalirati najnoviju stabilnu verziju 2.0, koja još nije bila dostupna u standardnim spremištima u vrijeme pisanja. Morat ćete ga instalirati iz originalnog izvora. Ali prvo provjerite da li ste ispunili potrebne uvjete za preuzimanje i kompajliranje programa.
sudo yum install gcc pcre-devel tar make -y
Preuzmite izvorni kod koristeći naredbu ispod. Možete provjeriti da li je dostupna novija verzija na
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Kada se preuzimanje završi, raspakirajte datoteke koristeći naredbu ispod:
tar xzvf ~/haproxy.tar.gz -C ~/
Promijenite u raspakirani izvorni direktorij:
cd ~/haproxy-2.0.7
Zatim kompajlirajte program za vaš sistem:
make TARGET=linux-glibc
I konačno instalirajte sam HAProxy:
sudo make install
Sada je HAProxy instaliran, ali su potrebne neke dodatne manipulacije da bi funkcionisao. Nastavimo s postavljanjem softvera i usluga u nastavku.
Postavljanje HAProxy za vaš server
Sada dodajte sljedeće direktorije i statističke datoteke za HAProxy unose:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Kreirajte simboličku vezu za binarne datoteke tako da možete pokrenuti HAProxy komande kao običan korisnik:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Ako želite da dodate proxy vašem sistemu kao uslugu, kopirajte datoteku haproxy.init iz primjera u vaš /etc/init.d direktorij. Uredite dozvole datoteke kako bi se skripta pokrenula, a zatim ponovo učitajte systemd demon:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload
Također morate omogućiti servisu da se automatski ponovo pokrene pri pokretanju sistema:
sudo chkconfig haproxy on
Radi praktičnosti, također se preporučuje da dodate novog korisnika za pokretanje HAProxy:
sudo useradd -r haproxy
Nakon toga možete ponovo provjeriti broj instalirane verzije sljedećom naredbom:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
U našem slučaju, verzija bi trebala biti 2.0.7, kao što je prikazano u primjeru izlaza iznad.
Konačno, podrazumevani zaštitni zid u CentOS-u 8 je prilično restriktivan za ovaj projekat. Koristite sljedeće naredbe da omogućite potrebne usluge i resetujete zaštitni zid:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
Postavljanje balansera opterećenja
Postavljanje HAProxy-a je prilično jednostavan proces. U suštini, sve što treba da uradite je da kažete HAProxy-u koje veze treba da sluša i gde da ih prenese.
Ovo se radi kreiranjem konfiguracionog fajla /etc/haproxy/haproxy.cfg sa definisanim postavkama. Možete pročitati o HAProxy opcijama konfiguracije
Balansiranje opterećenja na transportnom sloju (sloj 4)
Počnimo s osnovnim podešavanjem. Kreirajte novu konfiguracijsku datoteku, na primjer koristeći vi sa donjom komandom:
sudo vi /etc/haproxy/haproxy.cfg
Dodajte sljedeće odjeljke u datoteku. Zamijenite server_name onaj koji bi trebao pozvati vaše servere na stranici statistike, i private_ip - privatne IP adrese servera na koje želite usmjeriti web promet. Možete provjeriti privatne IP adrese
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
Ovo definiše balanser opterećenja transportnog sloja (sloj 4) koji se eksterno zove http_front slušanje na portu 80, koji zatim usmerava saobraćaj na podrazumevani backend pod nazivom http_back. Dodatna statistika /haproxy?stats povezuje stranicu sa statistikom na navedenu adresu.
Različiti algoritmi za balansiranje opterećenja.
Određivanje servera u backend sekciji omogućava HAProxy-u da koristi te servere za balansiranje opterećenja prema kružnom algoritmu kada je to moguće.
Algoritmi za balansiranje se koriste da bi se odredilo na koji server u pozadini se svaka veza šalje. Evo nekih od korisnih opcija:
- Roundrobin: svaki server se koristi redom prema svojoj težini. Ovo je najglatkiji i najpošteniji algoritam kada vrijeme obrade servera ostaje ravnomjerno raspoređeno. Ovaj algoritam je dinamičan, što vam omogućava da prilagodite težinu servera u hodu.
- Najmanje konn: izabran je server sa najmanje konekcija. Round robin se izvodi između servera sa istim opterećenjem. Korištenje ovog algoritma se preporučuje za duge sesije kao što su LDAP, SQL, TSE, itd., ali nije baš prikladno za kratke sesije kao što je HTTP.
- Prvo: prvi server sa dostupnim slotovima za povezivanje prima vezu. Serveri se biraju od najnižeg brojčanog ID-a do najvišeg, što po defaultu odgovara poziciji servera u farmi. Kada server dostigne maxconn vrijednost, koristi se sljedeći server.
- Izvor: Izvorna IP adresa se hešira i dijeli sa ukupnom težinom pokrenutih servera kako bi se odredilo koji će server primiti zahtjev. Dakle, ista IP adresa klijenta će uvijek ići na isti server, dok serveri ostaju nepromijenjeni.
Konfiguriranje balansiranja opterećenja na sloju aplikacije (sloj 7)
Druga dostupna opcija je konfiguracija balansera opterećenja da radi na sloju aplikacije (sloj 7), što je korisno kada se dijelovi vaše web aplikacije nalaze na različitim hostovima. To se može postići prigušivanjem prijenosa veze, na primjer URL-om.
Otvorite HAProxy konfiguracijsku datoteku pomoću uređivača teksta:
sudo vi /etc/haproxy/haproxy.cfg
Zatim postavite frontend i backend segmente prema primjeru ispod:
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
Frontend deklarira ACL pravilo pod nazivom url_blog koje se primjenjuje na sve veze sa stazama koje počinju sa /blog. Use_backend specificira da veze koje odgovaraju uvjetu url_blog trebaju biti opsluživane od strane pozadinskog dijela pod nazivom blog_back, a svim ostalim zahtjevima rukuje default backend.
Na poleđini, konfiguracija postavlja dvije grupe servera: http_back, kao i ranije, i novu pod nazivom blog_back, koja upravlja konekcijama na example.com/blog.
Nakon promjene postavki, sačuvajte datoteku i ponovo pokrenite HAProxy sa sljedećom naredbom:
sudo systemctl restart haproxy
Ako dobijete bilo kakva upozorenja ili greške prilikom pokretanja, provjerite konfiguraciju i provjerite jeste li kreirali sve potrebne datoteke i mape, a zatim pokušajte ponovo pokrenuti.
Testiranje podešavanja
Nakon što je HAProxy konfiguriran i pokrenut, otvorite javnu IP adresu servera za balansiranje opterećenja u pretraživaču i provjerite da li ste se ispravno povezali na pozadinu. Parametar stats uri u konfiguraciji kreira stranicu statistike na navedenoj adresi.
http://load_balancer_public_ip/haproxy?stats
Kada učitate stranicu sa statistikom, ako su svi vaši serveri zeleni, onda je podešavanje bilo uspješno!
Stranica statistike sadrži neke korisne informacije za praćenje vaših web hostova, uključujući vrijeme gore/dopada i broj sesija. Ako je server označen crveno, uvjerite se da je server podignut i da ga možete pingovati iz balansera opterećenja.
Ako vaš balansator opterećenja ne reaguje, uverite se da HTTP veze nisu blokirane zaštitnim zidom. Također provjerite radi li HAProxy s naredbom ispod:
sudo systemctl status haproxy
Zaštita stranice statistike lozinkom
Međutim, ako je stranica sa statistikom samo navedena u frontendu, onda je otvorena za javnost, što možda nije dobra ideja. Umjesto toga, možete mu dodijeliti svoj vlastiti broj porta dodavanjem primjera ispod na kraj vaše haproxy.cfg datoteke. Zamijenite korisničko ime и lozinka na nešto sigurno:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Nakon što dodate novu grupu slušatelja, uklonite staru statistiku uri referencu iz frontend grupe. Kada završite, sačuvajte datoteku i ponovo pokrenite HAProxy.
sudo systemctl restart haproxy
Zatim ponovo otvorite balansator opterećenja s novim brojem porta i prijavite se s korisničkim imenom i lozinkom koje ste naveli u konfiguracijskoj datoteci.
http://load_balancer_public_ip:8181
Uvjerite se da su svi vaši serveri još uvijek zeleni, a zatim otvorite samo IP za balansiranje opterećenja bez ikakvih brojeva portova u vašem pretraživaču.
http://load_balancer_public_ip/
Ako imate barem neke različite odredišne stranice na svojim internim serverima, primijetit ćete da svaki put kada ponovo učitate stranicu, dobijate odgovor od drugog hosta. Možete isprobati različite algoritme balansiranja u odjeljku za konfiguraciju ili pogledajte
Zaključak: HAProxy Load Balancer
Čestitamo na uspješnom postavljanju vašeg HAProxy balansera opterećenja! Čak i uz osnovno podešavanje balansiranja opterećenja, možete uvelike poboljšati performanse i dostupnost vaše web aplikacije. Ovaj vodič je samo uvod u balansiranje opterećenja uz HAProxy, koji je sposoban za mnogo više od onoga što se može opisati u vodiču za brzo postavljanje. Preporučujemo da eksperimentišete sa različitim konfiguracijama koristeći
Korištenjem više hostova za zaštitu vaše web usluge s prostorom za povećanje, sam balansator opterećenja i dalje može predstavljati tačku kvara. Možete dodatno poboljšati visoku dostupnost postavljanjem plutajuće IP adrese između više balansera opterećenja. Više o tome možete saznati u našoj
Više o kursu
izvor: www.habr.com