Namestitev izravnalnika obremenitve HAProxy na CentOS

Prevod članka je bil pripravljen na predvečer začetka tečaja "Linux Administrator. Virtualizacija in grozdenje"

Namestitev izravnalnika obremenitve HAProxy na CentOS

Izravnavanje obremenitve je običajna rešitev za vodoravno prilagajanje spletnih aplikacij na več gostiteljih, hkrati pa uporabnikom zagotavlja eno samo točko dostopa do storitve. HAProxy je ena izmed najbolj priljubljenih odprtokodnih programov za uravnoteženje obremenitve, ki zagotavlja tudi visoko razpoložljivost in proxy funkcionalnost.

HAProxy si prizadeva optimizirati uporabo virov, povečati prepustnost, zmanjšati odzivni čas in preprečiti preobremenitev katerega koli posameznega vira. Namestite ga lahko v različne distribucije Linuxa, kot je CentOS 8, na katerega se bomo osredotočili v tem priročniku, in sisteme Debian 8 и Ubuntu 16.

Namestitev izravnalnika obremenitve HAProxy na CentOS

HAProxy je posebej primeren za spletna mesta z zelo velikim prometom in se zato pogosto uporablja za izboljšanje zanesljivosti in zmogljivosti večstrežniških konfiguracij spletnih storitev. Ta priročnik opisuje korake za nastavitev HAProxy kot izravnalnika obremenitve na gostitelju v oblaku CentOS 8, ki nato usmerja promet na vaše spletne strežnike.

Kot predpogoj za najboljše rezultate morate imeti vsaj dva spletna strežnika in strežnik za uravnoteženje obremenitve. Spletni strežniki morajo izvajati vsaj osnovno spletno storitev, kot je nginx ali httpd, da lahko preizkusite uravnoteženje obremenitve med njimi.

Namestitev HAProxy na CentOS 8

Ker je HAProxy hitro razvijajoča se odprtokodna aplikacija, distribucija, ki vam je na voljo v standardnih repozitorijih CentOS, morda ni najnovejša različica. Če želite izvedeti trenutno različico, zaženite naslednji ukaz:

sudo yum info haproxy

HAProxy vedno ponuja tri stabilne različice, med katerimi lahko izbirate: dve najnovejši podprti različici in tretjo, starejšo različico, ki še vedno prejema kritične posodobitve. Vedno lahko preverite najnovejšo stabilno različico, navedeno na spletnem mestu HAProxy, in se nato odločite, s katero različico želite delati.

V tem priročniku bomo namestili najnovejšo stabilno različico 2.0, ki v času pisanja vodnika še ni bila na voljo v standardnih repozitorijih. Namestiti ga boste morali iz izvirnega vira. Najprej pa preverite, ali ste izpolnili potrebne pogoje za prenos in prevajanje programa.

sudo yum install gcc pcre-devel tar make -y

Prenesite izvorno kodo s spodnjim ukazom. Preverite lahko, ali je na voljo novejša različica Stran 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, ekstrahirajte datoteke s spodnjim ukazom:

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

Pojdite v nepakiran izvorni imenik:

cd ~/haproxy-2.0.7

Nato prevedite program za vaš sistem:

make TARGET=linux-glibc

In končno, namestite sam HAProxy:

sudo make install

HAProxy je zdaj nameščen, vendar zahteva nekaj dodatnih manipulacij, da deluje. Nadaljujmo z nastavitvijo programske opreme in storitev spodaj.

Nastavitev HAProxy za vaš strežnik

Zdaj dodajte naslednje imenike in statistično datoteko za vnose 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 običajni uporabnik:

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

Če želite svojemu sistemu dodati proxy kot storitev, kopirajte datoteko haproxy.init iz primerov v imenik /etc/init.d. Uredite dovoljenja za datoteke, tako da se bo skript izvajal, 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 dovoliti, da se storitev samodejno znova zažene, ko se sistem zažene:

sudo chkconfig haproxy on

Za udobje je priporočljivo tudi dodati novega uporabnika za zagon HAProxy:

sudo useradd -r haproxy

Po tem lahko znova preverite številko nameščene različice z naslednjim ukazom:

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

V našem primeru bi morala biti različica 2.0.7, kot je prikazano v zgornjem primeru izhoda.

Končno je privzeti požarni zid v CentOS 8 precej omejujoč za ta projekt. Uporabite naslednje ukaze, da omogočite potrebne storitve in ponastavite 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 izravnalnika obremenitve

Nastavitev HAProxy je dokaj preprost postopek. V bistvu je vse, kar morate storiti, povedati HAProxyju, katere povezave naj posluša in kam naj jih posreduje.

To storite tako, da ustvarite konfiguracijsko datoteko /etc/haproxy/haproxy.cfg z definiranimi nastavitvami. Preberete lahko o možnostih konfiguracije HAProxy na strani z dokumentacijoče želite izvedeti več o tem.

Izravnavanje obremenitve na transportni plasti (plast 4)

Začnimo z osnovno nastavitvijo. Ustvarite novo konfiguracijsko datoteko, na primer z uporabo vi s spodnjim ukazom:

sudo vi /etc/haproxy/haproxy.cfg

V datoteko dodajte naslednje razdelke. Zamenjati ime_strežnika kaj naj pokliče vaše strežnike na strani s statistiko in zasebni_ip — zasebni naslovi IP strežnikov, na katere želite usmeriti spletni promet. Preverite lahko zasebne naslove IP na nadzorni plošči UpCloud in na zavihku Zasebno omrežje 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 definira izravnalnik obremenitve transportne plasti (plast 4) z zunanjim imenom http_front, ki posluša na vratih 80, ki nato posreduje promet v privzeto zaledje z imenom http_back. Dodatna statistika /haproxy?stats poveže stran s statistiko z navedenim naslovom.

Različni algoritmi za uravnoteženje obremenitve.

Če navedete strežnike v zalednem razdelku, lahko HAProxy uporabi te strežnike za uravnoteženje obremenitve v skladu z algoritmom krožnega dela, kadar je to mogoče.

Algoritmi za uravnoteženje se uporabljajo za določitev, kateremu strežniku v zaledju se posreduje posamezna povezava. Tukaj je nekaj uporabnih možnosti:

  • Roundrobin: Vsak strežnik se uporablja po vrsti glede na njegovo težo. To je najbolj gladek in pravičen algoritem, ko je čas obdelave strežnikov enakomerno porazdeljen. Ta algoritem je dinamičen in omogoča sprotno prilagajanje teže strežnika.
  • Leastconn: izbran je strežnik z najmanj povezavami. Round robin se izvaja med strežniki z enako obremenitvijo. Uporaba tega algoritma je priporočljiva za dolge seje, kot so LDAP, SQL, TSE itd., vendar ni zelo primeren za kratke seje, kot je HTTP.
  • Prvič: Prvi strežnik z razpoložljivimi povezovalnimi režami prejme povezavo. Strežniki so izbrani od najnižjega številskega ID-ja do najvišjega, ki privzeto ustreza položaju strežnika v farmi. Ko strežnik doseže maxconn, se uporabi naslednji strežnik.
  • vir: Izvorni naslov IP je zgoščen in deljen s skupno težo delujočih strežnikov, da se določi, kateri strežnik bo prejel zahtevo. Na ta način bo isti naslov IP odjemalca vedno šel na isti strežnik, medtem ko strežniki ostanejo isti.

Nastavitev uravnoteženja obremenitve na ravni aplikacije (plast 7)

Druga razpoložljiva možnost je konfiguracija izravnalnika obremenitve za izvajanje na aplikacijski ravni (plast 7), kar je uporabno, če se deli vaše spletne aplikacije nahajajo na različnih gostiteljih. To je mogoče doseči z zaviranjem prenosa povezave, na primer prek URL-ja.

Odprite konfiguracijsko datoteko HAProxy z urejevalnikom besedil:

sudo vi /etc/haproxy/haproxy.cfg

Nato konfigurirajte sprednji in zaledni segment v skladu s spodnjim 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

Sprednji del deklarira pravilo ACL, imenovano url_blog, ki velja za vse povezave s potmi, ki se začnejo z /blog. Use_backend določa, da mora povezave, ki se ujemajo s pogojem url_blog, streči zaledje z imenom blog_back, vse druge zahteve pa obravnava privzeto zaledje.

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

Ko spremenite nastavitve, shranite datoteko in znova zaženite HAProxy z naslednjim ukazom:

sudo systemctl restart haproxy

Če med zagonom prejmete kakršna koli opozorila ali sporočila o napakah, jih preverite v konfiguraciji in se prepričajte, da ste ustvarili vse potrebne datoteke in mape, nato poskusite znova zagnati.

Preizkušanje nastavitve

Ko je HAProxy konfiguriran in zagnan, v brskalniku odprite javni naslov IP strežnika za izravnavo obremenitve in preverite, ali ste pravilno povezani z zaledjem. Parameter stats uri v konfiguraciji ustvari stran s statistiko na podanem naslovu.

http://load_balancer_public_ip/haproxy?stats

Ko naložite stran s statistiko, če so vsi vaši strežniki zeleni, je bila nastavitev uspešna!

Namestitev izravnalnika obremenitve HAProxy na CentOS

Stran s statističnimi podatki vsebuje nekaj uporabnih informacij za sledenje vašim spletnim gostiteljem, vključno s časom delovanja/nedelovanja in številom sej. Če je strežnik označen rdeče, se prepričajte, da je strežnik vklopljen in da ga lahko pingate iz naprave za izravnavo obremenitve.

Če se vaš izravnalnik obremenitve ne odziva, se prepričajte, da povezave HTTP ne blokira požarni zid. Prepričajte se tudi, da HAProxy deluje s spodnjim ukazom:

sudo systemctl status haproxy

Zaščita strani s statistiko z geslom

Če pa je stran s statističnimi podatki preprosto navedena na sprednji strani, je odprta vsem, kar pa morda ni dobra ideja. Namesto tega mu lahko dodelite številko vrat po meri, tako da na konec datoteke haproxy.cfg dodate spodnji primer. Zamenjati uporabniško ime и geslo za nekaj varnega:

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

Ko dodate novo skupino poslušalcev, odstranite staro povezavo stats uri iz čelne skupine. Ko končate, shranite datoteko in znova zaženite HAProxy.

sudo systemctl restart haproxy

Nato znova odprite izravnalnik obremenitve z novo številko vrat in se prijavite z uporabniškim imenom in geslom, ki ste ju podali v konfiguracijski datoteki.

http://load_balancer_public_ip:8181

Prepričajte se, da so vsi vaši strežniki še vedno zeleni, nato pa v brskalniku odprite samo IP izravnalnika obremenitve brez številk vrat.

http://load_balancer_public_ip/

Če imate na svojih zalednih strežnikih vsaj nekaj različnih ciljnih strani, boste opazili, da vsakič, ko znova naložite stran, prejmete odgovor drugega gostitelja. Lahko preizkusite različne algoritme za uravnoteženje v razdelku za konfiguracijo ali preverite kompletna dokumentacija.

Zaključek: HAProxy Load Balancer

Čestitamo za uspešno nastavitev vašega izravnalnika obremenitve HAProxy! Tudi z osnovno nastavitvijo uravnoteženja obremenitve lahko bistveno izboljšate zmogljivost in razpoložljivost vaše spletne aplikacije. Ta priročnik je samo uvod v uravnoteženje obremenitve s HAProxy, ki zmore veliko več od tistega, kar je mogoče zajeti v vodniku za hitro namestitev. Priporočamo, da eksperimentirate z različnimi konfiguracijami obsežno dokumentacijo, ki je na voljo HAProxy, in nato začnite načrtovati uravnoteženje obremenitve za vaše produkcijsko okolje.

Z uporabo več gostiteljev za zaščito vaše spletne storitve z višino prostora lahko ravnotežje obremenitve še vedno predstavlja točko napake. Visoko razpoložljivost lahko dodatno izboljšate z namestitvijo plavajočega IP-ja med več izravnalniki obremenitve. Več o tem lahko izveste v našem članek o plavajočih naslovih IP na UpCloud.

Več o tečaju "Linux Administrator. Virtualizacija in grozdenje"***

Vir: www.habr.com

Dodaj komentar