Vyhledávání na webu

Jak nastavit HAProxy jako Load Balancer pro Nginx na CentOS 8


Pro zajištění maximální dostupnosti webových aplikací, škálovatelnosti a vysokého výkonu je nyní běžné implementovat technologie, které zavádějí redundanci, jako je klastrování serverů a vyrovnávání zátěže. Například nastavením clusteru serverů, na kterých všechny běží stejné aplikace, a následným nasazením vyrovnávání zátěže před ně, aby distribuoval provoz.

HAProxy je open source, výkonný, vysoce výkonný, spolehlivý, bezpečný a široce používaný nástroj pro vyrovnávání zatížení TCP/HTTP, proxy server a terminátor SSL/TLS s vysokou dostupností. webové stránky s velmi vysokou návštěvností. Spolehlivě běží na operačních systémech Linux, Solaris, FreeBSD, OpenBSD a také AIX.

Tato příručka ukazuje, jak nastavit vyhrazený nástroj pro vyrovnávání zatížení s vysokou dostupností pomocí HAProxy v systému CentOS 8 pro řízení provozu v clusteru webových serverů NGINX. Také ukazuje, jak nakonfigurovat ukončení SSL/TLS v HAProxy.

Předpoklady:

Celkem 4 servery s minimální instalací CentOS 8.

Nastavení testovacího prostředí

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

Krok 1: Nastavení Nginx HTTP serveru na klientských počítačích

1. Přihlaste se do všech svých klientských počítačů CentOS 8 a nainstalujte webový server Nginx pomocí správce balíčků dnf, jak je znázorněno.

dnf install Nginx

2. Dále spusťte službu Nginx, prozatím jí povolte automatické spouštění při spouštění systému a ověřte, že je v provozu kontrolou jejího stavu pomocí systemctl příkazy (proveďte to na všech klientských počítačích).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Pokud je služba firewalld spuštěna na všech klientských počítačích (což můžete zkontrolovat spuštěním systemctl start firewalld), musíte přidat HTTP a HTTPSslužby v konfiguraci brány firewall, aby požadavky z nástroje pro vyrovnávání zatížení procházely přes bránu firewall na webové servery Nginx. Poté znovu načtěte službu firewalld, aby se nové změny projevily (proveďte to na všech klientských počítačích).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. Dále otevřete webový prohlížeč na místních počítačích a otestujte, zda instalace Nginx funguje správně. K navigaci použijte adresy IP klienta, jakmile uvidíte testovací stránku Nginx, znamená to, že webový server nainstalovaný na klientském počítači funguje správně.

5. Dále musíme na klientských počítačích vytvořit testovací stránky, které později použijeme k otestování nastavení HAProxy.

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

Krok 2: Instalace a konfigurace serveru HAProxy na CentOS 8

6. Nyní nainstalujte balíček HAProxy na server HAProxy spuštěním následujícího příkazu.

dnf install haproxy

7. Dále spusťte službu HAProxy, povolte její automatické spouštění při startu systému a ověřte její stav.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Nyní nakonfigurujeme HAProxy pomocí následujícího konfiguračního souboru.

vi /etc/haproxy/haproxy.cfg

Konfigurační soubor je rozdělen do čtyř hlavních částí.

  • globální nastavení – nastavuje parametry celého procesu.
  • defaults – tato sekce nastavuje výchozí parametry pro všechny ostatní sekce po její deklaraci.
  • frontend – tato část popisuje sadu naslouchacích soketů přijímajících klientská připojení.
  • Backend – tato část popisuje sadu serverů, ke kterým se proxy připojí, aby předávala příchozí spojení.

Chcete-li porozumět možnostem v části globální nastavení a výchozí nastavení, přečtěte si dokumentaci HAProxy (odkaz na konci článku). V této příručce použijeme výchozí hodnoty.

Nastavení protokolování HAProxy

9. HAProxy po nasazení bude hrát významnou roli ve vaší IT infrastruktuře, takže konfigurace protokolování je základním požadavkem; to vám umožní získat přehled o každém připojení k vašim backendovým webovým serverům.

Parametr protokolu (zvýrazněný na následujícím snímku obrazovky) deklaruje globální server Syslog (jako je výchozí v systému CentOS rsyslog), který bude přijímat zprávy protokolu. Zde lze deklarovat více než jeden server.

Výchozí konfigurace ukazuje na localhost (127.0.0.1) a local2 je výchozí kód zařízení používaný k identifikaci zpráv protokolu HAProxy pod rsyslog.

10. Dále musíte serveru rsyslog sdělit, jak má přijímat a zpracovávat zprávy protokolu HAProxy. Otevřete konfigurační soubor rsyslog na /etc/rsyslog.conf nebo vytvořte nový soubor v adresáři /etc/rsyslog.d, například /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Zkopírujte a vložte následující konfiguraci pro sběr protokolu s UDP na výchozím portu 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Přidejte také tyto řádky, abyste dali pokyn rsyslog k zápisu do dvou samostatných souborů protokolu na základě závažnosti, kde local2 je kód zařízení definovaný v konfiguraci HAProxy výše.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Uložte soubor a zavřete jej. Poté restartujte službu rsyslog, abyste použili poslední změny.

systemctl restart rsyslog

Konfigurace HAProxy front-end a back-endů

12. V této části si ukážeme, jak nakonfigurovat front-end a back-end proxy. Vraťte se do konfiguračního souboru HAProxy a upravte výchozí části front-end a backend následovně. Nebudeme se pouštět do podrobného vysvětlování každého parametru, vždy se můžete obrátit na oficiální dokumentaci.

Následující konfigurace definuje sekci naslouchání, která se používá k zobrazování stránky HAProxy Stats. Parametr bind přiřadí posluchač k dané IP adrese (v tomto případě * pro všechny) a portu (9000 ).

Nastavení povolit statistiky povolí stránku statistik, která bude přístupná pomocí URI /stats (tj. http://server_ip:9000/stats) .

Nastavení autorizace statistik se používá k přidání základního ověření při přístupu na stránku (haproxy a Lostp@1ss nahraďte uživatelským jménem a heslem vašeho výběr).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. Další konfigurace definuje frontendovou sekci nazvanou TL (můžete si pojmenovat, jak se vám líbí). Parametr mode definuje režim, ve kterém HAProxy pracuje.

Parametr acl (Access Control List) se používá k rozhodování na základě obsahu extrahovaného z požadavku. V tomto příkladu je požadavek považován za prostý HTTP, pokud není podán přes SSL.

Potom se pomocí nastavení http-request set-header přidá k požadavku HTTP hlavička. To pomáhá informovat Nginx, že původní požadavek byl podán přes HTTP (nebo přes port 80).

Direktiva default_backend nebo use_backend definuje servery typu backend, v tomto případě na které odkazuje TL_web_servers.

Upozorňujeme, že HAProxy vrátí „chybu 503 nedostupná služba “, pokud požadavek není směrován pomocí use_backend nebo default_backend směrnice.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. Potom musíme definovat backendovou sekci, kde nastavení balance definuje, jak HAProxy vybírá back-end servery pro zpracování požadavku, pokud ne metoda persistence přepíše tento výběr.

Direktiva cookie umožňuje perzistenci založenou na souborech cookie, instruuje HAProxy, aby odeslala soubor cookie s názvem SERVERID klientovi a přiřadit jej k ID serveru, který poskytl počáteční odpověď.

Direktiva server se používá k definování nadřazených serverů ve formátu název_severu (např. websrv1), IP_serveru:port a možnosti.

Jednou z klíčových možností je check, která říká HAProxy, aby neustále kontrolovala dostupnost serveru a podávala zprávy na stránce statistik.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

Zakomentujte všechny ostatní části frontendu a backendu, jak je znázorněno na následujícím snímku obrazovky. Uložte soubor a zavřete jej.

15. Nyní restartujte službu HAProxy, abyste použili nové změny.

systemctl restart haproxy

16. Dále se ujistěte, že HTTP (port 80) a HTTPS (port 433) služby se otevírají ve firewallu pro přijímání požadavků klientů následovně. Také otevřete port 9000 ve bráně firewall pro přístup na stránku statistik a znovu načtěte nastavení brány firewall.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

Krok 3: Testování nastavení HAProxy a prohlížení statistik

17. Nyní je čas otestovat nastavení HAPrxoy. Na místním stolním počítači, ze kterého přistupujete ke všem serverům, přidejte do souboru /etc/hosts následující řádek, abychom mohli používat fiktivní doménu webu.

10.42.0.247  www.tecmint.lan

18. Poté otevřete prohlížeč a procházejte pomocí adresy serveru nebo domény webu.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. Pro přístup na stránku statistik HAProxy použijte následující adresu.

http://10.42.0.247:9000/stats

Poté použijte uživatelské jméno a heslo, které jste definovali v konfiguračním souboru HAProxy (viz parametr stats auth).

Po úspěšném přihlášení se dostanete na stránku statistik HAProxy, která vám ukáže metriky, které pokrývají stav vašich serverů, aktuální četnost požadavků, doby odezvy a mnoho dalšího.

Abychom demonstrovali, jak funguje stavová zpráva týkající se barevných kódů, umístili jsme jeden z back-endových serverů.

Krok 4: Konfigurace HTTPS v HAProxy pomocí certifikátu SSL s vlastním podpisem

20. V této poslední části si ukážeme, jak nakonfigurovat SSL/TLS pro zabezpečení veškeré komunikace mezi serverem HAProxy a klientem. HAProxy podporuje čtyři hlavní konfigurační režimy HTTPS, ale pro tuto příručku použijeme stahování SSL/TLS.

V režimu snižování zátěže SSL/TLS HAProxy dešifruje provoz na straně klienta a připojí se v čistém provozu k backendovým serverům.

Začneme vytvořením certifikátu a klíče, jak je znázorněno (odpovězte na otázky podle údajů o vaší společnosti během vytváření certifikátu, jak je zvýrazněno na snímku obrazovky).

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. Dále otevřete konfigurační soubor HAProxy (/etc/haproxy/haproxy.cfg) a upravte sekci front-end.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

Uložte soubor a zavřete jej.

22. Poté restartujte službu HAProxy, aby se nové změny uplatnily.

systemctl restart haproxy.service

23. Dále otevřete webový prohlížeč a zkuste web otevřít ještě jednou. Prohlížeč zobrazí chybu kvůli certifikátu s vlastním podpisem. Pokračujte kliknutím na Pokročilé.

To je prozatím vše! Každá webová aplikace má svůj vlastní soubor požadavků, musíte navrhnout a nakonfigurovat vyvažování zátěže tak, aby vyhovovalo vaší IT infrastruktuře a požadavkům aplikace.

Chcete-li získat více informací o některých možnostech konfigurace použitých v této příručce a obecně o tom, jak používat HAProxy, podívejte se na oficiální dokumentaci k vydání komunity HAProxy nebo dokumentaci k podnikové verzi HAProxy. Jakékoli dotazy nebo myšlenky můžete posílat prostřednictvím formuláře pro zpětnou vazbu níže.