Co je HAProxy?
HAProxy (High Availability Proxy) je open-source load-balancer, který dokáže vyvažovat zatížení libovolné TCP služby. HAProxy je bezplatné, velmi rychlé a spolehlivé řešení, které nabízí vyrovnávání zátěže, vysokou dostupnost a proxy pro aplikace založené na TCP a HTTP. Je zvláště vhodný pro webové stránky s velmi vysokou návštěvností a pohání mnoho z nejnavštěvovanějších na světě.
Od své existence se stal de-facto standardním open-source load-balancerem. I když se nepropaguje, ale je široce používán. Níže je základní schéma toho, jak nastavení vypadá:
Instalace HAProxy
Používám Ubuntu 14.04 a nainstaluji jej pomocí:
apt-get install haproxy
Verzi můžete zkontrolovat:
haproxy -v
Musíme povolit spuštění HAProxy init skriptem /etc/default/haproxy. Nastavte možnost POVOLENO na 1 jako:
ENABLED=1
Chcete-li ověřit, zda je tato změna provedena správně, spusťte iniciační skript HAProxy bez jakýchkoli parametrů. Měli byste vidět následující:
$ service haproxy
reload restart start status stop
HAProxy je nyní nainstalován. Nyní vytvoříme nastavení, ve kterém máme 2 (dvě) instance webového serveru Apache a 1 (jednu) instanci HAProxy. Níže jsou informace o nastavení:
Budeme používat tři systémy, vytvořené virtuálně prostřednictvím VirtualBoxu:
Instance 1 – Load Balancer
Název hostitele:haproxy
OS:Ubuntu
Soukromá IP:192.168.205.15
Instance 2 – Web Server 1
Název hostitele:webser01
OS:Ubuntu s LAMP
Soukromá IP:192.168.205.16
Instance 2 – Web Server 2
Název hostitele:webserver02
OS:Ubuntu s LAMP
Soukromá IP:192.168.205.17
Zde je schéma, jak vypadá nastavení:
Nyní nakonfigurujeme HAProxy.
Konfigurace HAProxy
Zálohujte původní soubor jeho přejmenováním:
mv /etc/haproxy/haproxy.cfg{,.original}
Vytvoříme si vlastní soubor haproxy.cfg. Pomocí svého oblíbeného textového editoru vytvořte soubor /etc/haproxy/haproxy.cfg jako:
global log /dev/log local0 log 127.0.0.1 local1 notification maxconn 4096 user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull retries 3 option redispatch0 maxconn 2000 contimeout 5000 clitimeout sfartimeout 0.0listen webtimeout 5000. http statistiky povolit statistiky uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check
Vysvětlení:
globální log /dev/log local0 log 127.0.0.1 local1 upozornění maxconn 4096 user haproxy group haproxy démon
Direktiva log zmiňuje server syslog, na který budou zasílány zprávy protokolu.
Direktiva maxconn určuje počet souběžných připojení na front-endu. Výchozí hodnota je 2000 a měla by být vyladěna podle konfigurace vašeho systému.
Direktivy user a group změní proces HAProxy na zadaného uživatele/skupinu. Ty by se neměly měnit.
výchozí log globální režim http volba httplog volba dontlognull opakování 3 volba redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000
Výše uvedená část má výchozí hodnoty. Možnost redispatch umožňuje redistribuci relace v případě selhání připojení. Pokud tedy dojde k výpadku instance webového serveru, bude setrvání relace přepsáno.
Direktiva retries nastavuje počet opakování, která se mají provést na instanci webového serveru po selhání připojení.
Hodnoty, které je třeba upravit, jsou různé direktivy timeoutu. Volba contimeout určuje maximální dobu čekání na úspěšný pokus o připojení k instanci webového serveru.
clitimeout a srvtimeout se použijí, když se očekává, že klient nebo server potvrdí nebo odešle data během procesu TCP. HAProxy doporučuje nastavit časové limity klienta a serveru na stejnou hodnotu.
Výše uvedený blok obsahuje konfiguraci pro frontend i backend. Konfigurujeme HAProxy pro naslouchání na portu 80 pro webfarmu, což je pouze název pro identifikaci aplikace.
Direktivy statistik aktivují stránku statistik připojení. Tuto stránku lze zobrazit s adresou URL uvedenou ve statistice uri, takže v tomto případě je to http://192.168.205.15/haproxy?stats zde si můžete prohlédnout ukázku této stránky.
Direktiva balance specifikuje vyrovnávání zátěže algoritmus k použití. Dostupné možnosti algoritmu jsou:
- Round Robin (roundrobin),
- Statický Round Robin (static-rr),
- Nejméně připojení (leastconn),
- Zdroj (zdroj),
- URI (uri) a
- Parametr adresy URL (url_param).
Informace o každém algoritmu lze získat z oficiální dokumentace.
Direktiva serveru deklaruje backend server, syntaxe je:
server[:port] [param*]
Jméno, které zde zmíníme, se objeví v protokolech a upozorněních. Tato směrnice podporuje několik dalších parametrů a v tomto článku použijeme parametr kontroly. Možnost kontroly umožňuje kontroly stavu instance webového serveru, jinak je instance webového serveru ?vždy považována za dostupnou.
Po dokončení konfigurace spusťte službu HAProxy:
spuštění haproxy služby sudo
Testování vyrovnávání zátěže a převzetí služeb při selhání
Připojíme název serveru do výchozího souboru index.html, který se standardně nachází na adrese /var/www/index.html
Na Instance 2 – Web Server 1 (webserver01 s IP-192.168.205.16) připojte pod řádek jako:
sudo sh -c "echo \Název hostitele:webový server01 \(192.168.205.16\)\<\/h1\>>> /var/www/index.html"
Na Instance 3 – Web Server 2 (webserver02 s IP-192.168.205.17) připojte pod řádek jako:
sudo sh -c "echo \Název hostitele:webový server02 \(192.168.205.17\)\<\/h1\>>> /var/www/index.html"
Nyní otevřete webový prohlížeč na místním počítači a procházejte haproxy IP, tj. http://192.168.205.15
Pokaždé, když kartu obnovíte, uvidíte, že zátěž je distribuována na každý webový server. Níže je snímek obrazovky mého prohlížeče:
Poprvé, když navštívím http://192.168.205.15, dostanu:
A podruhé, tj. když stránku obnovím, dostanu:
Statistiky haproxy můžete také zkontrolovat na adrese http://192.168.205.15/haproxy?stats
S tímto nastavením můžete udělat více. Některé nápady zahrnují:
- přepněte jeden nebo oba webové servery do režimu offline a otestujte, co se stane, když přistoupíte k HAProxy
- nakonfigurujte HAProxy tak, aby poskytovala vlastní stránku údržby
- nakonfigurujte webové rozhraní tak, abyste mohli vizuálně sledovat statistiky HAProxy
- změňte plánovač na něco jiného než cyklické
- nakonfigurujte priority/váhy pro konkrétní servery
To je vše!