Preklad článku bol pripravený v predstihu pred začiatkom kurzu
Vyvažovanie záťaže je bežné riešenie pre horizontálne škálovanie webových aplikácií naprieč viacerými hostiteľmi, pričom používateľom poskytuje jediný bod prístupu k službe.
HAProxy sa snaží optimalizovať využitie zdrojov, maximalizovať priepustnosť, minimalizovať čas odozvy a vyhnúť sa preťaženiu jednotlivých zdrojov. Dá sa nainštalovať na rôzne distribúcie Linuxu, ako je CentOS 8, na ktorý sa zameriame v tejto príručke, ako aj na systémy
HAProxy je obzvlášť vhodný pre webové stránky s veľmi vysokou návštevnosťou, a preto sa často používa na zlepšenie spoľahlivosti a výkonu konfigurácií webových služieb s viacerými servermi. Táto príručka popisuje kroky na nastavenie HAProxy ako nástroja na vyvažovanie záťaže na cloudovom hostiteľovi CentOS 8, ktorý potom nasmeruje prevádzku na vaše webové servery.
Predpokladom na dosiahnutie najlepších výsledkov by ste mali mať aspoň dva webové servery a server na vyrovnávanie záťaže. Na webových serveroch musí byť spustená aspoň základná webová služba, ako je nginx alebo httpd, aby sa medzi nimi otestovalo vyrovnávanie záťaže.
Inštalácia HAProxy na CentOS 8
Pretože HAProxy je rýchlo sa vyvíjajúca open source aplikácia, distribúcia, ktorú máte k dispozícii v štandardných úložiskách CentOS, nemusí byť najnovšou verziou. Ak chcete zistiť aktuálnu verziu, spustite nasledujúci príkaz:
sudo yum info haproxy
HAProxy vždy poskytuje tri stabilné verzie, z ktorých si môžete vybrať: dve najnovšie podporované verzie a tretiu, staršiu verziu, ktorá stále dostáva dôležité aktualizácie. Vždy si môžete skontrolovať najnovšiu stabilnú verziu uvedenú na webovej stránke HAProxy a potom sa rozhodnúť, s ktorou verziou chcete pracovať.
V tejto príručke budeme inštalovať najnovšiu stabilnú verziu 2.0, ktorá v čase písania príručky ešte nebola dostupná v štandardných úložiskách. Budete ho musieť nainštalovať z pôvodného zdroja. Najprv si však skontrolujte, či ste splnili potrebné podmienky na stiahnutie a zostavenie programu.
sudo yum install gcc pcre-devel tar make -y
Stiahnite si zdrojový kód pomocou príkazu nižšie. Môžete skontrolovať, či je k dispozícii novšia verzia
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Po dokončení sťahovania extrahujte súbory pomocou príkazu nižšie:
tar xzvf ~/haproxy.tar.gz -C ~/
Prejdite do rozbaleného zdrojového adresára:
cd ~/haproxy-2.0.7
Potom skompilujte program pre váš systém:
make TARGET=linux-glibc
A nakoniec nainštalujte samotné HAProxy:
sudo make install
HAProxy je teraz nainštalovaný, ale vyžaduje si ďalšie manipulácie, aby fungoval. Pokračujme v nastavovaní softvéru a služieb nižšie.
Nastavenie HAProxy pre váš server
Teraz pridajte nasledujúce adresáre a štatistický súbor pre položky HAProxy:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Vytvorte symbolický odkaz na binárne súbory, aby ste mohli spúšťať príkazy HAProxy ako bežný používateľ:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Ak chcete do vášho systému pridať proxy ako službu, skopírujte súbor haproxy.init z príkladov do vášho adresára /etc/init.d. Upravte povolenia súboru tak, aby sa skript spustil, a potom reštartujte démona 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
Musíte tiež povoliť, aby sa služba automaticky reštartovala pri spustení systému:
sudo chkconfig haproxy on
Pre pohodlie sa tiež odporúča pridať nového používateľa na spustenie HAProxy:
sudo useradd -r haproxy
Potom môžete znova skontrolovať číslo nainštalovanej verzie pomocou nasledujúceho príkazu:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
V našom prípade by mala byť verzia 2.0.7, ako je uvedené v príklade výstupu vyššie.
Napokon, predvolený firewall v CentOS 8 je pre tento projekt dosť obmedzujúci. Na povolenie požadovaných služieb a resetovanie brány firewall použite nasledujúce príkazy:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
Nastavenie vyvažovača zaťaženia
Nastavenie HAProxy je pomerne jednoduchý proces. V podstate všetko, čo musíte urobiť, je povedať HAProxy, aké spojenia má počúvať a kam ich má prenášať.
To sa dosiahne vytvorením konfiguračného súboru /etc/haproxy/haproxy.cfg s definovaním nastavení. Môžete si prečítať o možnostiach konfigurácie HAProxy
Vyvažovanie zaťaženia na transportnej vrstve (vrstva 4)
Začnime základným nastavením. Vytvorte nový konfiguračný súbor, napríklad pomocou vi s príkazom nižšie:
sudo vi /etc/haproxy/haproxy.cfg
Pridajte do súboru nasledujúce sekcie. Nahradiť názov servera čo by malo volať vaše servery na stránke so štatistikami a private_ip — súkromné adresy IP serverov, na ktoré chcete nasmerovať webovú prevádzku. Môžete skontrolovať súkromné IP adresy
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
Toto definuje vyvažovač záťaže transportnej vrstvy (vrstva 4) externe s názvom http_front počúvajúci na porte 80, ktorý potom posiela prenos do predvoleného backendu s názvom http_back. Dodatočná štatistika /haproxy?stats pripojí stránku so štatistikou k zadanej adrese.
Rôzne algoritmy na vyrovnávanie záťaže.
Zadanie serverov v sekcii backend umožňuje HAProxy použiť tieto servery na vyvažovanie záťaže podľa algoritmu round-robin, ak je to možné.
Algoritmy vyvažovania sa používajú na určenie, na ktorý server v backende sa každé pripojenie prenesie. Tu sú niektoré z užitočných možností:
- Roundrobin: Každý server sa používa postupne podľa jeho hmotnosti. Toto je najplynulejší a najspravodlivejší algoritmus, keď čas spracovania serverov zostáva rovnomerne rozdelený. Tento algoritmus je dynamický a umožňuje prispôsobovanie hmotnosti servera za behu.
- Leastconn: je vybratý server s najmenším počtom pripojení. Round robin sa vykonáva medzi servermi s rovnakým zaťažením. Použitie tohto algoritmu sa odporúča pre dlhé relácie, ako sú LDAP, SQL, TSE atď., ale nie je príliš vhodné pre krátke relácie, ako je HTTP.
- Najprv: Prvý server s dostupnými slotmi na pripojenie prijme pripojenie. Servery sa vyberajú od najnižšieho číselného ID po najvyššie, ktoré je predvolene nastavené na pozíciu servera vo farme. Keď server dosiahne maxconn, použije sa ďalší server.
- zdroj: Zdrojová IP adresa je hašovaná a delená celkovou váhou spustených serverov, aby sa určilo, ktorý server prijme požiadavku. Týmto spôsobom bude rovnaká adresa IP klienta vždy smerovať na rovnaký server, zatiaľ čo servery zostanú rovnaké.
Nastavenie vyvažovania záťaže na úrovni aplikácie (vrstva 7)
Ďalšou dostupnou možnosťou je nakonfigurovať nástroj na vyrovnávanie zaťaženia tak, aby sa spúšťal na aplikačnej vrstve (vrstva 7), čo je užitočné, keď sú časti vašej webovej aplikácie umiestnené na rôznych hostiteľoch. To sa dá dosiahnuť obmedzením prenosu spojenia, napríklad URL.
Otvorte konfiguračný súbor HAProxy pomocou textového editora:
sudo vi /etc/haproxy/haproxy.cfg
Potom nakonfigurujte segmenty frontend a backend podľa príkladu nižšie:
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 deklaruje pravidlo ACL s názvom url_blog, ktoré platí pre všetky pripojenia s cestami začínajúcimi na /blog. Use_backend určuje, že pripojenia zodpovedajúce podmienke url_blog by mal obsluhovať backend s názvom blog_back a všetky ostatné požiadavky spracováva predvolený backend.
Na strane backendu konfigurácia nastaví dve skupiny serverov: http_back, ako predtým, a nový s názvom blog_back, ktorý sa stará o pripojenia k example.com/blog.
Po zmene nastavení uložte súbor a reštartujte HAProxy pomocou nasledujúceho príkazu:
sudo systemctl restart haproxy
Ak sa počas spúšťania zobrazia nejaké varovania alebo chybové hlásenia, skontrolujte ich v konfigurácii a uistite sa, že ste vytvorili všetky potrebné súbory a priečinky, potom skúste reštartovať znova.
Testovanie nastavenia
Po nakonfigurovaní a spustení HAProxy otvorte verejnú IP adresu servera na vyrovnávanie záťaže v prehliadači a skontrolujte, či ste správne pripojení k backendu. Parameter stats uri v konfigurácii vytvorí štatistickú stránku na zadanej adrese.
http://load_balancer_public_ip/haproxy?stats
Ak sa pri načítaní stránky so štatistikami všetky vaše servery zobrazujú nazeleno, nastavenie bolo úspešné!
Stránka so štatistikami obsahuje niekoľko užitočných informácií na sledovanie vašich webových hostiteľov vrátane času vzostupu a výpadku a počtu relácií. Ak je server označený červenou farbou, uistite sa, že je server zapnutý a že ho môžete pingnúť zo stroja na vyrovnávanie záťaže.
Ak váš nástroj na vyrovnávanie zaťaženia nereaguje, skontrolujte, či pripojenia HTTP nie sú blokované bránou firewall. Tiež sa uistite, že HAProxy funguje pomocou príkazu nižšie:
sudo systemctl status haproxy
Ochrana štatistickej stránky heslom
Ak je však štatistická stránka jednoducho uvedená na frontende, potom je otvorená pre každého, čo nemusí byť dobrý nápad. Namiesto toho mu môžete priradiť vlastné číslo portu pridaním nižšie uvedeného príkladu na koniec súboru haproxy.cfg. Nahradiť meno и heslo pre niečo bezpečné:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Po pridaní novej skupiny poslucháčov odstráňte starý odkaz uri štatistiky zo skupiny frontendu. Po dokončení uložte súbor a reštartujte HAProxy.
sudo systemctl restart haproxy
Potom znova otvorte nástroj na vyrovnávanie zaťaženia s novým číslom portu a prihláste sa pomocou používateľského mena a hesla, ktoré ste zadali v konfiguračnom súbore.
http://load_balancer_public_ip:8181
Uistite sa, že všetky vaše servery sú stále zelené a potom v prehliadači otvorte iba IP vyrovnávača zaťaženia bez akýchkoľvek čísel portov.
http://load_balancer_public_ip/
Ak máte na svojich back-end serveroch aspoň rôzne vstupné stránky, všimnete si, že pri každom opätovnom načítaní stránky dostanete odpoveď od iného hostiteľa. Môžete vyskúšať rôzne vyvažovacie algoritmy v sekcii konfigurácie alebo sa pozrieť
Záver: HAProxy Load Balancer
Blahoželáme k úspešnému nastaveniu vášho vyrovnávača zaťaženia HAProxy! Dokonca aj so základným nastavením vyrovnávania záťaže môžete výrazne zlepšiť výkon a dostupnosť svojej webovej aplikácie. Táto príručka je len úvodom do vyvažovania záťaže pomocou HAProxy, ktorá dokáže oveľa viac, než čo možno pokryť v príručke rýchleho nastavenia. Odporúčame experimentovať s použitím rôznych konfigurácií
Použitím viacerých hostiteľov na ochranu vašej webovej služby s rezervou môže samotný nástroj na vyvažovanie záťaže stále predstavovať bod zlyhania. Vysokú dostupnosť môžete ďalej zlepšiť inštaláciou plávajúcej IP medzi viacerými vyrovnávačmi zaťaženia. Viac sa o tom dozviete v našom
Viac o kurze
Zdroj: hab.com