HAProxy je open source nástroj pro vyrovnávání zatížení s velmi působivým výkonem. Používá se k front-endu dokonce i webových aplikací na planetě, jako je Twitter. Dokáže vyvažovat zatížení síťových aplikací přes TCP (Layer3) a HTTP (Layer 7). V případě potřeby také přebírá požadavky na aktivní instance serveru, a proto nabízí vysokou dostupnost (HA).
E2E Networks nabízí určené uzly s výpočetním výkonem vhodným pro provozování vysoce výkonného load-balanceru, jako je HAProxy. Tyto uzly se nazývají uzly Virtual Load Balancer (VLB). V tomto blogu vysvětlíme, jak nastavit HAProxy na uzlu Virtual Load Balancer na E2E Cloud. HAProxy na vrstvě 7 použijeme k frontendu PHP aplikací běžících na webových serverech Apache. V druhé a závěrečné části tohoto blogu si kromě základního nastavení projdeme několik dalších kroků, které musí provést většina správců webových stránek. Tyto další kroky jsou:implementace lepivosti relace a zabezpečení přístupu na web pomocí SSL. Tyto dva blogy jsou do značné míry samostatné a společně by měly správcům systému pomoci hladce nastavit HAProxy jako front-end load-balancer pro webové aplikace nasazené na E2E Cloud.
Instalace a základní nastavení
Přestože se zaměřujeme na HAProxy, začneme instalací dvou webových serverů, na které lze směrovat požadavky HTTP. Po přihlášení do našeho E2E Networks Dashboard následujeme odkazy na ‚Create Node‘ a vybereme distribuci Ubuntu 16.04 s 1 CPU a 2 GB RAM . Nechte tento virtuální výpočetní uzel pojmenovat „websrv1 ‘. Poté vyvoláme další identický uzel pro instalaci druhé instance webového serveru s názvem „websrv2 ‘. Na každý uzel webového serveru nainstalujeme Apache 2.4 a PHP spuštěním následujících příkazů na terminálu (každého uzlu webového serveru):
- aktualizace apt-get
- apt-get install apache2 # install web server
- apt-get install php libapache2-mod-php php-mcrypt # php a související balíčky
- systemctl povolí apache2 # povolí spuštění webového serveru při restartu systému
- systemctl restart apache2 # restart webového serveru
- systemctl status apache2 # zkontrolujte, zda je webový server v provozu
Abychom otestovali, že instance webového serveru mohou serverovat PHP, vytvoříme jednoduchý soubor PHP v kořenovém adresáři dokumentu (adresář/var/www/html) na každém webovém serveru pomocí editoru vi :
Pozdrav
”
”
Ahoj /> ?>
Nyní, když nasměrujeme prohlížeč na http://
Takže jsme připraveni nainstalovat HAProxy na frontend webových serverů. Z našeho E2E Networks Dashboardu opět vytvoříme uzel, ale tentokrát ze ‚zařízení‘. Vybíráme spotřebič typu ‚Load Balancing HAProxy‘. Existuje několik dostupných konfigurací, z nichž jsme pro naši instanci HAProxy vybrali VLB-B-1 (5 VCPU a 4 GB RAM).
Obrázek 1:Vytvoření virtuálního uzlu nástroje pro vyrovnávání zatížení
VLB uzly na E2E Cloud jsou výkonné výpočetní uzly běžící na CentOS 7. Pro instalaci HAProxy na každý z těchto uzlů spustíme na terminálu následující příkazy:
- yum install haproxy # install HAProxy
- systemctl povolí haproxy # povolí spuštění HAProxy při restartu systému
- systemctl restart haproxy # restart HAProxy
- systemctl status haproxy # zkontrolujte, zda je HAProxy v provozu
V našem nasazení budeme potřebovat dva další balíčky pro fungování HAProxy:syslog a openssl. Vzhledem k tomu, že uzly VLB (běžící na CentOS) jsou předinstalovány s těmito dvěma balíčky, není potřeba žádný další instalační krok. Potřebujeme však několik konfiguračních kroků pro HAProxy ještě předtím, než začne vyvažování zátěže fungovat.
Obecná konfigurace HAProxy
Konfigurační soubor HAProxy se nachází v /etc/haproxy/haproxy.cfg a je dodáván s některými přednastavenými nastaveními, z nichž některá bude možná nutné upravit. Očekává se, že tento konfigurační soubor bude mít definovaný alespoň jeden ‚frontend‘ a alespoň jeden ‚backend‘. Každý frontend vyrovnává zatížení s jedním nebo více backendy. Backend se skládá z několika webových serverů obsluhujících stejnou webovou aplikaci pro škálovatelnost a redundanci. Ale v tomto souboru je také část označená jako ‚generic‘, která se týká celkové instalace HAProxy, a část ‚default‘, která specifikuje hodnoty parametrů použitelné pro all zde definované frontend a backendy.
Maximální počet připojení :V sekci ‚global‘ nastavíme parametr ‚maxconn‘ (maximální počet klientských připojení, které tento nástroj pro vyrovnávání zatížení dokáže zpracovat napříč všemi backendy, pro které to vychází). Tento parametr lze nastavit pomocí pokynů pro velikost HAProxy , nebo naopak můžeme zvolit VLB uzel z E2E Cloud, na základě očekávané špičkové zátěže, se kterou se náš web může setkat. S námi vybraným VLB-B-1 node, 4096 je rozumná hodnota pro „maxconn“ na globální úrovni.
Obrázek 2:Globální a výchozí konfigurační parametry pro HAProxy
Protokol: V našem nasazení bude HAProxy zachycovat a vyrovnávat zátěž HTTP provoz. To se konfiguruje nastavením režimu v části výchozí nastavení výše.
režim http
Protokolování :Doporučuje se, aby HAProxy používal syslog . Na CentOS to znamená nastavení parametru „log“ na „local2“, jak je znázorněno na obrázku výše. Kromě toho musí být také upravena konfigurace syslog na uzlu HAProxy (/etc/rsyslog.conf), aby naslouchal na portu UDP 514.
Obrázek 3:Konfigurace Syslog na uzlu HAProxy
Abyste se ujistili, že všechny zprávy protokolu na 'local2' do samostatného souboru výhradně pro HAProxy (/var/log/haproxy.log), musíme vytvořit soubor haproxy.conf v adresáři / etc/rsyslog.d a zadejte následující řádek:
local2.* /var/log/haproxy.log
Aby bylo možné sledovat požadavky end-to-end, měli bychom také vyladit formát protokolu webového serveru Apache v konfiguračním souboru webového serveru (/etc/apache2/apache2.conf). Na každém uzlu webového serveru upravíme LogFormat tak, aby zahrnoval skutečnou adresu klienta (X-Forwarded-For), ze které pochází požadavek HTTP (místo zobrazení IP adresy uzlu HAProxy).
Obrázek 4:LogFormat webového serveru Apache
Statistiky HAProxy :HAProxy lze nakonfigurovat tak, aby zobrazovala statistiky požadavků na webovém uživatelském rozhraní. Můžeme nastavit URL pro zobrazení statistik HAProxy (/lb-stats) chráněné pomocí základního ověřování.
Další výchozí nastavení :Sekce ‚výchozí‘ má spoustu parametrů časového limitu kterou jsme nechali beze změny. Ale v produkčním prostředí může každý správce webu chtít vyladit časové limity na základě faktorů, jako je latence sítě, doba zpracování na konci serveru atd. Zavedli jsme možnost „httpclose“, aby byla připojení klientů HTTP uzavřena co nejdříve. jako odpověď je odeslána zpět, aniž by se zbytečně spotřebovávaly zdroje (pokud neexistuje nastavení Keep-Alive pro připojení HTTP). A zajistili jsme, že skutečná IP adresa klienta je přesměrována až na webový server pro dohledatelnost (pomocí parametru „option forwardfor“). Podrobné definice konfiguračních parametrů HAProxy naleznete v dokumentaci HAProxy je třeba konzultovat.
Jednoduché oboustranné vyvažování zátěže
Zpočátku jsme zřídili pouze jednu webovou stránku (skládající se z výše zmíněné jednoduché aplikace PHP Greeter), která bude vyvažovat zátěž naší instalací HAProxy. Již jsme nastavili dva webové servery a jeden load-balancer (HAProxy), jak je uvedeno na E2E Cloud Dashboard.
Obrázek 5:Uzly webového serveru a nástroje pro vyrovnávání zatížení
Nejprve navážeme HAProxy na vhodnou IP adresu a port (obvykle port 80 pro režim http) na našem uzlu VLB . Aby bylo možné přijímat požadavky klientů, musí být adresa IP směřována zvenčí. To nás vede k definování ‚frontendu‘ s názvem ‚httptraffic‘, jako je následující (v /etc/haproxy/haproxy.cfg). Zde toto frontend ve výchozím nastavení vyrovnává zatížení všech požadavků klienta na backend s názvem „site“.
Obrázek 6:Konfigurace frontendu pro HAProxy
Je zřejmé, že musíme definovat „backend“ s názvem „site“. Mělo by se skládat z IP adres webových serverů, na které se mají směrovat požadavky (ačkoli bychom měli používat interní / soukromé adresy pro tento účel). A my specifikujeme politiku vyrovnávání zátěže jako „round-robin“. HAProxy nám také umožňuje povolit pravidelnou kontrolu zdraví backendových uzlů pomocí parametru „check“.
Obrázek 7:Konfigurace backendu pro HAProxy
V tuto chvíli musíme restartovat syslog a HAProxy na uzlu load-balanceru:
- systemctl restartujte rsyslog
- systemctl restart hapoxy
Nastavení brány firewall
Než přistoupíme k webové aplikaci přes HAProxy, musíme otevřít port 80 (pro HAProxy nastavené pro režim http) na uzlu virtuálního vyvažování zátěže a port UDP 514 pro syslog. Na CentOS to vyžaduje nastavení iptables vhodně:
- iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
- iptables -A INPUT -i eth0 -p udp –dport 514 -j ACCEPT
- iptables -A INPUT -i eth0 -p tcp –dport 80 -m stav –stav NEW,ESTABLISHED -j ACCEPT
- systemctl restart iptables
Testování
V této fázi můžeme skutečně otestovat funkci vyrovnávání zátěže a některá nastavení konfigurace (včetně protokolování a shromažďování statistik) zmíněná v předchozí části.
Abychom detekovali požadavky přicházející na HAProxy, spustíme v uzlu load-balancer následující příkaz:
- tail -f /var/log/haproxy.log
Pro HAProxy se tento soubor protokolu (/var/log/haproxy.log) aktualizuje prostřednictvím syslog.
Podobně můžeme zkontrolovat přístupové protokoly na každém uzlu webového serveru, abychom mohli celý požadavek sledovat.
- tail -f /var/log/apache2/access.log
Nyní přistupujeme k jednoduché aplikaci PHP Greeter ze dvou různých strojů . Na každém klientském počítači můžeme nasměrovat prohlížeč na URL:
http://
Měli bychom najít aktualizace protokolů HAProxy. (To také ověřuje, že naše konfigurace syslog funguje.)
Obrázek 8:Protokoly HAProxy (vyrovnávání zátěže mezi jednotlivými uživateli)
Jeden z požadavků je obsluhován uzlem websrv1, zatímco druhý je obsluhován uzlem websrv2. To je zřejmé z přístupových protokolů na každém webovém serveru a z těsné shody časových razítek. IP adresy klientů jsou také protokolovány v HAProxy a v protokolech webového serveru.
Obrázek 9:Protokoly přístupu z uzlu:websrv1
Obrázek 10:Protokoly přístupu z uzlu:websrv2
Následující pozdravy se zobrazí v prohlížeči na každém klientský počítač:
Obrázek 11:Zobrazení prohlížeče
Statistika vyvažování zátěže :Konečně se můžeme podívat na statistiky HAProxy nasměrováním našeho prohlížeče na následující adresu URL (nakonfigurovanou v části ‚výchozí‘):
http://
Obrázek 12:Statistika nástroje pro vyrovnávání zatížení
Závěr a další kroky
Zatím jsme úspěšně nastavili load balancing na E2E cloudu pomocí HAProxy. V další (a závěrečné) části tohoto blogu posuneme tuto konfiguraci na další úroveň tím, že umožníme trvalé relace a bezpečný přístup k webu a také vytvoříme větší web s více aplikacemi. Tyto kroky nás přivedou blíže k produkčnímu nasazení.
Krok 2 zobrazíte kliknutím na odkaz níže:
Použití HAProxy pro vyrovnávání zátěže na cloudu E2E:Lepkavost a zabezpečení relace