Tłumaczenie artykułu przygotowane w przededniu rozpoczęcia kursu

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

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 haproxyHAProxy 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 -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 źródłowego:
cd ~/haproxy-2.0.7Następnie skompiluj program pod swoją system:
make TARGET=linux-glibcA na koniec zainstaluj samą HAProxy:
sudo make installTeraz 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/statsUtwó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/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 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-reloadMusisz również zezwolić usłudze na automatyczne uruchamianie przy starcie systemu:
sudo chkconfig haproxy onDla wygody zaleca się również 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 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 --reloadKonfiguracja 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 , 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.cfgDodaj 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 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 checkDefiniuje 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.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 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 haproxyJeś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?statsKiedy ładujesz stronę statystyk, jeśli wszystkie Twoje serwery są oznaczone na zielono, to konfiguracja przebiegła pomyślnie!

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