Haproxy je oblíbený pro vyvažování zátěže kvůli jeho účinnosti, spolehlivosti a nízké kapacitě paměti a CPU. Vyvažování zátěže je běžné řešení pro horizontální distribuci webových aplikací mezi více hostitelů a zároveň poskytuje uživatelům jeden přístupový bod ke službě.
Je k dispozici pro instalaci na hlavních distribucích Linuxu. V této příručce se naučíme, jak nainstalovat a nakonfigurovat nástroj pro vyrovnávání zatížení HAProxy na Rocky Linux 8. Tato příručka funguje také na jiných distribucích založených na RHEL 8, jako je Alma Linux a Oracle Linux.
Zkontrolujte také:
- Jak nainstalovat a nakonfigurovat nástroj pro vyrovnávání zatížení HAProxy v Debianu 11
- Jak nainstalovat a nakonfigurovat nástroj pro vyrovnávání zatížení HAProxy na Ubuntu 20.04
HAProxy Algoritmy pro vyvažování zátěže
Algoritmy vyvažování se používají k rozhodnutí, na který server na backendu se každé spojení přenese. Některé z užitečných možností zahrnují následující:
- Roundrobin: Každý server se používá v tazích podle své váhy. Jedná se o nejplynulejší a nejspravedlivější algoritmus, kdy čas zpracování serverů zůstává rovnoměrně rozložen. Tento algoritmus je dynamický, což umožňuje upravovat váhy serveru za chodu.
- Leastconn: Je vybrán server s nejnižším počtem připojení. Roundrobin se provádí mezi servery se stejnou zátěží. Použití tohoto algoritmu se doporučuje pro dlouhé relace, jako je LDAP, SQL, TSE atd., ale není příliš vhodný pro krátké relace, jako je HTTP.
- První: První server s dostupnými připojovacími sloty přijme připojení. Servery jsou vybírány od nejnižšího číselného identifikátoru po nejvyšší, což je výchozí poloha serveru na farmě. Jakmile server dosáhne své hodnoty maxconn, použije se další server.
- Zdroj: Zdrojová IP adresa je hašována a vydělena celkovou váhou běžících serverů, aby se určilo, který server přijme požadavek. Tímto způsobem se stejná IP adresa klienta vždy dostane na stejný server, zatímco servery zůstanou stejné.
Obsah
- Zajištění aktuálnosti serveru
- Instalace HAProxy
- Konfigurace HAProxy jako loadbalanceru
- Testování nastavení
1. Zajištění aktuálnosti serveru
Než budete pokračovat, ujistěte se, že je server aktuální. K dosažení tohoto cíle použijte tento příkaz:
sudo dnf -y update
2. Instalace Haproxy
Balíček poskytující haproxy je dostupný ve výchozím Rocky Linux Repos. Nainstalujte pomocí tohoto příkazu:
sudo dnf install -y haproxy
Potvrďte instalaci tímto příkazem:
$ rpm -qi haproxy
Name : haproxy
Version : 1.8.27
Release : 2.el8
Architecture: x86_64
Install Date: Tue 11 Jan 2022 09:39:45 PM UTC
Group : System Environment/Daemons
Size : 4446585
License : GPLv2+
Signature : RSA/SHA256, Wed 19 May 2021 05:13:23 AM UTC, Key ID 15af5dac6d745a60
Source RPM : haproxy-1.8.27-2.el8.src.rpm
Build Date : Wed 19 May 2021 02:37:50 AM UTC
Build Host : ord1-prod-x86build004.svc.aws.rockylinux.org
Relocations : (not relocatable)
Packager : [email protected]
Vendor : Rocky
URL : http://www.haproxy.org/
Summary : HAProxy reverse proxy for high availability environments
Description :
HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
availability environments. Indeed, it can:
- route HTTP requests depending on statically assigned cookies
- spread load among several servers while assuring server persistence
through the use of HTTP cookies
- switch to backup servers in the event a main one fails
- accept connections to special ports dedicated to service monitoring
- stop accepting connections without breaking existing ones
- add, modify, and delete HTTP headers in both directions
- block requests matching particular patterns
- report detailed status to authenticated users from a URI
intercepted from the application
Číslo nainstalované verze můžete zkontrolovat pomocí následujícího příkazu.
haproxy -v
Toto je výstup na mém počítači
$ haproxy -v
HA-Proxy version 1.8.27-493ce0b 2020/11/06
Copyright 2000-2020 Willy Tarreau <[email protected]>
Poté je instalace dokončena. Pokračujte níže s pokyny, jak nakonfigurovat nástroj pro vyrovnávání zatížení pro přesměrování požadavků na vaše webové servery.
3. Konfigurace HAProxy jako nástroje pro vyrovnávání zátěže
Abychom nakonfigurovali HAProxy jako load balancer, musíme mu sdělit, na jaký druh připojení by měl naslouchat a kam by měla být připojení přenášena. To se provádí vytvořením konfiguračního souboru /etc/haproxy/haproxy.cfg
s definujícími nastaveními.
Vyrovnávání zátěže na vrstvě 4
Při instalaci bude mít HAProxy již šablonu pro konfiguraci nástroje pro vyrovnávání zatížení. Otevřete konfigurační soubor pomocí textového editoru, já používám vim:
sudo vim /etc/haproxy/haproxy.cfg
Přidejte tento obsah ke konfiguraci naslouchacího rozhraní a backendového rozhraní, kde bude provoz vyrovnán zatížení.
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server <server1 name> <private IP 1>:80 check
server <server2 name> <private IP 2>:80 check
Nahraďte
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server web_server_1 10.70.5.41:80 check
server web_server_2 10.70.5.187:80 check
Výše uvedené definuje nástroj pro vyrovnávání zatížení vrstvy 4 s názvem front-endu http_front poslouchajícím číslo portu 80, který pak přesměruje provoz do výchozího backendu s názvem http_back. Dodatečné URI statistik /haproxy?stats
povolí stránku statistik na zadané adrese.
Vyrovnávání zátěže na vrstvě 7
Můžeme také nakonfigurovat nástroj pro vyrovnávání zatížení, aby fungoval na vrstvě 7. To je užitečné, když jsou části vaší webové aplikace umístěny na různých hostitelích. Toho lze dosáhnout podmíněním přenosu připojení například pomocí adresy URL.
Otevřete konfigurační soubor pomocí textového editoru, já používám vim:
sudo vim /etc/haproxy/haproxy.cfg
Poté přidejte tyto konfigurace
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 name> <private IP>:80 check
server <server name> <private IP>:80 check
backend blog_back
server <server name> <private IP>:80 check
server <server name> <private IP>:80 check
Rozhraní frontend deklaruje pravidlo ACL s názvem url_blog, které platí pro všechna připojení s cestami začínajícími na /blog. Use_backend definuje, že připojení vyhovující podmínce url_blog by měla obsluhovat backend s názvem blog_back, zatímco všechny ostatní požadavky zpracovává výchozí backend.
Na zadní straně konfigurace nastaví dvě skupiny serverů, http_back jako dříve a novou nazvanou blog_back , které se servery konkrétně připojují k example.com/blog.
Po provedení konfigurací uložte soubor a restartujte HAProxy dalším příkazem.
sudo systemctl restart haproxy
Pokud se při spuštění zobrazí nějaké chyby nebo varování, zkontrolujte konfiguraci, zda neobsahuje překlepy, a poté zkuste restartovat znovu.
Konfigurace SSL
Pokud máte soubor soukromého klíče a soubor certifikátu, které chcete použít s HAProxy, zkombinujte je s tímto příkazem.
cat citizix.fullchain.pem citizix.key > citizix.pem
Poté nakonfigurujte HAProxy tak, aby na frontendu používala certifikát SSL.
frontend http_front
bind *:80
bind *:443 ssl crt /etc/letsencrypt/live/apps.citizix.com/citizix.pem
4. Testování nastavení
S nakonfigurovaným a spuštěným HAProxy otevřete veřejnou IP svého serveru pro vyrovnávání zatížení ve webovém prohlížeči a zkontrolujte, zda jste správně připojeni k backendu. Parametr stats uri v konfiguraci aktivuje stránku statistik na definované adrese.
http://<Haproxy public IP>/haproxy?stats
Když načtete stránku statistik a všechny vaše servery se zobrazí zeleně, vaše konfigurace byla úspěšná!
Stránka statistik obsahuje užitečné informace, které vám pomohou sledovat vaše webové hostitele, včetně časů vzestupů a výpadků a počtu relací. Pokud je server uveden červeně, zkontrolujte, zda je server zapnutý a zda na něj můžete odeslat příkaz ping ze stroje pro vyrovnávání zatížení.
V případě, že váš nástroj pro vyrovnávání zatížení neodpovídá, zkontrolujte, zda připojení HTTP neblokuje brána firewall. Pomocí níže uvedeného příkazu také potvrďte, že HAProxy běží.
sudo systemctl status haproxy
5. Ochrana stránky statistik heslem
Mít stránku statistik jednoduše uvedenou na předním konci je však veřejně přístupné pro kohokoli, což nemusí být tak dobrý nápad. Místo toho jej můžete nastavit na vlastní číslo portu přidáním příkladu níže na konec souboru haproxy.cfg
soubor. 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 naslouchání odstraňte ze skupiny frontend starý odkaz na uri statistik. Po dokončení uložte soubor a znovu restartujte HAProxy.
sudo systemctl restart haproxy
Poté znovu otevřete nástroj pro vyrovnávání zatížení s novým číslem portu a přihlaste se pomocí uživatelského jména a hesla, které jste nastavili v konfiguračním souboru.
http://<load balancer public IP>:8181
Zkontrolujte, zda vaše servery stále hlásí zelenou barvu, a poté ve webovém prohlížeči otevřete pouze IP vyrovnávání zátěže bez čísel portů.
http://<load balancer public IP>/
Pokud mají vaše backendové servery alespoň mírně odlišné vstupní stránky, všimnete si, že pokaždé, když stránku znovu načtete, dostanete odpověď od jiného hostitele.
Závěry
To je ono! V této příručce jsme se naučili, jak nainstalovat a nakonfigurovat HAProxy, aby provoz vyrovnal zatížení. To zvýší výkon a dostupnost vaší webové aplikace.