Instaliranje HAProxy Load Balancer na CentOS

Prijevod članka pripremljen je uoči početka kursa "Linux administrator. Virtuelizacija i klasterizacija»

Instaliranje HAProxy Load Balancer na CentOS

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 je jedan od najpopularnijih softvera za balansiranje opterećenja otvorenog koda koji također pruža visoku dostupnost i funkcionalnost proxyja.

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 Debian 8 и Ubuntu 16.

Instaliranje HAProxy Load Balancer na CentOS

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 HAProxy stranica za preuzimanje.

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 na stranici sa dokumentacijomako želite da saznate više o tome.

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 u UpCloud kontrolnoj tabli i na kartici Privatna mreža na meniju mreža.

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!

Instaliranje HAProxy Load Balancer na CentOS

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 kompletnu dokumentaciju.

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 obimna dokumentacijadostupno za HAProxy, a zatim počnite planirati balansiranje opterećenja za vaše proizvodno okruženje.

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 članak o plutajućim IP adresama na UpCloud-u.

Više o kursu "Linux administrator. Virtuelizacija i klasterizacija»***

izvor: www.habr.com

Dodajte komentar