Устанавливаем балансировщик нагрузки HAProxy на CentOS

Prevod članka pripremljen je uoči početka kursa «Linux Administrator. Virtualization and Clustering»

Устанавливаем балансировщик нагрузки HAProxy на CentOS

Upravljanje opterećenjem je uobičajeno rešenje za horizontalno skaliranje web aplikacija na više hostova, pružajući korisnicima jedinstvenu tačku pristupa usluzi. HAProxy je jedan od najpopularnijih programa za upravljanje opterećenjem sa otvorenim kodom, koji takođe osigurava visoku dostupnost i funkcionalnost proxy-a.

HAProxy nastoji optimizovati iskorišćenje resursa, maksimalizovati propusnost, minimizovati vreme odziva i izbjeći preopterećenje svakog pojedinačnog resursa. Može se instalirati na brojnim distribucijama Linux-a, kao što je CentOS 8, na kojem se osvrćemo u ovom vodiču, kao i u sistemima Debian 8 in Ubuntu 16.

Устанавливаем балансировщик нагрузки HAProxy на CentOS

HAProxy je posebno pogodan za web sajtove sa veoma visokim saobraćajem i zato se često koristi za poboljšanje pouzdanosti i performansi konfiguracija web usluga sa više servera. U ovom vodiču su prikazani koraci za podešavanje HAProxy kao upravljača opterećenjem na cloud hostu CentOS 8, koji zatim usmerava saobraćaj na vaše web servere.

Kao neophodan uslov za postizanje najboljih rezultata potrebno je imati najmanje dva web servera i server za upravljanje opterećenjem. Na web serverima treba da bude pokrenuta barem osnovna web usluga, kao što je nginx ili httpd, kako bi se mogla proveriti balansa opterećenja između njih.

Instalacija HAProxy na CentOS 8

S obzirom na to da je HAProxy brzo razvijajuća aplikacija sa otvorenim kodom, verzija dostupna u standardnim repozitorijima CentOS-a možda neće biti najnovija. Da biste saznali aktuelnu verziju, izvršite sledeću komandu:

sudo yum info haproxy

HAProxy uvek nudi tri stabilne verzije: dve najnovije podržane verzije i treću, stariju, koja još uvek dobija kritične ažuriranja. Uvek možete proveriti najnoviju stabilnu verziju na HAProxy sajtu, a zatim odlučiti s kojom verzijom želite raditi.

V tem priročniku bomo namestili najnovejšo stabilno različico 2.0, ki še ni bila na voljo v standardnih repozitorijih ob pisanju priročnika. Namestiti jo boste morali iz izvorne kode. Najprej pa preverite, ali so izpolnjeni potrebni pogoji za prenos in kompilacijo programa.

sudo yum install gcc pcre-devel tar make -y

Prenesite izvorno kodo s spodnjo ukazno vrstico. Preverite, ali je na voljo novejša različica na strani za prenos HAProxy.

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

Ko je prenos končan, razpakirajte datoteke s spodnjim ukazom:

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

Pojdite v razpakirano mapo z izvorno kodo:

cd ~/haproxy-2.0.7

Nato skompilirajte program za vaš sistem:

make TARGET=linux-glibc

In na koncu namestite samo HAProxy:

sudo make install

Zdaj je HAProxy nameščen, vendar so potrebni še nekateri dodatni koraki. Nadaljujmo z nastavitvijo programske opreme in storitev spodaj.

Nastavitev HAProxy za vaš strežnik

Sedaj dodajte naslednje imenike in datoteko statistike za zapise HAProxy:

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

Ustvarite simbolično povezavo za binarne datoteke, da boste lahko izvajali ukaze HAProxy kot navaden uporabnik:

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

Če želite dodati proxy strežnik v sistem kot storitev, kopirajte datoteko haproxy.init iz primerov v svoj imenik /etc/init.d. Uredite dovoljenja za datoteko, da se skripta lahko izvaja, in nato znova zaženite demon 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

Prav tako morate storitvi omogočiti samodejno ponovno nalaganje ob zagonu sistema:

sudo chkconfig haproxy on

Za priročnost je priporočljivo, da dodate novega uporabnika za zagon HAProxy:

sudo useradd -r haproxy

Po tem lahko še enkrat preverite številko nameščene različice s spodnjim ukazom:

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

V našem primeru mora biti različica 2.0.7, kot je prikazano v zgoraj navedenem izhodu.

Nazadnje je požarni zid v CentOS 8 privzeto precej restriktiven za ta projekt. Uporabite naslednje ukaze, da omogočite potrebne storitve in ponovno zaženete požarni zid:

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

Nastavitev uravnoteževalnika obremenitve

Nastavitev HAProxy je razmeroma preprost postopek. V bistvu morate le povedati HAProxy, katere povezave naj posluša in kam jih je treba preusmeriti.

To se izvede z ustvarjanjem datoteke konfiguracije /etc/haproxy/haproxy.cfg s potrebnimi nastavitev. O parametrih konfiguracije HAProxy lahko preberete na strani dokumentacije, če želite izvedeti več o tem.

Uravnoteženje obremenitve na transportni ravni (layer 4)

Začnimo z osnovno konfiguracijo. Ustvarite novo datoteko konfiguracije, na primer z uporabo vi z naslednjo ukazno vrstico:

sudo vi /etc/haproxy/haproxy.cfg

Dodajte v datoteko naslednje odseke. Zamenjajte server_name s tistim, kar naj prikazuje vaše strežnike na strani statistike, in private_ip — s privatnimi IP-nameni strežnikov, na katere želite usmeriti spletni promet. Privatne IP-naslove lahko preverite v nadzorni plošči UpCloud in na zavihku Private network v 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

To določa uravnoteževalnik obremenitve transportne ravni (layer 4) z zunanjim imenom http_front, ki posluša na portu 80 in nato usmerja promet k privzetemu backendu z imenom http_back. Dodatna statistika /haproxy?stats povezuje stran statistike na navedeni naslov.

Različni algoritmi uravnoteženja obremenitve.

Navajanje strežnikov v odseku backend omogoča HAProxy, da te strežnike uporablja za uravnoteženje obremenitve v skladu z algoritmom krožnega prehoda, ko je to mogoče.

Algoritmi uravnoteženja obremenitve se uporabljajo za določitev, kateremu strežniku v backendu se prenese vsaka povezava. Tukaj je nekaj koristnih možnosti:

  • Roundrobin: Vsak strežnik se uporablja zaporedno v skladu s svojo težo. To je najgladkejši in najpoštenejši algoritem, kadar je čas obdelave strežnikov enakomerno porazdeljen. Ta algoritem je dinamičen, kar omogoča prilagajanje teže strežnika v realnem času.
  • Leastconn: izbira se strežnik z najmanjšim številom povezav. Ciklična izbira se izvaja med strežniki z enako obremenitvijo. Uporaba tega algoritma se priporoča za dolga omrežna povezovanja, kot so LDAP, SQL, TSE itd., vendar ni zelo primeren za kratka omrežna povezovanja, kot je HTTP.
  • Prvi: prvi strežnik z razpoložljivimi prostori za povezavo dobi povezavo. Strežniki so izbrani od najnižjega številskega identifikatorja do najvišjega, kar privzeto ustreza položaju strežnika v farmi. Ko strežnik doseže vrednost maxconn, se uporabi naslednji strežnik.
  • Vir: IP-naslov izvora se hashuje in deli na skupno težo zagnanih strežnikov, da se določi, kateri strežnik bo prejel zahtevo. Tako bo isti IP-naslov odjemalca vedno dodeljen istemu strežniku, medtem ko strežniki ostanejo nespremenjeni.

Nastavitev uravnoteženja obremenitve na aplikacijski ravni (layer 7)

Še ena razpoložljiva možnost je, da nastavite uravnoteževalnik obremenitve za delovanje na aplikacijski ravni (layer 7), kar je koristno, kadar so deli vašega spletnega dela nameščeni na različnih gostiteljih. To je mogoče doseči z usklajevanjem prenosa povezave, na primer po URL-ju.

Odprite konfiguracijsko datoteko HAProxy s pomočjo besedilnega urednika:

sudo vi /etc/haproxy/haproxy.cfg

Nato nastavite segmente frontend in backend v skladu z zgornjim primerom:

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 razglasi pravilo ACL z imenom url_blog, ki se uporablja za vse povezave s potmi, ki se začnejo z /blog. Use_backend določa, da morajo biti povezave, ki ustrezajo pogoju url_blog, obravnavane z backendom z imenom blog_back, vsi drugi zahtevki pa se obdelujejo z privzetim backendom.

Na strani backend konfiguracija vzpostavi dve skupini strežnikov: http_back, kot prej, in novo, imenovano blog_back, ki obravnava povezave z example.com/blog.

Po spremembi nastavitev shranite datoteko in znova zaženite HAProxy s pomočjo naslednjega ukaza:

sudo systemctl restart haproxy

Če ste ob zagonu prejeli kakršne koli napake ali opozorila, preverite konfiguracijo in se prepričajte, da ste ustvarili vse potrebne datoteke in mape, nato pa ponovno poskusite zagnati.

Preizkušanje nastavitve

Ko je HAProxy nastavljen in deluje, odprite javni IP-naslov strežnika za razkladanje v brskalniku in preverite, ali ste se pravilno povezali z ozadjem. Parameter stats uri v konfiguraciji ustvari stran statistike na navedenem naslovu.

http://load_balancer_public_ip/haproxy?stats

Ko naložite stran statistike, če so vsi vaši strežniki prikazani z zeleno barvo, so nastavitve uspešne!

Устанавливаем балансировщик нагрузки HAProxy на CentOS

Stran statistike vsebuje nekatere koristne informacije za spremljanje vaših spletnih gostiteljev, vključno s časom delovanja/padca in številom sej. Če je strežnik označen rdeče, se prepričajte, da je strežnik vklopljen in da ga lahko pingate z naprave za razkladanje.

Če vaš sistem za razkladanje ne odgovarja, se prepričajte, da požarni zid ne blokira HTTP-povezav. Prav tako se prepričajte, da HAProxy deluje z naslednjim ukazom:

sudo systemctl status haproxy

Zaščita strani statistike z geslom

Vendar, če je stran statistike preprosto navedena v sprednjem delu, je odprta za javno dostopnost, kar morda ni najboljša ideja. Namesto tega ji lahko dodelite svoj številčnik, tako da na konec datoteke haproxy.cfg dodate spodnji primer. Zamenjajte username in password z nečim varnim:

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

Po dodajanju nove skupine poslušalcev odstranite staro povezavo na stats uri iz sprednje skupine. Ko končate, shranite datoteko in ponovno zaženite HAProxy.

sudo systemctl restart haproxy

Nato znova odprite sistem za razkladanje z novim številom vrat in se prijavite z uporabniškim imenom in geslom, ki ste jih navedli v konfiguracijski datoteki.

http://load_balancer_public_ip:8181

Prepričajte se, da vsi vaši strežniki še vedno prikazujejo zeleno barvo, nato pa v brskalniku odprite samo IP naslov razkladanja brez kakršnih koli številk vrat.

http://load_balancer_public_ip/

Če na vaših notranjih strežnikih obstaja vsaj nekoliko raznolike ciljne strani, boste opazili, da vsakič, ko osvežite stran, prejmete odgovor z drugega gostitelja. Lahko preizkusite različne algoritme uravnoteženja obremenitve v razdelku nastavitve ali si ogledate celotno dokumentacijo.

Zaključek: uravnoteževalnik obremenitve HAProxy

Čestitamo ob uspešni nastavitvi uravnoteževalnika obremenitve HAProxy! Tudi z osnovno nastavitvijo uravnoteženja obremenitve lahko znatno izboljšate zmogljivost in dostopnost svoje spletne aplikacije. To priročnik je le uvod v uravnoteženje obremenitve z uporabo HAProxy, ki zmore veliko več, kot kar je mogoče opisati v kratkih nastavitvah. Priporočamo, da eksperimentirate z različnimi konfiguracijami s pomočjo obsežne dokumentacije, dostopne za HAProxy, in nato nadaljujete z načrtovanjem uravnoteženja obremenitve za vaše proizvodno okolje.

Z uporabo več gostiteljev za zaščito vaše spletne storitve s presežkom zmogljivosti, lahko sam uravnoteževalnik obremenitve vseeno predstavlja točko okvare. Možete še bolj povečati visoko razpoložljivost tako, da nastavite plavajoči IP med več uravnoteževalniki obremenitve. Več o tem lahko izveste v naši članku o plavajočih IP naslovih na UpCloud.

Več o tečaju «Linux Administrator. Virtualization and Clustering»***

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster