Straipsnio vertimas buvo parengtas kursų pradžios išvakarėse
Apkrovos balansavimas yra įprastas sprendimas, skirtas horizontaliai keisti žiniatinklio programas keliose prieglobose, tuo pačiu suteikiant vartotojams vieną prieigos prie paslaugos tašką.
HAProxy siekia optimizuoti išteklių naudojimą, maksimaliai padidinti pralaidumą, sumažinti atsako laiką ir išvengti atskirų išteklių perkrovimo. Jis gali būti įdiegtas įvairiuose „Linux“ paskirstymuose, pvz., „CentOS 8“, kuriam daugiausia dėmesio skirsime šiame vadove, taip pat sistemose
HAProxy ypač tinka labai didelio srauto svetainėms, todėl dažnai naudojama kelių serverių žiniatinklio paslaugų konfigūracijų patikimumui ir našumui pagerinti. Šiame vadove aprašomi veiksmai, kaip nustatyti HAProxy kaip apkrovos balansavimo priemonę CentOS 8 debesies priegloboje, kuri nukreipia srautą į jūsų žiniatinklio serverius.
Norint pasiekti geriausių rezultatų, turite turėti bent du žiniatinklio serverius ir apkrovos balansavimo serverį. Žiniatinklio serveriuose turi veikti bent pagrindinė žiniatinklio paslauga, pvz., nginx arba httpd, kad būtų galima išbandyti apkrovos balansavimą tarp jų.
HAProxy diegimas CentOS 8
Kadangi HAProxy yra sparčiai besivystanti atvirojo kodo programa, jums prieinamas platinimas standartinėse CentOS saugyklose gali būti ne naujausia versija. Norėdami sužinoti dabartinę versiją, paleiskite šią komandą:
sudo yum info haproxy
HAProxy visada siūlo tris stabilias versijas: dvi naujausias palaikomas versijas ir trečią, senesnę versiją, kuri vis dar gauna svarbius naujinimus. Visada galite patikrinti naujausią stabilią versiją, pateiktą HAProxy svetainėje, ir nuspręsti, su kuria versija norite dirbti.
Šiame vadove mes įdiegsime naujausią stabilią 2.0 versiją, kurios vadovo rašymo metu dar nebuvo standartinėse saugyklose. Turėsite jį įdiegti iš pirminio šaltinio. Tačiau pirmiausia patikrinkite, ar įvykdėte būtinas sąlygas programai atsisiųsti ir kompiliuoti.
sudo yum install gcc pcre-devel tar make -y
Atsisiųskite šaltinio kodą naudodami toliau pateiktą komandą. Galite patikrinti, ar yra naujesnė versija
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Kai atsisiuntimas bus baigtas, ištraukite failus naudodami toliau pateiktą komandą:
tar xzvf ~/haproxy.tar.gz -C ~/
Eikite į išpakuotą šaltinio katalogą:
cd ~/haproxy-2.0.7
Tada sukompiliuokite programą savo sistemai:
make TARGET=linux-glibc
Ir galiausiai įdiekite patį HAProxy:
sudo make install
HAProxy dabar įdiegtas, tačiau norint, kad jis veiktų, reikia atlikti keletą papildomų manipuliacijų. Toliau tęskime programinės įrangos ir paslaugų sąranką.
Jūsų serverio HAProxy nustatymas
Dabar pridėkite šiuos HAProxy įrašų katalogus ir statistikos failą:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Sukurkite simbolinę dvejetainių failų nuorodą, kad galėtumėte vykdyti HAProxy komandas kaip įprastas vartotojas:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Jei norite pridėti tarpinį serverį į savo sistemą kaip paslaugą, nukopijuokite failą haproxy.init iš pavyzdžių į /etc/init.d katalogą. Redaguokite failo teises, kad scenarijus būtų paleistas, tada iš naujo paleiskite sistemos 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
Taip pat turite leisti paslaugai automatiškai paleisti iš naujo, kai sistema paleidžiama:
sudo chkconfig haproxy on
Patogumui taip pat rekomenduojama pridėti naują vartotoją, kuris paleistų HAProxy:
sudo useradd -r haproxy
Po to galite dar kartą patikrinti įdiegtos versijos numerį naudodami šią komandą:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
Mūsų atveju versija turėtų būti 2.0.7, kaip parodyta aukščiau pateiktame pavyzdyje.
Galiausiai, numatytoji „CentOS 8“ ugniasienė yra gana ribojanti šį projektą. Norėdami leisti reikalingas paslaugas ir iš naujo nustatyti ugniasienę, naudokite šias komandas:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
Apkrovos balansavimo priemonės nustatymas
HAProxy nustatymas yra gana paprastas procesas. Iš esmės viskas, ką jums reikia padaryti, tai pasakyti HAProxy, kokių jungčių ji turėtų klausytis ir kur jas perduoti.
Tai atliekama sukuriant konfigūracijos failą /etc/haproxy/haproxy.cfg su nustatymais. Galite perskaityti apie HAProxy konfigūravimo parinktis
Apkrovos balansavimas transporto sluoksnyje (4 sluoksnis)
Pradėkime nuo pagrindinės sąrankos. Sukurkite naują konfigūracijos failą, pavyzdžiui, naudodami vi su komanda žemiau:
sudo vi /etc/haproxy/haproxy.cfg
Prie failo pridėkite šiuos skyrius. Pakeiskite serverio pavadinimas kaip turėtų vadintis jūsų serveriai statistikos puslapyje ir private_ip — serverių, į kuriuos norite nukreipti žiniatinklio srautą, privatūs IP adresai. Galite patikrinti privačius IP adresus
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
Tai apibrėžia transporto sluoksnio apkrovos balansavimo priemonę (4 sluoksnis), išoriškai pavadintą „http_front klausymas“ 80 prievade, kuris tada nukreipia srautą į numatytąją vidinę programą, pavadintą http_back. Papildoma statistika /haproxy?stats sujungia statistikos puslapį su nurodytu adresu.
Įvairūs apkrovos balansavimo algoritmai.
Nurodę serverius užpakalinėje dalyje, HAProxy gali naudoti šiuos serverius apkrovai balansuoti pagal apvalaus veikimo algoritmą, kai įmanoma.
Balansavimo algoritmai naudojami norint nustatyti, kuriam užpakalinės sistemos serveriui perduodamas kiekvienas ryšys. Štai keletas naudingų parinkčių:
- Apvalus drabužis: Kiekvienas serveris naudojamas paeiliui pagal jo svorį. Tai sklandžiausias ir teisingiausias algoritmas, kai serverių apdorojimo laikas išlieka tolygiai paskirstytas. Šis algoritmas yra dinamiškas, todėl serverio svorį galima reguliuoti skrydžio metu.
- Leastconn: pasirenkamas mažiausiai prisijungęs serveris. Round robin vykdomas tarp serverių su ta pačia apkrova. Naudoti šį algoritmą rekomenduojama ilgoms sesijoms, tokioms kaip LDAP, SQL, TSE ir kt., tačiau jis nelabai tinka trumpoms sesijoms, tokioms kaip HTTP.
- Pirmas: Pirmasis serveris, turintis laisvų ryšio lizdų, priima ryšį. Serveriai parenkami nuo mažiausio skaitmeninio ID iki didžiausio, kuris pagal nutylėjimą yra serverio padėtis ūkyje. Kai serveris pasiekia maxconn, naudojamas kitas serveris.
- šaltinis: Šaltinio IP adresas yra maišomas ir padalytas iš bendro veikiančių serverių svorio, kad būtų nustatyta, kuris serveris gaus užklausą. Tokiu būdu tas pats kliento IP adresas visada bus nukreiptas į tą patį serverį, o serveriai išliks tie patys.
Apkrovos balansavimo nustatymas programos lygiu (7 sluoksnis)
Kita galima parinktis – sukonfigūruoti apkrovos balansavimo priemonę, kad ji veiktų programos lygmenyje (7 sluoksnis), o tai naudinga, kai žiniatinklio programos dalys yra skirtinguose pagrindiniuose kompiuteriuose. Tai galima pasiekti stabdant ryšio perdavimą, pavyzdžiui, naudojant URL.
Atidarykite HAProxy konfigūracijos failą naudodami teksto rengyklę:
sudo vi /etc/haproxy/haproxy.cfg
Tada sukonfigūruokite priekinės ir galinės dalies segmentus, kaip nurodyta toliau pateiktame pavyzdyje:
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 deklaruoja ACL taisyklę, vadinamą url_blog, kuri taikoma visiems ryšiams, kurių keliai prasideda /blog. Use_backend nurodo, kad ryšiai, atitinkantys url_blog sąlygą, turėtų būti aptarnaujami vidinėje programoje, pavadintoje blog_back, o visas kitas užklausas apdoroja numatytoji vidinė programa.
Užpakalinėje dalyje konfigūracija nustato dvi serverių grupes: http_back, kaip ir anksčiau, ir naują, vadinamą blog_back, kuri tvarko ryšius su example.com/blog.
Pakeitę nustatymus, išsaugokite failą ir iš naujo paleiskite HAProxy naudodami šią komandą:
sudo systemctl restart haproxy
Jei paleisties metu gaunate įspėjimus ar klaidų pranešimus, patikrinkite jų konfigūraciją ir įsitikinkite, kad sukūrėte visus reikiamus failus ir aplankus, tada bandykite iš naujo paleisti.
Sąrankos testavimas
Kai HAProxy bus sukonfigūruotas ir paleistas, naršyklėje atidarykite viešąjį apkrovos balansavimo serverio IP adresą ir patikrinkite, ar tinkamai prisijungėte prie užpakalinės sistemos. Konfigūracijos parametras stats uri sukuria statistikos puslapį nurodytu adresu.
http://load_balancer_public_ip/haproxy?stats
Kai įkeliate statistikos puslapį, visi serveriai rodomi žaliai, tada sąranka buvo sėkminga!
Statistikos puslapyje yra keletas naudingos informacijos, leidžiančios sekti žiniatinklio prieglobas, įskaitant pakilimo / prastovos laiką ir seansų skaičių. Jei serveris pažymėtas raudonai, įsitikinkite, kad serveris įjungtas ir kad galite jį siųsti iš apkrovos balansavimo įrenginio.
Jei apkrovos balansavimo priemonė nereaguoja, įsitikinkite, kad HTTP jungčių neužblokuoja ugniasienė. Taip pat įsitikinkite, kad HAProxy veikia naudodami toliau pateiktą komandą:
sudo systemctl status haproxy
Statistikos puslapio apsauga slaptažodžiu
Tačiau jei statistikos puslapis yra tiesiog pateiktas priekinėje dalyje, tada jį gali matyti visi, o tai gali būti netinkama idėja. Vietoj to galite priskirti jam pasirinktinį prievado numerį, pridėdami toliau pateiktą pavyzdį prie savo haproxy.cfg failo pabaigos. Pakeiskite Nick и slaptažodis už kažką saugaus:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Pridėję naują klausytojų grupę, pašalinkite seną statistikos uri nuorodą iš sąsajos grupės. Baigę išsaugokite failą ir iš naujo paleiskite HAProxy.
sudo systemctl restart haproxy
Tada dar kartą atidarykite apkrovos balansavimo priemonę naudodami naują prievado numerį ir prisijunkite naudodami vartotojo vardą ir slaptažodį, kuriuos nurodėte konfigūracijos faile.
http://load_balancer_public_ip:8181
Įsitikinkite, kad visi serveriai vis dar rodomi žaliai, tada atidarykite tik apkrovos balansavimo priemonės IP be jokių prievadų numerių naršyklėje.
http://load_balancer_public_ip/
Jei savo galiniuose serveriuose turite bent šiek tiek įvairių nukreipimo puslapių, pastebėsite, kad kiekvieną kartą iš naujo įkeldami puslapį gausite atsakymą iš kito pagrindinio kompiuterio. Galite išbandyti skirtingus balansavimo algoritmus konfigūracijos skyriuje arba patikrinti
Išvada: HAProxy Load Balancer
Sveikiname sėkmingai įdiegus HAProxy apkrovos balansavimo įrenginį! Net naudodami pagrindinę apkrovos balansavimo sąranką galite žymiai pagerinti savo žiniatinklio programos našumą ir pasiekiamumą. Šis vadovas yra tik įvadas į apkrovos balansavimą naudojant HAProxy, kuris gali daug daugiau, nei galima aprašyti greitosios sąrankos vadove. Rekomenduojame eksperimentuoti su įvairiomis konfigūracijomis
Naudodami kelis pagrindinius kompiuterius, kad apsaugotumėte savo žiniatinklio paslaugą, nes apkrovos balansavimo priemonė vis tiek gali sugesti. Galite dar labiau pagerinti aukštą pasiekiamumą įdiegę slankųjį IP tarp kelių apkrovos balansavimo priemonių. Daugiau apie tai galite sužinoti mūsų
Plačiau apie kursą
Šaltinis: www.habr.com