Úvod
High Availability Proxy (HAProxy), je populárne open-source riešenie pre proxy a TCP/HTTP vyvažovanie záťaže schopné bežať na systémoch Solaris, FreeBSD, a Linux. Najčastejšie sa používa na zvýšenie spoľahlivosti a výkonu serverového prostredia poskytovaním vyváženého rozdelenia záťaže medzi viacero serverov. Tento typ nástroja sa používa v mnohých významných prostrediach, ako sú Instagram, GitHub, Twitter a Imgur.
Tento sprievodca vás zoznámi s HAProxy, oboznámi vás s terminológiou vyvažovania záťaže a poskytne príklady, ako ho možno využiť na zvýšenie výkonu aj spoľahlivosti serverových prostredí.
Základné pojmy HAProxy
Predtým, ako sa pustíme do podrobností o vyvažovaní záťaže a proxyovaní, je dôležité oboznámiť sa s niektorými dôležitými pojmami a konceptmi. Začneme ich prehľadom v nasledujúcich častiach.
ACL (Access Control List)
Pokiaľ ide o vyvažovanie záťaže, ACL sa využívajú na testovanie konkrétnej podmienky a vykonanie akcie na základe výsledku. To umožňuje optimálne presmerovanie prevádzky na základe faktorov, ako sú pripojenia k backendu, porovnávanie vzorov a mnohé ďalšie. Tu je príklad použitia ACL:
|
1 |
acl url_blog path_beg /blog |
V tomto prípade sa ACL zhoduje, ak cesta požadovaná používateľom začína na /blog. Tento vyhovujúci dopyt by napríklad smeroval na http://yourdomain.com/blog/blog-entry-1. Konfiguračná príručka HAProxy obsahuje podrobného sprievodcu používaním ACL.
Backend
Presmerované požiadavky prijíma skupina serverov označovaná ako backend. Požiadavky sú definované v sekcii backend v konfigurácii HAProxy. V najjednoduchšom zmysle môže byť backend definovaný algoritmami vyvažovania záťaže, ktoré sa majú použiť, a zoznamom portov a serverov. Backend môže pozostávať z jedného servera alebo z viacerých serverov. S pridaním ďalších serverov do backendu sa zvyšuje potenciálna kapacita záťaže, pričom spracovanie sa rozdelí medzi viacero serverov. Ak niektoré zo serverov backendu prejdú do režimu offline, ostatné budú slúžiť ako záloha na spracovanie požiadaviek.
Pozrime sa na príklad konfigurácie dvoch backendov. V tomto prípade ide o blog-backend a web-backend. Každý z nich má dva webové servery počúvajúce na porte 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 |
Riadok balance roundrobin je určený na špecifikáciu algoritmu vyvažovania záťaže. Podrobnosti nájdete v nasledujúcej časti Algoritmy pre vyvažovanie záťaže , zatiaľ čo mode http nastavuje použitie proxy na 7. vrstve. Vysvetlíme si to v časti Typy vyvažovania záťaže. Možnosť check za definíciou serverov tiež naznačuje, že na týchto konkrétnych backend serveroch sa budú spúšťať kontroly stavu (health checks).
Frontend
Definícia toho, ako sa požiadavky presmerovávajú na backend, sa označuje ako frontend. Požiadavky sú definované v sekcii frontend v konfigurácii HAProxy. Skladajú sa z ACL, portu, sady IP adries a pravidla definujúceho, ktoré backendy sa majú použiť v závislosti od splnených podmienok ACL, nazývaného pravidlo use_backend. Okrem toho existuje aj pravidlo default_backend pre akýkoľvek iný prípad. V nasledujúcej časti si vysvetlíme, ako je možné nakonfigurovať frontend pre rôzne typy sieťovej prevádzky.
Typy vyvažovania záťaže
Po zadefinovaní základných komponentov používaných na vyvažovanie záťaže môžeme teraz prejsť k základným typom vyvažovania záťaže.
Bez vyvažovania záťaže
V najzákladnejšej podobe možno absenciu vyvažovania záťaže znázorniť nasledovne:
V tomto scenári sa používateľ pripája priamo k webovému serveru na adrese yourdomain.com. Nie je tu prítomné žiadne vyvažovanie záťaže. Keďže existuje iba jeden databázový server, ak prejde do režimu offline, prístup k informáciám na ňom je úplne prerušený. Ak sa veľa používateľov pokúša pripojiť k jednému webovému serveru súčasne a ten nie je schopný zvládnuť záťaž, ktorú to vyvoláva, všetky pripojenia sa spomalia alebo sa vôbec nepripoja.
Vyvažovanie záťaže (4. vrstva)
Jedným z najjednoduchších a najpragmatickejších spôsobov vyvažovania sieťovej prevádzky na viacero serverov je použitie metód vyvažovania na transportnej vrstve alebo 4. vrstve. Tento spôsob vyvažovania záťaže smeruje každého pripájajúceho sa používateľa na základe rozsahu IP adries, do ktorého spadá jeho IP adresa, a portu. Inými slovami, ak http://yourdomain.com/anything je miesto, odkiaľ požiadavka prichádza, backend, ktorý je definovaný na spracovanie týchto požiadaviek, bude tým, čo ich nakoniec spracuje. Presmeruje tieto požiadavky pre yourdomain.com na port 80.
Základná štruktúra vyvažovania záťaže na 4. vrstve vyzerá takto:
Keď používateľ získa prístup k vyvažovaču záťaže, jeho požiadavky sa presmerujú do skupiny serverov web-backend. Nakonfigurovaný backend server priamo odpovie na požiadavku používateľa. Aby sa predišlo tomu, že sa používateľ stretne s nekonzistentnými údajmi, všetky web-backend servery by mali poskytovať identický obsah. Podľa diagramu vyššie oba webové servery v konečnom dôsledku odkazujú na rovnaký databázový server.
Vyvažovanie záťaže (7. vrstva)
Existuje ďalšia, komplexnejšia metóda vyvažovania sieťovej prevádzky. Ide o vyvažovanie záťaže na 7. úrovni alebo aplikačnej vrstve. Tento prístup umožňuje presmerovať požiadavky používateľov na rôzne backend servery v závislosti od obsahu požiadaviek používateľov. Táto metóda umožňuje vyvažovanie záťaže na viacerých serveroch webových aplikácií prostredníctvom rovnakého portu a domény. Podrobnejšie informácie o tejto vrstve nájdete v podsekcii HTTP nášho Základy sieťovania: Spoznajte terminológiu, rozhrania a protokoly návodu.
Nasledujúci diagram znázorňuje vyvažovanie záťaže na 7. vrstve:
V tomto prípade používateľ požiada o adresu yourdomain.com/blog a jeho požiadavka sa presmeruje na blog backend. Ide o sadu backend serverov špeciálne vyhradených na spustenie blogovej aplikácie. Medzitým budú ostatné požiadavky presmerované na web-backend. Oba backendy však nakoniec pristupujú k rovnakému databázovému serveru.
Príklad malej časti konfigurácie frontendu pre vyvažovanie záťaže na 7. vrstve by vyzeral približne ako nasledujúce príkazy. Konfigurujú http frontend na spracovanie prichádzajúcej prevádzky cez 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 |
Ak cesta požiadavky používateľa začína s /blog, acl url_blog path_beg /blog sa bude zhodovať s požiadavkou.
use_backend blog backend if url_blog smeruje prevádzku na blog-backend pomocou ACL.
defaut_backen web_backend smeruje všetku ostatnú prevádzku na web-backend.
Algoritmy na vyvažovanie záťaže
Pri vykonávaní vyvažovania záťaže definuje algoritmus vyvažovania záťaže, ktorý backendový server bude vybraný na tento účel. HAProxy ponúka niekoľko možností algoritmov. Okrem toho je možné serverom priradiť parameter váhy (weight), aby sa dalo ovplyvniť, ako často sa jeden server vyberá v porovnaní s ostatnými. K dispozícii je jednoducho príliš veľa algoritmov na to, aby sme ich opísali všetky. Preto sa táto príručka zameria len na tie najbežnejšie. Môžete sa obrátiť na HAProxy Documentation Converter, kde nájdete úplný zoznam. Medzi najčastejšie používané patria:
- roundrobin: Predvolený algoritmus, ktorý postupne vyberá servery.
- leastconn: Automaticky sa vyberie server s najmenším počtom pripojení. Servery v rámci rovnakého backendu by sa však mali striedať spôsobom round-robin.
- source: Algoritmus vyberá server na základe IP adresy, z ktorej pochádza požiadavka používateľa. Je to metóda, ktorá zabezpečuje, že používateľ sa vždy pripojí k rovnakému serveru.
Sticky Sessions
Pri niektorých aplikáciách je požiadavkou, aby sa pripájajúci sa používatelia vždy pripojili k rovnakému serveru. Prostredníctvom „sticky sessions“ a použitím parametra appsession v backende, ktorý to vyžaduje, je možné takúto perzistenciu dosiahnuť.
Processing Health Checks
HAProxy potrebuje metódu, pomocou ktorej dokáže určiť schopnosť backendového servera spracovávať požiadavky. To nahrádza odstránenie servera z backendu, ak prejde do režimu offline. Spúšťa sa predvolená kontrola stavu („health check“), ktorá sa pokúša nadviazať TCP spojenie. Robí to tak, že počúva na nakonfigurovanej IP adrese a porte.
Ak kontrola stavu servera neprejde, server nie je schopný spracovávať odoslané požiadavky. V tom momente sa server v backende automaticky zakáže a prevádzka sa naň prestane presmerovávať, kým nebude opäť v prevádzke a funkčný (zdravý). V určitých prípadoch sa však zisťovanie stavu servera prostredníctvom predvolenej kontroly stavu ukazuje ako nedostatočné.
Alternate Solutions
HAProxy sa môže ukázať ako príliš sofistikované pre vaše konkrétne potreby. V takom prípade existuje niekoľko dobrých alternatív, ktoré by sa mohli ukázať ako efektívnejšie:
- Nginx: Ide o spoľahlivý a rýchly webový server, ktorý možno využiť na účely vyvažovania záťaže a proxy. V skutočnosti sa Nginx bežne používa v spojení s HAProxy, pričom sa využívajú jeho schopnosti kompresie a ukladania do vyrovnávacej pamäte.
- Linux Virtual Servers (LVS): Ide o jednoduchý vyvažovač záťaže na 4. vrstve (layer 4), ktorý je súčasťou mnohých systémov Linux.
High Availability
Doteraz sme hovorili o vyvažovaní záťaže na 4. a 7. vrstve. Obe využívajú vyvažovač záťaže na určenie toho, ktorý z mnohých backendových serverov bude mať za úlohu odpovedať na požiadavku používateľa. Je však dôležité mať na pamäti obmedzenia vyvažovača záťaže. Konkrétne to, že je to ’jediný bod zlyhania’. To znamená, že ak by vypadol alebo by bol preťažený požiadavkami používateľov, viedlo by to k výpadku alebo oneskoreniu spracovania požiadaviek. Nastavenie HA (vysokej dostupnosti) však predstavuje infraštruktúru, ktorej chýba akýkoľvek jediný bod zlyhania. Tým sa predchádza výpadkom v dôsledku zlyhania servera zavedením redundancie na každej úrovni architektúry systému. Hoci vyvažovač záťaže pomôže zabezpečiť redundanciu backendu, samotné vyvažovače záťaže musia tiež vykazovať redundanciu.
Nasledujúci diagram znázorňuje základnú formu nastavenia vysokej dostupnosti:

Táto infraštruktúra má niekoľko vyvažovačov záťaže (jeden aktívny, ostatné pasívne) prepojených so statickou IP adresou. Túto IP adresu je možné v prípade potreby premapovať na iný server. Požiadavka používateľa prechádza cez externú IP adresu do aktuálne aktívneho vyvažovača záťaže. Ak je vyvažovač záťaže v tom čase offline, mechanizmus zabezpečenia proti zlyhaniu (failsafe) deteguje jeho stav a priradí IP adresu pasívnemu serveru (alebo serverom).
Záver
Základné pochopenie vyvažovania záťaže a znalosť niektorých spôsobov, akými môže HAProxy splniť potreby vyvažovania záťaže pre váš systém, by vám mali poskytnúť pevný základ pre začiatok optimalizácie spoľahlivosti a výkonu vašich súčasných serverových prostredí. Môžete si tiež pozrieť náš návod Nginx HTTP proxying, vyvažovanie záťaže, buffering a caching: prehľad, aby ste sa dozvedeli viac o vlastnostiach vyvažovania záťaže v Nginx.
Príjemnú prácu s počítačom!



Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.