GNU/Linux >> Znalost Linux >  >> Ubuntu

Použití HAProxy pro vyrovnávání zátěže na E2E Cloud:Nastavení zásad Round-Robin

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):

  1. aktualizace apt-get
  2. apt-get install apache2 # install web server
  3. apt-get install php libapache2-mod-php php-mcrypt # php a související balíčky
  4. systemctl povolí apache2 # povolí spuštění webového serveru při restartu systému
  5. systemctl restart apache2 # restart webového serveru
  6. 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:///greet.php , měl by se zobrazit tento pozdrav „Ahoj světe“. Můžeme nahradit IP adresu každého z uzlů websrv1 a websrv2.

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:

  1. yum install haproxy # install HAProxy
  2. systemctl povolí haproxy # povolí spuštění HAProxy při restartu systému
  3. systemctl restart haproxy # restart HAProxy
  4. 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.

  1. 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:

  1. 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:

  1. systemctl restartujte rsyslog
  2. 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ě:

  1. iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
  2. iptables -A INPUT -i eth0 -p udp –dport 514 -j ACCEPT
  3. iptables -A INPUT -i eth0 -p tcp –dport 80 -m stav –stav NEW,ESTABLISHED -j ACCEPT
  4. 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:

  1. 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.

  1. 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:///greet.php

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:///lb-stats

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


Ubuntu
  1. Nejčastější dotazy k mému účtu E2E

  2. Co jsou integrované cloudové servery Plesk na E2E Cloud

  3. Analýza případů pro a proti nastavení odkládacího prostoru na cloudových instancích

  1. Nejčastější dotazy k mému účtu E2E

  2. Nastavení sítě na Ubuntu 18.04 pro Xen Hypervisor

  3. Konfigurace nástroje pro vyrovnávání zatížení HAproxy v Ubuntu 14.04

  1. Co je vyvažování zátěže? Definice a jak to funguje

  2. Nakonfigurujte Apache pro ukončení SSL na Cloud Load Balancer

  3. nastavení sysctl pro vysokou zátěž a zabránění DDoS