Uvod
High Availability Proxy (HAProxy), popularno je open-source rješenje za proxying i TCP/HTTP load balancer koje može raditi na operacijskim sustavima Solaris, FreeBSD, i Linux. Najčešće se koristi za poboljšanje pouzdanosti i performansi poslužiteljskog okruženja pružanjem uravnotežene raspodjele radnog opterećenja na više poslužitelja. Ova vrsta alata koristi se u mnogim poznatim okruženjima kao što su Instagram, GitHub, Twitter i Imgur.
Ovaj vodič će vas upoznati s HAProxy-jem, upoznati vas s terminologijom uravnoteženja opterećenja i pružiti primjere kako se može iskoristiti za poboljšanje performansi i pouzdanosti poslužiteljskih okruženja.
Ključni HAProxy pojmovi
Prije nego što uđemo u detalje o uravnoteženju opterećenja i proxyingu, važno je upoznati se s nekim ključnim pojmovima i konceptima. Započet ćemo pregledom tih koncepata u sljedećim odjeljcima.
ACL (Access Control List)
Kada je riječ o uravnoteženju opterećenja, ACL-ovi se koriste za testiranje određenog uvjeta i izvršavanje radnje na temelju rezultata. To omogućuje optimalno prosljeđivanje prometa na temelju čimbenika kao što su pozadinske veze, podudaranje uzoraka i mnogi drugi. Evo primjera upotrebe ACL-a:
|
1 |
acl url_blog path_beg /blog |
U ovom slučaju, ACL se podudara ako putanja koju je korisnik zatražio počinje s /blog. Na primjer, ovaj zahtjev za podudaranje upućivao bi na http://yourdomain.com/blog/blog-entry-1. Priručnik za konfiguraciju HAProxy-ja sadrži detaljan vodič za korištenje ACL-a.
Backend
Proslijeđene zahtjeve prima skup poslužitelja koji se naziva backend. Zahtjevi su definirani u odjeljku backend u konfiguraciji HAProxy-ja. Najjednostavnije rečeno, backend se može definirati algoritmima za uravnoteženje opterećenja koji će se koristiti te popisom priključaka i poslužitelja. Backend se može sastojati od jednog ili više poslužitelja. Kako se više poslužitelja dodaje u backend, potencijalni kapacitet opterećenja se povećava, a obrada se raspoređuje na više poslužitelja. Ako neki od backend poslužitelja prestanu raditi, ostali će služiti kao sigurnosne kopije za obradu zahtjeva.
Pogledajmo primjer konfiguracije dvaju backenda. U ovom slučaju, to su blog-backend i web-backend. Svaki ima dva web poslužitelja koji slušaju na portu 80:
|
1 2 3 4 5 6 7 8 9 10 |
backend web-backend balance roundrobin server web1 web1.yourdomain.com:80 check server web2 web2.yourdomain.com:80 check backend blog-backend balance roundrobin node http server blog1 blog1.yourdomain.com:80 check server blog2 blog2.yourdomain.com:80 check |
Linija balance roundrobin namijenjena je određivanju algoritma za uravnoteženje opterećenja. Detalje možete pronaći u sljedećem odjeljku Algoritmi za uravnoteženje opterećenja, dok mode http postavlja korištenje proxyinga na sloju 7. To ćemo objasniti u odjeljku Vrste uravnoteženja opterećenja. Također, opcija check nakon definicije poslužitelja označava da će se na tim određenim backend poslužiteljima pokrenuti provjere ispravnosti.
Frontend
Definicija načina na koji se zahtjevi prosljeđuju backendu naziva se frontend. Zahtjevi su definirani u odjeljku frontend u konfiguraciji HAProxy-ja. Sastoje se od ACL-ova, porta, skupa IP adresa i pravila koje definira koje pozadinske sustave koristiti ovisno o tome koji su ACL uvjeti ispunjeni, a koje se naziva pravilo use_backend. Osim toga, postoji i pravilo default_backend koje pokriva sve ostale slučajeve. Sljedeći odjeljak objasnit će kako se frontend može konfigurirati za različite vrste mrežnog prometa.
Vrste uravnoteženja opterećenja
Nakon što smo utvrdili osnovne komponente koje se koriste za uravnoteženje opterećenja, sada možemo prijeći na osnovne vrste uravnoteženja opterećenja.
Bez uravnoteženja opterećenja
U svom najelementarnijem obliku, nedostatak uravnoteženja opterećenja može se ilustrirati na sljedeći način:
U ovom scenariju, korisnik se izravno povezuje s web poslužiteljem na adresi yourdomain.com. Uravnoteženje opterećenja nije prisutno. Budući da postoji samo jedan poslužitelj baze podataka, ako on ode izvan mreže, pristup informacijama na njemu sada je potpuno prekinut. Ako se mnogo korisnika pokušava istovremeno povezati s jednim web poslužiteljem, a on ne može podnijeti opterećenje koje to stvara, sve će se veze usporiti ili se uopće neće uspjeti povezati.
Uravnoteženje opterećenja (sloj 4)
Jedan od najjednostavnijih, najpragmatičnijih načina uravnoteženja mrežnog prometa na više poslužitelja je korištenje metoda uravnoteženja transportnog sloja ili sloja 4. Ovaj način uravnoteženja opterećenja usmjerava svakog korisnika koji se povezuje na temelju IP raspona u koji spada njihova IP adresa i porta. Drugim riječima, ako http://yourdomain.com/anything mjesto odakle dolazi zahtjev, pozadinski sustav (backend) koji je definiran za obradu tih zahtjeva bit će onaj koji ih u konačnici obrađuje. Proslijedit će te zahtjeve za yourdomain.com na portu 80.
Osnovna struktura uravnoteženja opterećenja na sloju 4 izgleda ovako:
Kada korisnik dobije pristup uravnoteživaču opterećenja, njegovi se zahtjevi prosljeđuju grupi web-backend poslužitelja. Konfigurirani pozadinski poslužitelj izravno će odgovoriti na korisnikov zahtjev. Kako bi se izbjeglo da korisnik naiđe na nedosljedne podatke, svi web-backend poslužitelji trebali bi posluživati identičan sadržaj. Prema gornjem dijagramu, oba se web poslužitelja u konačnici povezuju na isti poslužitelj baze podataka.
Uravnoteženje opterećenja (Sloj 7)
Postoji još jedna, složenija metoda za uravnoteženje mrežnog prometa. To je korištenje uravnoteženja opterećenja na razini 7, ili aplikacijskom sloju. Ovaj pristup omogućuje prosljeđivanje korisničkih zahtjeva različitim pozadinskim poslužiteljima ovisno o sadržaju korisničkih zahtjeva. Ova metoda omogućuje uravnoteženje opterećenja na više poslužitelja web aplikacija putem istog porta i domene. Za više pojedinosti o ovom sloju, pogledajte pododjeljak HTTP u našem The Nitty Gritty of Networking: Learn about Terminology, Interfaces, and Protocols vodiču.
Sljedeći dijagram ilustrira uravnoteženje opterećenja na sloju 7:
U ovom slučaju, korisnik traži yourdomain.com/blog, a njegov se zahtjev prosljeđuje na blog backend. Ovo je skup pozadinskih poslužitelja posebno dodijeljen za pokretanje blog aplikacije. U međuvremenu, ostali zahtjevi bit će proslijeđeni na web-backend. Međutim, oba pozadinska sustava na kraju pristupaju istom poslužitelju baze podataka.
Primjer malog dijela konfiguracije sučelja (frontend) za uravnoteženje opterećenja na sloju 7 izgledao bi otprilike kao sljedeće naredbe. One konfiguriraju http frontend za rukovanje dolaznim prometom kroz port 80:
|
1 2 3 4 5 6 7 8 |
frontend http bind *:80 node http acl url_blog path_beg /blog use_backend blog.backend if url_blog default_backend web.backend |
Ako putanja korisničkog zahtjeva počinje s /blog, acl url_blog path_beg /blog će odgovarati zahtjevu.
use_backend blog backend if url_blog prosljeđuje promet na blog-backend koristeći ACL.
defaut_backen web_backend usmjerava sva ostala prosljeđivanja prometa na web-backend.
Algoritmi za uravnoteženje opterećenja
Kada se provodi uravnoteženje opterećenja, algoritam za uravnoteženje opterećenja definira koji će pozadinski poslužitelj biti odabran za tu svrhu. HAProxy nudi nekoliko opcija algoritama. Dodatno je moguće poslužiteljima dodijeliti parametar težine kako bi se utjecalo na to koliko se često jedan poslužitelj odabire u usporedbi s drugima. Dostupno je jednostavno previše algoritama da bismo ih sve opisali. Stoga će se ovaj vodič usredotočiti samo na one najčešće. Možete pogledati HAProxy Documentation Converter kako biste vidjeli cijeli popis. Najčešće korišteni uključuju:
- roundrobin: zadani algoritam koji odabire poslužitelje po redu.
- leastconn: automatski se odabire poslužitelj s najmanje veza. Međutim, ti bi se poslužitelji unutar istog pozadinskog sustava trebali rotirati na principu 'round-robin'.
- source: algoritam odabire poslužitelj na temelju IP adrese s koje dolazi korisnički zahtjev. To je metoda kojom se osigurava da će se korisnik uvijek povezati na isti poslužitelj.
Ljepljive sesije
Za neke aplikacije zahtjev je da se korisnici koji se povezuju uvijek usmjeravaju na isti poslužitelj. Putem „ljepljivih sesija” i korištenjem parametra appsession u pozadinskom sustavu koji to zahtijeva, može se postići takva postojanost.
Provođenje provjera ispravnosti
HAProxy treba metodu pomoću koje može utvrditi sposobnost pozadinskog poslužitelja za obradu zahtjeva. To služi za uklanjanje poslužitelja iz pozadinskog sustava ako ode izvan mreže. Postoji zadana „provjera ispravnosti” koja pokušava uspostaviti TCP vezu. To čini slušanjem na konfiguriranoj IP adresi i priključku.
Ako provjera ispravnosti za poslužitelj ne prođe, poslužitelj ne može obrađivati poslane zahtjeve. U tom se trenutku poslužitelj automatski onemogućuje u pozadinskom sustavu, a promet mu se više ne prosljeđuje sve dok ponovno ne proradi (postane ispravan). Međutim, u određenim slučajevima utvrđivanje ispravnosti poslužitelja putem zadane provjere ispravnosti pokazuje se nedovoljnim.
Alternativna rješenja
HAProxy se može pokazati previše sofisticiranim za vaše specifične potrebe. U tom slučaju postoji nekoliko dobrih alternativa koje bi se mogle pokazati učinkovitijima:
- Nginx: Ovo je pouzdan i brz web poslužitelj koji se može iskoristiti za uravnoteženje opterećenja i proxy svrhe. Zapravo, Nginx se obično koristi u kombinaciji s HAProxyjem koji koristi njegove mogućnosti kompresije i predmemoriranja.
- Linux Virtual Servers (LVS): Ovo je jednostavno uravnoteženje opterećenja na sloju 4 koje je uključeno u mnoge Linux sustave.
Visoka dostupnost
Do sada smo govorili o uravnoteženju opterećenja na sloju 4 i sloju 7. Oba koriste sustav za uravnoteženje opterećenja kako bi odredili koji će od mnogih pozadinskih poslužitelja dobiti zadatak odgovoriti na korisnički zahtjev. No važno je imati na umu ograničenja sustava za uravnoteženje opterećenja. Naime, da je to jedinstvena točka kvara. To znači da ako prestane raditi ili se preoptereti korisničkim zahtjevima, to će rezultirati zastojem u radu ili kašnjenjem u obradi zahtjeva. Međutim, HA (visoka dostupnost) konfiguracija predstavlja infrastrukturu kojoj nedostaje bilo koja jedinstvena točka kvara. To sprječava pojavu zastoja u radu zbog kvara poslužitelja uvođenjem redundancije na svakoj razini arhitekture sustava. Iako će sustav za uravnoteženje opterećenja pomoći u omogućavanju redundancije pozadinskog sustava, sami sustavi za uravnoteženje opterećenja također moraju imati redundanciju.
Sljedeći dijagram prikazuje osnovni oblik konfiguracije visoke dostupnosti:

Ova infrastruktura ima nekoliko sustava za uravnoteženje opterećenja (jedan aktivan, ostali pasivni) povezanih sa statičkom IP adresom. Ova se IP adresa može preusmjeriti na drugi poslužitelj ako situacija to zahtijeva. Korisnički zahtjev putuje preko vanjske IP adrese do trenutno aktivnog sustava za uravnoteženje opterećenja. Ako je sustav za uravnoteženje opterećenja u tom trenutku izvan mreže, sigurnosni mehanizam će otkriti njegovo stanje i ponovno dodijeliti IP adresu pasivnim poslužiteljima.
Zaključak
Temeljno razumijevanje raspodjele opterećenja i poznavanje nekih od načina na koje HAProxy može ispuniti potrebe vašeg sustava za raspodjelom opterećenja trebali bi vam pružiti čvrste temelje za početak optimizacije pouzdanosti i performansi vaših trenutnih poslužiteljskih okruženja. Također možete pogledati naš vodič Nginx HTTP proksiranje, raspodjela opterećenja, međuspremanje i predmemoriranje: pregled kako biste saznali više o svojstvima raspodjele opterećenja Nginxa.
Sretno s radom!



Komentari
Još nema komentara. Budite prvi.