Instalujeme vyrovnávač zátěže HAProxy na CentOS

Překlad článku byl vyhotoven před začátkem kurzu «Administrátor Linux. Virtualizace a clustering»

Instalujeme vyrovnávač zátěže HAProxy na CentOS

Zatížení vyvažování je běžné řešení pro horizontální škálování webových aplikací napříč několika hostiteli s poskytováním jediné přístupové špičky pro uživatele k službě. Dále klientský dotaz vcházel do HAProxy, které řešilo následující úkoly: je jedním z nejpopulárnějších programů pro vyvažování zátěže s otevřeným zdrojovým kódem, který také zajišťuje vysokou dostupnost a funkčnost proxy.

HAProxy usiluje o optimalizaci využití zdrojů, maximalizaci propustnosti, minimalizaci doby odezvy a vyvarování se přetížení jednotlivého zdroje. Může být nainstalována na mnoha distribucích Linuxu, jako je CentOS 8, na které se v tomto průvodci zaměříme, a také v systémech Debian 8 a Ubuntu 16.

Instalujeme vyrovnávač zátěže HAProxy na CentOS

HAProxy je zvláště vhodná pro webové stránky s velmi vysokým provozem, a proto se často používá ke zvýšení spolehlivosti a výkonu konfigurací webových služeb s několika servery. Tento průvodce popisuje kroky k nastavení HAProxy jako vyvažovače zátěže na cloudovém hostiteli CentOS 8, který poté směruje provoz na vaše webové servery.

Jako nutnost pro dosažení nejlepších výsledků byste měli mít alespoň dva webové servery a server pro vyvažování zátěže. Na webových serverech by měla být spuštěna alespoň základní webová služba, jako je nginx nebo httpd, aby bylo možné zkontrolovat vyvažování zátěže mezi nimi.

Instalace HAProxy na CentOS 8

Vzhledem k tomu, že HAProxy je rychle se vyvíjející aplikace s otevřeným zdrojovým kódem, distribuce, kterou máte k dispozici ve standardních repozitářích CentOS, nemusí být nejnovější verzí. Abyste zjistili aktuální verzi, proveďte následující příkaz:

sudo yum info haproxy

HAProxy vždy nabízí na výběr tři stabilní verze: dvě poslední podporované verze a třetí, starší, která stále dostává kritická aktualizace. Vždy se můžete podívat na nejnovější stabilní verzi uvedenou na webu HAProxy a poté se rozhodnout, kterou verzi chcete použít.

V této příručce budeme instalovat nejnovější stabilní verzi 2.0, která zatím nebyla dostupná ve standardních repozitářích v době psaní příručky. Budete ji muset nainstalovat z primárního zdroje. Nejprve si však zkontrolujte, zda máte splněny potřebné podmínky pro stažení a kompilaci programu.

sudo yum install gcc pcre-devel tar make -y

Stáhněte zdrojový kód pomocí níže uvedeného příkazu. Můžete zkontrolovat, zda je dostupná novější verze na stránce pro stahování HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Po dokončení stahování rozbalte soubory pomocí následujícího příkazu:

tar xzvf ~/haproxy.tar.gz -C ~/

Přejděte do rozbaleného adresáře se zdrojovými kódy:

cd ~/haproxy-2.0.7

Poté zkompilujte program pro váš systém:

make TARGET=linux-glibc

A nakonec nainstalujte samotnou HAProxy:

sudo make install

Nyní je HAProxy nainstalována, ale její provoz vyžaduje další úpravy. Pokračujme v konfiguraci softwaru a služeb níže.

Konfigurace HAProxy pro váš server

Nyní přidejte následující adresáře a soubor se statistikami pro záznamy HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Vytvořte symbolický odkaz pro binární soubory, abyste mohli spouštět příkazy HAProxy jako běžný uživatel:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Pokud chcete přidat proxy server do systému jako službu, zkopírujte soubor haproxy.init z examples do svého adresáře /etc/init.d. Upravte oprávnění k souboru, aby byl skript spustitelný, a poté restartujte démon 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 také povolit službě automatické spuštění při startu systému:

sudo chkconfig haproxy on

Pro pohodlí se také doporučuje přidat nového uživatele pro spuštění HAProxy:

sudo useradd -r haproxy

Poté můžete znovu zkontrolovat číslo nainstalované verze pomocí následujícího příkazu:

haproxy -v
HA-Proxy verze 2.0.7 2019/09/27 - https://haproxy.org/

V našem případě by měla být verze 2.0.7, jak je uvedeno v příkladu výstupu výše.

Nakonec je firewall v CentOS 8 ve výchozím nastavení poměrně restriktivní pro tento projekt. Použijte následující příkazy pro povolení potřebných služeb a restartování firewallu:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Nastavení vyrovnávače zátěže

Nastavení HAProxy je poměrně jednoduchý proces. V podstatě stačí říct HAProxy, jaká spojení má sledovat a kam je má přesměrovávat.

To se provádí vytvořením konfiguračního souboru /etc/haproxy/haproxy.cfg s určujícími nastaveními. Můžete si přečíst o parametrech konfigurace HAProxy na stránce dokumentace, pokud se chcete dozvědět více.

Vyrovnávání zátěže na transportní úrovni (layer 4)

Začněme základním nastavením. Vytvořte nový konfigurační soubor, například pomocí vi s následujícím příkazem:

sudo vi /etc/haproxy/haproxy.cfg

Přidejte do souboru následující sekce. Nahradíte server_name tím, co by mělo odkazovat na vaše servery na stránce statistiky, a private_ip — privátními IP adresami serverů, na které chcete směrovat webový provoz. Můžete zkontrolovat privátní IP adresy v ovládacím panelu UpCloud a na kartě Private network v nabídce Síť.

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

To definuje vyrovnávač zátěže na transportní úrovni (layer 4) s externím názvem http_front, který poslouchá na portu 80, a poté směruje provoz na výchozí backend s názvem http_back. Další statistiky /haproxy?stats připojí stránku statistik na dané adrese.

Různé algoritmy vyrovnávání zátěže.

Určení serverů v sekci backendu umožňuje HAProxy používat tyto servery pro vyrovnávání zátěže podle algoritmu round-robin, kdykoli je to možné.

Algoritmy vyrovnávání zátěže se používají k tomu, aby určili, na který server v backendu se každé spojení přenáší. Zde jsou některé užitečné možnosti:

  • Roundrobin: každý server se používá střídavě podle své hmotnosti. To je nejplynulejší a nejférovější algoritmus, když je čas zpracování serverů rovnoměrně rozložen. Tento algoritmus je dynamický a umožňuje regulaci hmotnosti serveru za běhu.
  • Leastconn: server s nejmenším počtem připojení je vybrán. Cyklus probíhá mezi servery se stejnou zátěží. Použití tohoto algoritmu se doporučuje pro dlouhé relace, jako jsou LDAP, SQL, TSE atd., ale příliš se nehodí pro krátké relace, jako je HTTP.
  • První: první server s dostupnými sloty pro připojení získává spojení. Servery jsou vybírány od nejnižšího číselného identifikátoru po nejvyšší, což defaultně odpovídá postavení serveru ve farmě. Jakmile server dosáhne hodnoty maxconn, použije se další server.
  • Zdroj: IP adresa zdroje je hashována a rozdělena na celkovou váhu spuštěných serverů, aby se určil, který server bude přijímat žádost. Takto bude stejná IP adresa klienta vždy přidělena stejnému serveru, zatímco servery zůstávají neměnné.

Nastavení vyvažování zátěže na aplikační úrovni (layer 7)

Další dostupnou možností je nastavit vyvažovač zátěže pro provoz na aplikační úrovni (layer 7), což je užitečné, když jsou části vaší webové aplikace umístěny na různých hostitelích. Toho lze dosáhnout regulací předání spojení, například podle URL.

Otevřete konfigurační soubor HAProxy pomocí textového editoru:

sudo vi /etc/haproxy/haproxy.cfg

Poté nakonfigurujte segmenty frontend a backend podle následujícího příkladu:

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 vyhlašuje pravidlo ACL s názvem url_blog, které se aplikuje na všechna připojení s cestami začínajícími na /blog. Use_backend určuje, že spojení odpovídající podmínce url_blog by měla obsluhovat backend s názvem blog_back, zatímco všechny ostatní požadavky jsou zpracovány defaultním backendem.

Na straně backendu konfigurace vytváří dvě skupiny serverů: http_back, jak bylo dříve, a novou, nazvanou blog_back, která obsluhuje spojení s example.com/blog.

Po změně nastavení uložte soubor a restartujte HAProxy pomocí následujícího příkazu:

sudo systemctl restart haproxy

Pokud se při spuštění objeví varování nebo chybová hlášení, zkontrolujte konfiguraci a ujistěte se, že jste vytvořili všechny potřebné soubory a složky, a poté zkuste znovu restartovat.

Testování nastavení

Jakmile je HAProxy nakonfigurováno a spuštěno, otevřete veřejnou IP adresu serveru vyrovnávače zátěže v prohlížeči a zkontrolujte, zda se správně připojujete k backendu. Parametr stats uri v konfiguraci vytváří stránku statistik na zadané adrese.

http://load_balancer_public_ip/haproxy?stats

Když načtete stránku statistik, pokud se všechny vaše servery zobrazují zeleně, nastavení proběhlo úspěšně!

Instalujeme vyrovnávač zátěže HAProxy na CentOS

Stránka statistik obsahuje užitečné informace pro sledování vašich webových hostitelů, včetně času provozu/výpadku a počtu relací. Pokud je server označen červeně, ujistěte se, že je server zapnutý a že ho můžete pingnout z vyrovnávače zátěže.

Pokud váš vyrovnávač zátěže neodpovídá, ujistěte se, že HTTP spojení nejsou blokována firewallem. Také se ujistěte, že HAProxy běží pomocí následujícího příkazu:

sudo systemctl status haproxy

Ochrana stránky statistik pomocí hesla

Pokud je však stránka statistik jednoduše uvedena na frontendu, je otevřena pro veřejné prohlížení, což může být špatný nápad. Místo toho jí můžete přidělit vlastní číslo portu přidáním následujícího příkladu na konec vašeho souboru haproxy.cfg. Nahraďte uživatelské jméno a heslo něčím bezpečným:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Po přidání nové skupiny posluchačů odstraňte starý odkaz na stats uri z frontové skupiny. Až skončíte, uložte soubor a restartujte HAProxy.

sudo systemctl restart haproxy

Poté znovu otevřete vyrovnávač zátěže s novým číslem portu a přihlaste se jménem uživatele a heslem, které jste uvedli v konfiguračním souboru.

http://load_balancer_public_ip:8181

Ujistěte se, že všechny vaše servery se stále zobrazují zeleně, a poté otevřete pouze IP vyrovnávače zátěže bez jakýchkoli čísel portů ve vašem prohlížeči.

http://load_balancer_public_ip/

Pokud máte na svých interních serverech nějakou rozmanitost cílových stránek, všimnete si, že pokaždé, když stránku znovu načtete, dostanete odpověď od jiného hostitele. Můžete vyzkoušet různé algoritmy vyvažování v sekci konfigurace nebo se seznámit s úplnou dokumentací.

Závěr: Vyvažovač zatížení HAProxy

Blahopřejeme k úspěšné konfiguraci vyvažovače zatížení HAProxy! I s základním nastavením vyvažování zatížení můžete výrazně zvýšit výkon a dostupnost vaší webové aplikace. Tato příručka je pouze úvodem do vyvažování zatížení pomocí HAProxy, která je schopna mnohem víc, než co je možné popsat v krátkém nastavení. Doporučujeme experimentovat s různými konfiguracemi pomocí rozsáhlé dokumentace, dostupné pro HAProxy, a poté začít s plánováním vyvažování zatížení pro vaše produkční prostředí.

Použitím několika hostitelů k ochraně vaší webové služby pomocí záložního výkonu může sám vyvažovač zatížení stále představovat jediné místo selhání. Můžete ještě více zvýšit vysokou dostupnost nastavením plovoucího IP mezi několika vyvažovači zatížení. O tom se můžete dozvědět více v našem článku o plovoucích IP adresách na UpCloud.

Další informace o kurzu «Administrátor Linux. Virtualizace a clustering»***

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster