Przekład artykułu przygotowany przed rozpoczęciem kursu

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. 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 i .

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 haproxyHAProxy 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 -yPobierz kod źródłowy za pomocą poniższej komendy. Możesz sprawdzić, czy dostępna jest nowsza wersja na .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzPo 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.7Następnie skompiluj program pod swoją wersję systemu:
make TARGET=linux-glibcI na koniec zainstaluj samą HAProxy:
sudo make installTeraz 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/statsUtwó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/haproxyJeś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-reloadMusisz również zezwolić usłudze na automatyczny restart przy uruchamianiu systemu:
sudo chkconfig haproxy onDla wygody zaleca się także dodanie nowego użytkownika do uruchamiania HAProxy:
sudo useradd -r haproxyPo 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 --reloadKonfiguracja 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 , 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.cfgDodaj 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 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 checkTo 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.cfgNastę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 checkFrontend 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 haproxyJeś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?statsKiedy wczytujesz stronę statystyki, jeśli wszystkie twoje serwery są wyświetlane na zielono, konfiguracja powiodła się!

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 haproxyOchrona 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:passwordPo 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 haproxyNastę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:8181Upewnij 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 .
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 , 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 .
Więcej o kursie ***
Źródło: habr.com
