Instalacja load balancera HAProxy na CentOS

Przekład artykułu przygotowany przed rozpoczęciem kursu „Administrator Linux. Wirtualizacja i klastrowanie”

Instalacja load balancera HAProxy na CentOS

Load balancing to powszechne rozwiązanie do poziomego skalowania aplikacji internetowych na wielu hostach, zapewniające użytkownikom jednolity punkt dostępu do usługi. HAProxy jest jednym z najpopularniejszych programów do load balancingu z otwartym kodem źródłowym, który zapewnia także wysoką dostępność i funkcjonalność proxy.

HAProxy stara się optymalizować wykorzystanie zasobów, maksymalizować przepustowość, minimalizować czas odpowiedzi i unikać przeciążenia każdego zasobu. Może być zainstalowane na wielu dystrybucjach Linux, takich jak CentOS 8, na którym skupimy się w tym przewodniku, a także w systemach Debian 8 i Ubuntu 16.

Instalacja load balancera HAProxy na CentOS

HAProxy szczególnie nadaje się do stron internetowych o bardzo dużym ruchu, dlatego często jest używane do zwiększenia niezawodności i wydajności konfiguracji usług webowych z wieloma serwerami. W tym przewodniku przedstawione są kroki konfigurowania HAProxy jako load balancera na chmurze CentOS 8, który następnie kieruje ruch do twoich serwerów webowych.

Aby osiągnąć najlepsze wyniki, musisz mieć przynajmniej dwa serwery webowe oraz serwer do load balancingu. Na serwerach webowych powinna być uruchomiona przynajmniej podstawowa usługa webowa, taka jak nginx lub httpd, aby można było sprawdzić load balancing między nimi.

Instalacja HAProxy na CentOS 8

Ponieważ HAProxy to szybko rozwijająca się aplikacja z otwartym kodem źródłowym, dystrybucja dostępna w standardowych repozytoriach CentOS może nie być najnowszą wersją. Aby sprawdzić aktualną wersję, wykonaj poniższe polecenie:

sudo yum info haproxy

HAProxy zawsze oferuje trzy stabilne wersje do wyboru: dwie najnowsze wspierane wersje oraz trzecią, starszą, która wciąż otrzymuje krytyczne aktualizacje. Zawsze możesz sprawdzić najnowszą stabilną wersję na stronie HAProxy, a następnie zdecydować, z którą wersją chcesz pracować.

W tym przewodniku zainstalujemy najnowszą stabilną wersję 2.0, która nie była jeszcze dostępna w standardowych repozytoriach w momencie pisania przewodnika. Będziesz musiał zainstalować ją z źródła. Ale najpierw upewnij się, że spełniasz wymagania do pobrania i kompilacji programu.

sudo yum install gcc pcre-devel tar make -y

Pobierz kod źródłowy za pomocą poniższej komendy. Możesz sprawdzić, czy dostępna jest nowsza wersja na stronie pobierania HAProxy.

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

Po zakończeniu pobierania rozpakuj pliki za pomocą poniższej komendy:

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

Przejdź do rozpakowanego katalogu z kodem źródłowym:

cd ~/haproxy-2.0.7

Następnie skompiluj program pod swoją wersję systemu:

make TARGET=linux-glibc

I na koniec zainstaluj samą HAProxy:

sudo make install

Teraz HAProxy jest zainstalowane, ale aby działało, wymaga dodatkowych operacji. Kontynuujmy konfigurację oprogramowania i usług poniżej.

Konfiguracja HAProxy dla Twojego serwera

Teraz dodaj następujące katalogi oraz plik statystyk dla wpisów HAProxy:

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

Utwórz dowiązanie symboliczne do plików binarnych, abyś mógł uruchamiać polecenia HAProxy jako zwykły użytkownik:

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

Jeśli chcesz dodać serwer proxy do systemu jako usługę, skopiuj plik haproxy.init z examples do swojego katalogu /etc/init.d. Edytuj uprawnienia pliku, aby skrypt był wykonalny, a następnie przeładuj demon 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

Musisz również zezwolić usłudze na automatyczny restart przy uruchamianiu systemu:

sudo chkconfig haproxy on

Dla wygody zaleca się także dodanie nowego użytkownika do uruchamiania HAProxy:

sudo useradd -r haproxy

Po tym możesz ponownie sprawdzić numer zainstalowanej wersji za pomocą następującego polecenia:

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

W naszym przypadku wersja powinna być 2.0.7, jak pokazano w powyższym przykładzie.

Na koniec zapora w CentOS 8 domyślnie jest dość restrykcyjna dla tego projektu. Użyj poniższych komend, aby zezwolić na wymagane usługi i zrestartować zaporę:

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

Konfiguracja load balancera

Konfiguracja HAProxy jest dość prostym procesem. W zasadzie wszystko, co musisz zrobić, to poinformować HAProxy, jakie połączenia powinien nasłuchiwać i dokąd powinien je przekazywać.

Robi się to przez utworzenie pliku konfiguracyjnego /etc/haproxy/haproxy.cfg z odpowiednimi ustawieniami. Możesz poczytać o opcjach konfiguracyjnych HAProxy na stronie dokumentacji, jeśli chcesz dowiedzieć się o tym więcej.

Load balancing na poziomie transportowym (warstwa 4)

Zaczniemy od podstawowej konfiguracji. Utwórz nowy plik konfiguracyjny, na przykład, używając vi polecenia poniżej:

sudo vi /etc/haproxy/haproxy.cfg

Dodaj do pliku następujące sekcje. Zamień server_name na to, co powinno identyfikować Twoje serwery na stronie statystyk, a private_ip na prywatne adresy IP serwerów, na które chcesz kierować ruch webowy. Możesz sprawdzić prywatne adresy IP w panelu sterowania UpCloud i na zakładce Private network w menu Sieć.

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 definiuje load balancer na poziomie transportowym (warstwa 4) z zewnętrzną nazwą http_front, nasłuchującą na porcie 80, która następnie kieruje ruch do domyślnego backendu o nazwie http_back. Dodatkowe statystyki /haproxy?stats łączą stronę statystyk pod wskazanym adresem.

Różne algorytmy load balancingu.

Określenie serwerów w sekcji backend umożliwia HAProxy wykorzystanie tych serwerów do równoważenia obciążenia zgodnie z algorytmem round robin, kiedy to możliwe.

Algorytmy load balancingu służą do określenia, na który serwer w backendzie przesyłane jest każde połączenie. Oto niektóre przydatne opcje:

  • Roundrobin: każdy serwer jest używany na przemian zgodnie ze swoim ciężarem. To najpłynniejszy i najuczciwszy algorytm, w którym czas przetwarzania przez serwery pozostaje równomiernie rozłożony. Algorytm ten jest dynamiczny, co pozwala na dostosowywanie ciężaru serwera na bieżąco.
  • Leastconn: serwer z najmniejszą liczbą połączeń jest wybierany. Cykl przełączania jest realizowany między serwerami o jednakowym obciążeniu. Zaleca się stosowanie tego algorytmu dla długich sesji, takich jak LDAP, SQL, TSE itp., ale nie nadaje się on do krótkich sesji, takich jak HTTP.
  • Pierwszy: pierwszy serwer z dostępnymi slotami na połączenia otrzymuje połączenie. Serwery są wybierane od najniższego identyfikatora numerycznego do najwyższego, co domyślnie odpowiada pozycji serwera w farmie. Gdy server osiągnie wartość maxconn, jest stosowany następny serwer.
  • Źródło: Adres IP źródła jest haszowany i dzielony przez całkowitą wagę uruchomionych serwerów, aby określić, który serwer ma obsługiwać żądanie. W ten sposób ten sam adres IP klienta zawsze przypisany będzie do tego samego serwera, o ile serwery pozostają niezmienne.

Konfiguracja równoważenia obciążenia na poziomie aplikacji (warstwa 7)

Kolejna dostępna opcja to skonfigurowanie równoważnika obciążenia do pracy na poziomie aplikacji (warstwa 7), co jest przydatne, gdy części Twojej aplikacji internetowej znajdują się na różnych hostach. Można to osiągnąć poprzez regulowanie przekazywania połączeń, na przykład według URL.

Otwórz plik konfiguracyjny HAProxy za pomocą edytora tekstu:

sudo vi /etc/haproxy/haproxy.cfg

Następnie skonfiguruj segmenty frontend i backend zgodnie z poniższym przykładem:

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 ogłasza regułę ACL o nazwie url_blog, która jest stosowana do wszystkich połączeń z ścieżkami rozpoczynającymi się od /blog. use_backend określa, że połączenia spełniające kryterium url_blog powinny być obsługiwane przez backend o nazwie blog_back, a wszystkie pozostałe żądania są obsługiwane przez domyślny backend.

Po stronie backendu konfiguracja ustawia dwie grupy serwerów: http_back, jak wcześniej, oraz nową, nazwaną blog_back, która obsługuje połączenia z example.com/blog.

Po dokonaniu zmian w ustawieniach zapisz plik i uruchom ponownie HAProxy za pomocą następującego polecenia:

sudo systemctl restart haproxy

Jeśli podczas uruchamiania otrzymałeś jakiekolwiek ostrzeżenia lub komunikaty o błędach, sprawdź konfigurację pod kątem ich obecności i upewnij się, że stworzyłeś wszystkie wymagane pliki i foldery, a następnie spróbuj ponownie uruchomić.

Testowanie konfiguracji

Gdy HAProxy jest skonfigurowany i uruchomiony, otwórz publiczny adres IP serwera balancera obciążenia w przeglądarce i sprawdź, czy poprawnie połączyłeś się z backendem. Parametr stats uri w konfiguracji tworzy stronę statystyki pod wskazanym adresem.

http://load_balancer_public_ip/haproxy?stats

Kiedy wczytujesz stronę statystyki, jeśli wszystkie twoje serwery są wyświetlane na zielono, konfiguracja powiodła się!

Instalacja load balancera HAProxy na CentOS

Strona statystyki zawiera przydatne informacje do śledzenia twoich hostów internetowych, w tym czas pracy/przestoju oraz liczbę sesji. Jeśli serwer jest oznaczony na czerwono, upewnij się, że serwer jest włączony i że możesz go pingować z maszyny balancera obciążenia.

Jeśli twój balancer obciążenia nie odpowiada, upewnij się, że połączenia HTTP nie są blokowane przez zaporę ogniową. Upewnij się również, że HAProxy działa, używając poniższej komendy:

sudo systemctl status haproxy

Ochrona strony statystyki hasłem

Jednakże, jeśli strona statystyki jest po prostu umieszczona w frontendzie, to jest otwarta dla wszystkich, co może nie być zbyt dobrym pomysłem. Zamiast tego możesz przypisać jej własny numer portu, dodając poniższy przykład na końcu swojego pliku haproxy.cfg. Zastąp nazwa użytkownika i hasło czymś bezpiecznym:

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

Po dodaniu nowej grupy słuchaczy usuń starą linkę do stats uri z grupy frontend. Kiedy skończysz, zapisz plik i uruchom ponownie HAProxy.

sudo systemctl restart haproxy

Następnie ponownie otwórz balancer obciążenia z nowym numerem portu i zaloguj się za pomocą nazwy użytkownika i hasła, które podałeś w pliku konfiguracyjnym.

http://load_balancer_public_ip:8181

Upewnij się, że wszystkie twoje serwery nadal są wyświetlane na zielono, a następnie otwórz tylko IP balancera obciążenia bez żadnych numerów portów w swojej przeglądarce.

http://load_balancer_public_ip/

Jeśli na Twoich wewnętrznych serwerach istnieje jakiekolwiek zróżnicowanie stron docelowych, zauważysz, że za każdym razem, gdy odświeżasz stronę, otrzymujesz odpowiedź od innego hosta. Możesz wypróbować różne algorytmy równoważenia obciążenia w sekcji konfiguracji lub zapoznać się z pełną dokumentacją.

Podsumowanie: równoważnik obciążenia HAProxy

Gratulacje z okazji pomyślnej konfiguracji równoważnika obciążenia HAProxy! Nawet przy podstawowej konfiguracji równoważenia obciążenia możesz znacznie zwiększyć wydajność i dostępność swojej aplikacji internetowej. Ten przewodnik jest tylko wprowadzeniem do równoważenia obciążenia z wykorzystaniem HAProxy, które potrafi znacznie więcej, niż można opisać w krótkiej instrukcji konfiguracji. Zachęcamy do eksperymentowania z różnymi konfiguracjami z użyciem obszernej dokumentacji, dostępnej dla HAProxy, a następnie przejść do planowania równoważenia obciążenia dla swojego środowiska produkcyjnego.

Używając kilku hostów do ochrony swojej usługi internetowej za pomocą nadmiaru mocy, sam równoważnik obciążenia nadal może stanowić punkt awarii. Możesz jeszcze bardziej zwiększyć wysoką dostępność, instalując pływający adres IP między kilkoma równoważnikami obciążenia. Więcej informacji na ten temat znajdziesz w naszej artykuł o pływających adresach IP na UpCloud.

Więcej o kursie „Administrator Linux. Wirtualizacja i klastrowanie”***

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster