Instalacja load balancera HAProxy na CentOS

Tłumaczenie artykułu przygotowane w przededniu rozpoczęcia kursu «Administrator Linux. Wirtualizacja i klastrowanie»

Instalacja load balancera HAProxy na CentOS

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

HAProxy dąży do optymalizacji wykorzystania zasobów, maksymalizacji przepustowości, minimalizacji czasu odpowiedzi oraz unikania obciążenia pojedynczych zasobów. Może być zainstalowane na wielu dystrybucjach Linuxa, takich jak CentOS 8, na którym będziemy się skupiać w tym przewodniku, a także na systemach Debian 8 и Ubuntu 16.

Instalacja load balancera HAProxy na CentOS

HAProxy jest szczególnie odpowiedni dla witryn internetowych o bardzo wysokim ruchu i dlatego często jest używany do zwiększenia niezawodności i wydajności konfiguracji usług internetowych z wieloma serwerami. W tym przewodniku przedstawiono kroki na ustawienie HAProxy jako load balancer na chmurowym hoście CentOS 8, który następnie kieruje ruch do Twoich serwerów WWW.

Aby uzyskać najlepsze wyniki, musisz mieć co najmniej dwa serwery WWW oraz serwer do równoważenia obciążenia. Na serwerach WWW powinien być uruchomiony przynajmniej podstawowy serwis internetowy, taki jak nginx lub httpd, aby móc sprawdzić równoważenie obciążenia między nimi.

Instalacja HAProxy na CentOS 8

Ponieważ HAProxy jest szybko rozwijającą się aplikacją open source, dystrybucja dostępna w standardowych repozytoriach CentOS może nie być najnowszą wersją. Aby sprawdzić aktualną wersję, wykonaj następujące polecenie:

sudo yum info haproxy

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

W tym poradniku zainstalujemy najnowszą stabilną wersję 2.0, która nie była jeszcze dostępna w standardowych repozytoriach w momencie pisania poradnika. Będziesz musiał zainstalować ją ze źródła. Najpierw sprawdź, czy 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 źródłowego:

cd ~/haproxy-2.0.7

Następnie skompiluj program pod swoją system:

make TARGET=linux-glibc

A na koniec zainstaluj samą HAProxy:

sudo make install

Teraz HAProxy jest zainstalowane, ale potrzebuje dodatkowych działań, aby działać poprawnie. Kontynuujemy konfigurację oprogramowania i usług poniżej.

Konfiguracja HAProxy dla twojego serwera

Dodaj następujące katalogi i plik statystyk dla zapisów HAProxy:

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

Utwórz dowiązanie symboliczne dla 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 do pliku, aby skrypt mógł się uruchamiać, 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 automatyczne uruchamianie przy starcie systemu:

sudo chkconfig haproxy on

Dla wygody zaleca się również 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 wersja 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 sieciowa w CentOS 8 domyślnie jest dość restrykcyjna dla tego projektu. Użyj poniższych komend, aby zezwolić na niezbędne usługi i ponownie uruchomić 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 balancerów obciążenia

Konfiguracja HAProxy to dość prosty proces. W zasadzie wystarczy, że powiesz HAProxy, jakie połączenia ma nasłuchiwać i dokąd je retransmitować.

Robi się to poprzez stworzenie pliku konfiguracyjnego /etc/haproxy/haproxy.cfg z odpowiednimi ustawieniami. Możesz przeczytać o parametrach konfiguracyjnych HAProxy w dokumentacji, jeśli chcesz dowiedzieć się więcej.

Balansowanie obciążenia na poziomie transportu (warstwa 4)

Zacznijmy od podstawowej konfiguracji. Stwórz nowy plik konfiguracyjny, na przykład, używając vi z poniższą komendą:

sudo vi /etc/haproxy/haproxy.cfg

Dodaj do pliku następujące sekcje. Zastąp server_name tym, co powinno wywoływać Twoje serwery na stronie statystyki, a private_ip — prywatnymi adresami IP serwerów, na które chcesz kierować ruch internetowy. Możesz sprawdzić prywatne adresy IP na panelu zarządzania UpCloud i na zakładce Prywatna sieć w menu Sieć log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats timeout 30s user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_backbackend http_back balance roundrobin server server_name1 private_ip1:80 check server server_name2 private_ip2:80 check.

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

Definiuje to balansujący obciążenie transportowego poziomu (warstwa 4) o zewnętrznej nazwie http_front, nasłuchujący na porcie 80, który następnie kieruje ruch do domyślnego backendu o nazwie http_back. Dodatkowa statystyka /haproxy?stats podłącza stronę statystyk pod wskazanym adresem.

Różne algorytmy balansowania obciążenia.

Określenie serwerów w sekcji backendu pozwala HAProxy na wykorzystanie tych serwerów do balansowania obciążenia zgodnie z algorytmem okrężnym, gdy to możliwe.

Algorytmy balansowania są używane do określenia, na który serwer w zapleczu przekazywane jest każde połączenie. Oto kilka przydatnych opcji:

  • Roundrobin: każdy serwer jest wykorzystywany na zmianę zgodnie ze swoim wagą. Jest to najpłynniejszy i najsprawiedliwszy algorytm, gdy czas przetwarzania serwerów pozostaje równomiernie rozłożony. Algorytm ten jest dynamiczny, co pozwala na regulację wagi serwera w czasie rzeczywistym.
  • Leastconn: wybierany jest serwer z najmniejszą liczbą połączeń. Wykonywane jest cykliczne przeszukiwanie pomiędzy serwerami o jednakowym obciążeniu. Korzystanie z tego algorytmu jest zalecane dla długich sesji, takich jak LDAP, SQL, TSE itd., niemniej jednak nie jest on zbyt odpowiedni dla krótkich sesji, takich jak HTTP.
  • First: pierwszy serwer z dostępnymi slotami na połączenie otrzymuje to połączenie. Serwery są wybierane od najniższego identyfikatora numerycznego do najwyższego, co domyślnie odpowiada pozycji serwera w farmie. Gdy serwer osiągnie wartość maxconn, wykorzystywany jest następny serwer.
  • Źródło: Adres IP źródłowy jest haszowany i dzielony na całkowity ciężar uruchomionych serwerów, aby określić, który serwer otrzyma żądanie. W ten sposób ten sam adres IP klienta zawsze będzie przypisany temu samemu serwerowi, podczas gdy serwery pozostają niezmienne.

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

Kolejną dostępną opcją jest 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 regulację przekazywania połączeń, na przykład według URL.

Otwórz plik konfiguracyjny HAProxy w edytorze 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 definiuje regułę ACL o nazwie url_blog, która dotyczy wszystkich połączeń z ścieżkami zaczynającymi się od /blog. Use_backend określa, że połączenia spełniające warunek url_blog powinny być obsługiwane przez backend o nazwie blog_back, a wszystkie pozostałe zapytania są przetwarzane przez backend domyślny.

Od strony 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 zmianie ustawień zapisz plik i uruchom ponownie HAProxy za pomocą następującej komendy:

sudo systemctl restart haproxy

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

Testowanie konfiguracji

Gdy HAProxy jest skonfigurowane i uruchomione, otwórz publiczny adres IP serwera równoważnika obciążeń w przeglądarce i sprawdź, czy prawidłowo 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 ładujesz stronę statystyk, jeśli wszystkie Twoje serwery są oznaczone na zielono, to konfiguracja przebiegła pomyślnie!

Instalacja load balancera HAProxy na CentOS

Strona statystyk zawiera przydatne informacje do śledzenia Twoich hostów internetowych, w tym czas pracy/przerwy 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 balansującej.

Jeśli Twój balansujący ruch serwer nie odpowiada, upewnij się, że połączenia HTTP nie są blokowane przez zaporę ogniową. Sprawdź również, czy HAProxy działa za pomocą poniższego polecenia:

sudo systemctl status haproxy

Ochrona strony statystyk hasłem

Jednak jeśli strona statystyk jest po prostu umieszczona w interfejsie frontendowym, jest otwarta na ogólny podgląd, co może nie być najlepszym 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 username и password czymś bezpiecznym:

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

Po dodaniu nowej grupy odbiorców usuń starą wtyczkę stats uri z grupy frontendowej. Po zakończeniu zapisz plik i uruchom ponownie HAProxy.

sudo systemctl restart haproxy

Następnie otwórz ponownie load balancer z nowym numerem portu i zaloguj się przy użyciu nazwy użytkownika i hasła, które wskazałeś w pliku konfiguracyjnym.

http://load_balancer_public_ip:8181

Upewnij się, że wszystkie twoje serwery wciąż wyświetlają się na zielono, a następnie otwórz tylko IP load balancera bez żadnych numerów portów w przeglądarce.

http://load_balancer_public_ip/

Jeśli na twoich wewnętrznych serwerach jest 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 konfiguracyjnej lub zapoznać się z pełną dokumentacją.

Podsumowanie: load balancer HAProxy

Gratulacje z udanej konfiguracji load balancera HAProxy! Nawet przy podstawowej konfiguracji równoważenia obciążenia można znacząco zwiększyć wydajność i dostępność swojej aplikacji internetowej. Ten przewodnik jest jedynie wprowadzeniem do równoważenia obciążenia za pomocą HAProxy, które ma znacznie więcej możliwości, niż można opisać w krótkiej instrukcji konfiguracyjnej. Zachęcamy do eksperymentowania z różnymi konfiguracjami przy użyciu obszernych dokumentów, dostępnych dla HAProxy, a następnie do zaplanowania równoważenia obciążenia dla swojego środowiska produkcyjnego.

Używanie wielu hostów do ochrony swojego serwisu internetowego za pomocą zapasowej mocy, sam load balancer wciąż może być punktem awarii. Możesz jeszcze bardziej zwiększyć wysoką dostępność, konfigurując pływający adres IP pomiędzy kilkoma load balancerami. Możesz dowiedzieć się więcej o tym w naszej artykuł na temat pływających adresów IP na UpCloud.

Więcej informacji o kursie «Administrator Linux. Wirtualizacja i klastrowanie»***

Źródło: habr.com

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