Wyszukiwanie w witrynie

Jak skonfigurować HAProxy jako moduł równoważenia obciążenia dla Nginx na CentOS 8


Aby zapewnić maksymalną dostępność aplikacji internetowych, skalowalność i wysoką wydajność, obecnie powszechne jest wdrażanie technologii wprowadzających redundancję, takich jak klastry serwerów i równoważenie obciążenia. Na przykład skonfigurowanie klastra serwerów, na których działają te same aplikacje, a następnie wdrożenie przed nimi modułów równoważenia obciążenia w celu dystrybucji ruchu.

HAProxy to wydajny, wydajny, niezawodny, bezpieczny i szeroko stosowany moduł równoważenia obciążenia TCP/HTTP o otwartym kodzie źródłowym, serwer proxy i terminator SSL/TLS, stworzony dla witryny internetowe o bardzo dużym natężeniu ruchu. Działa niezawodnie na systemach Linux, Solaris, FreeBSD, OpenBSD, a także na systemach operacyjnych AIX.

W tym przewodniku pokazano, jak skonfigurować dedykowany moduł równoważenia obciążenia o wysokiej dostępności z HAProxy w CentOS 8 w celu kontrolowania ruchu w klastrze serwerów internetowych NGINX. Pokazuje także, jak skonfigurować zakończenie SSL/TLS w HAProxy.

Warunki wstępne:

Łącznie 4 serwery z minimalną instalacją CentOS 8.

Konfiguracja środowiska testowego

----------- 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: Konfigurowanie serwera HTTP Nginx na komputerach klienckich

1. Zaloguj się na wszystkich swoich komputerach klienckich CentOS 8 i zainstaluj serwer WWW Nginx, korzystając z menedżera pakietów dnf, jak pokazano.

dnf install Nginx

2. Następnie uruchom usługę Nginx, na razie włącz ją, aby automatycznie uruchamiała się przy starcie systemu i potwierdź, że jest uruchomiona i działa, sprawdzając jej status za pomocą polecenia systemctl polecenia (zrób to na wszystkich komputerach klienckich).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Ponadto, jeśli usługa firewalld działa na wszystkich komputerach klienckich (co możesz sprawdzić, uruchamiając systemctl start firewalld), musisz dodać HTTP i Usługi HTTPS w konfiguracji zapory sieciowej, aby umożliwić przechodzenie żądań z modułu równoważenia obciążenia przez zaporę do serwerów internetowych Nginx. Następnie załaduj ponownie usługę firewalld, aby zastosować nowe zmiany (zrób to na wszystkich komputerach klienckich).

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

4. Następnie otwórz przeglądarkę internetową na komputerach lokalnych i sprawdź, czy instalacja Nginx działa prawidłowo. Do nawigacji użyj adresu IP klienta. Gdy zobaczysz stronę testową Nginx, będzie to oznaczać, że serwer WWW zainstalowany na komputerze klienckim działa poprawnie.

5. Następnie musimy utworzyć strony testowe na komputerach klienckich, których użyjemy później do przetestowania konfiguracji 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: Instalacja i konfiguracja serwera HAProxy na CentOS 8

6. Teraz zainstaluj pakiet HAProxy na serwerze HAProxy, uruchamiając następujące polecenie.

dnf install haproxy

7. Następnie uruchom usługę HAProxy, włącz jej automatyczne uruchamianie przy starcie systemu i sprawdź jej status.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Teraz skonfigurujemy HAProxy przy użyciu następującego pliku konfiguracyjnego.

vi /etc/haproxy/haproxy.cfg

Plik konfiguracyjny jest podzielony na cztery główne sekcje.

  • ustawienia globalne – ustawia parametry całego procesu.
  • defaults – ta sekcja ustawia domyślne parametry dla wszystkich pozostałych sekcji po jej deklaracji.
  • frontend – w tej sekcji opisano zestaw gniazd nasłuchujących akceptujących połączenia klienckie.
  • Backend – ta sekcja opisuje zestaw serwerów, z którymi będzie się łączył serwer proxy w celu przekazywania połączeń przychodzących.

Aby zrozumieć opcje w ustawieniach globalnych i domyślnych, przeczytaj dokumentację HAProxy (link znajduje się na końcu artykułu). W tym przewodniku użyjemy ustawień domyślnych.

Konfigurowanie rejestrowania HAProxy

9. HAProxy po wdrożeniu będzie odgrywać znaczącą rolę w Twojej infrastrukturze IT, dlatego skonfigurowanie dla niej rejestrowania jest podstawowym wymaganiem; pozwala to uzyskać wgląd w każde połączenie z serwerami internetowymi zaplecza.

Parametr log (zaznaczony na poniższym zrzucie ekranu) deklaruje globalny serwer Syslog (taki jak rsyslog domyślny w CentOS), który będzie odbierał komunikaty dziennika. Można tutaj zadeklarować więcej niż jeden serwer.

Domyślna konfiguracja wskazuje na localhost (127.0.0.1), a local2 to domyślny kod funkcji używany do identyfikowania komunikatów dziennika HAProxy w obszarze rsyslog.

10. Następnie musisz poinformować serwer rsyslog, jak odbierać i przetwarzać komunikaty dziennika HAProxy. Otwórz plik konfiguracyjny rsyslog w lokalizacji /etc/rsyslog.conf lub utwórz nowy plik w katalogu /etc/rsyslog.d, na przykład /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Skopiuj i wklej poniższą konfigurację, aby zebrać dziennik z UDP na domyślnym porcie 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Dodaj także te linie, aby poinstruować rsyslog, aby zapisywał w dwóch oddzielnych plikach dziennika na podstawie ważności, gdzie local2 to kod funkcji zdefiniowany w powyższej konfiguracji HAProxy.

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

11. Zapisz plik i zamknij go. Następnie uruchom ponownie usługę rsyslog, aby zastosować ostatnie zmiany.

systemctl restart rsyslog

Konfigurowanie frontonu i backendu HAProxy

12. W tej sekcji pokażemy, jak skonfigurować serwery proxy front-end i back-end. Wróć do pliku konfiguracyjnego HAProxy i zmodyfikuj domyślne sekcje front-endu i backendu w następujący sposób. Nie będziemy wdawać się w szczegółowe wyjaśnienia każdego parametru, zawsze możesz odwołać się do oficjalnej dokumentacji.

Następująca konfiguracja definiuje sekcję słuchaj używaną do wyświetlania strony Statystyki HAProxy. Parametr bind przypisuje słuchacza do danego adresu IP (w tym przypadku * dla wszystkich) i portu (9000 ).

Ustawienie statystyk włącz włącza stronę statystyk, do której można uzyskać dostęp za pomocą URI /stats (tj. http://server_ip:9000/stats) .

Ustawienie statystyk auth służy do dodania podstawowego uwierzytelniania podczas uzyskiwania dostępu do strony (zamień haproxy i Lostp@1ss na nazwę użytkownika i hasło swojego wybór).

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

13. Następna konfiguracja definiuje sekcję frontendową o nazwie TL (możesz nadać dowolną nazwę). Parametr mode definiuje tryb, w jakim działa HAProxy.

Parametr acl (Lista kontroli dostępu) służy do podejmowania decyzji na podstawie treści wyodrębnionej z żądania. W tym przykładzie żądanie jest uznawane za zwykły HTTP, jeśli nie jest przesyłane za pośrednictwem SSL.

Następnie ustawienie http-request set-header służy do dodania nagłówka HTTP do żądania. Pomaga to poinformować Nginx, że początkowe żądanie zostało wysłane przez HTTP (lub przez port 80).

Dyrektywa default_backend lub use_backend definiuje serwery backendu, w tym przypadku, do których odwołują się TL_web_servers.

Pamiętaj, że HAProxy zwróci „błąd 503 niedostępności usługi”, jeśli żądanie nie zostanie przekierowane przez use_backend lub default_backend > dyrektywa.

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. Następnie musimy zdefiniować sekcję zaplecza, w której ustawienie saldo określa, w jaki sposób HAProxy wybiera serwery zaplecza do przetworzenia żądania, jeśli nie metoda trwałości zastępuje ten wybór.

Dyrektywa cookie umożliwia trwałość opartą na plikach cookie, instruuje HAProxy, aby wysłała do klienta plik cookie o nazwie SERVERID i aby powiązać go z ID serwera, który udzielił początkowej odpowiedzi.

Dyrektywa serwer służy do definiowania serwerów nadrzędnych w formacie nazwa_serwera (np. websrv1), IP_serwera:port i opcje.

Jedną z kluczowych opcji jest opcja check, która informuje HAProxy o konieczności ciągłego sprawdzania dostępności serwera i raportowania na stronie statystyk.

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

Skomentuj wszelkie inne sekcje frontendu i backendu, jak pokazano na zrzucie ekranu poniżej. Zapisz plik i zamknij go.

15. Teraz uruchom ponownie usługę HAProxy, aby zastosować nowe zmiany.

systemctl restart haproxy

16. Następnie upewnij się, że HTTP (port 80) i HTTPS (port 433) usługi są otwierane w zaporze sieciowej w celu akceptowania żądań klientów w następujący sposób. Otwórz także port 9000 w zaporze, aby uzyskać dostęp do strony statystyk i ponownie załaduj ustawienia zapory.

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: Testowanie konfiguracji HAProxy i przeglądanie statystyk

17. Teraz czas przetestować konfigurację HAPrxoy. Na komputerze lokalnym, z którego uzyskujesz dostęp do wszystkich serwerów, dodaj następujący wiersz w pliku /etc/hosts, abyśmy mogli używać fikcyjnej domeny witryny.

10.42.0.247  www.tecmint.lan

18. Następnie otwórz przeglądarkę i nawiguj, korzystając z adresu serwera lub domeny witryny.

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

19. Aby uzyskać dostęp do strony statystyk HAProxy, użyj następującego adresu.

http://10.42.0.247:9000/stats

Następnie użyj nazwy użytkownika i hasła zdefiniowanych w pliku konfiguracyjnym HAProxy (patrz parametr stats auth).

Po pomyślnym zalogowaniu wylądujesz na stronie statystyk HAProxy, która pokazuje wskaźniki dotyczące kondycji Twoich serwerów, bieżących współczynników żądań, czasu odpowiedzi i wiele więcej.

Aby zademonstrować, jak działa raport stanu dotyczący działania kodów kolorów, umieściliśmy jeden z serwerów zaplecza.

Krok 4: Konfiguracja protokołu HTTPS w HAProxy przy użyciu certyfikatu SSL z podpisem własnym

20. W tej ostatniej sekcji zademonstrujemy, jak skonfigurować protokół SSL/TLS, aby zabezpieczyć całą komunikację pomiędzy serwerem HAProxy a klientem. HAProxy obsługuje cztery główne tryby konfiguracji HTTPS, ale w tym przewodniku użyjemy odciążania SSL/TLS.

W trybie odciążania SSL/TLS HAProxy odszyfrowuje ruch po stronie klienta i łączy się w czystym ruchu z serwerami zaplecza.

Zaczniemy od utworzenia certyfikatu i klucza, jak pokazano na rysunku (odpowiedz odpowiednio na pytania w oparciu o dane Twojej firmy podczas tworzenia certyfikatu, jak zaznaczono na zrzucie ekranu).

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. Następnie otwórz plik konfiguracyjny HAProxy (/etc/haproxy/haproxy.cfg) i edytuj sekcję 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

Zapisz plik i zamknij go.

22. Następnie uruchom ponownie usługę HAProxy, aby zastosować nowe zmiany.

systemctl restart haproxy.service

23. Następnie otwórz przeglądarkę internetową i spróbuj ponownie uzyskać dostęp do witryny. Przeglądarka wyświetli błąd z powodu certyfikatu z podpisem własnym. Kliknij Zaawansowane, aby kontynuować.

To wszystko na teraz! Każda aplikacja internetowa ma swój własny zestaw wymagań. Musisz zaprojektować i skonfigurować równoważenie obciążenia, aby dopasować je do swojej infrastruktury IT i wymagań aplikacji.

Aby uzyskać więcej informacji na temat niektórych opcji konfiguracji używanych w tym przewodniku i ogólnie o tym, jak używać HAProxy, zapoznaj się z oficjalną dokumentacją wersji społecznościowej HAProxy lub dokumentacją wersji korporacyjnej HAProxy. Możesz przesłać swoje pytania lub przemyślenia za pomocą poniższego formularza opinii.