Tłumaczenie artykułu zostało przygotowane w przeddzień rozpoczęcia kursu
Równoważenie obciążenia to powszechne rozwiązanie w przypadku aplikacji internetowych skalowanych poziomo na wielu hostach, zapewniających użytkownikom pojedynczy punkt dostępu do usługi.
HAProxy stara się optymalizować wykorzystanie zasobów, maksymalizować przepustowość, minimalizować czas reakcji i unikać przeciążenia poszczególnych zasobów. Można go zainstalować na różnych dystrybucjach Linuksa, takich jak CentOS 8, na którym skupimy się w tym przewodniku, a także na systemach
HAProxy jest szczególnie odpowiedni dla stron internetowych o bardzo dużym ruchu i dlatego często jest używany do poprawy niezawodności i wydajności konfiguracji usług internetowych z wieloma serwerami. W tym przewodniku opisano kroki konfigurowania HAProxy jako modułu równoważenia obciążenia na hoście w chmurze CentOS 8, który następnie kieruje ruch do serwerów internetowych.
Warunkiem uzyskania najlepszych wyników jest posiadanie co najmniej dwóch serwerów internetowych i serwera równoważącego obciążenie. Na serwerach internetowych musi być uruchomiona przynajmniej podstawowa usługa internetowa, taka jak nginx lub httpd, aby przetestować równoważenie obciążenia między nimi.
Instalowanie HAProxy na CentOS 8
Ponieważ HAProxy jest szybko rozwijającą się aplikacją typu open source, dystrybucja dostępna w standardowych repozytoriach CentOS może nie być najnowszą wersją. Aby sprawdzić aktualną wersję, uruchom następujące polecenie:
sudo yum info haproxy
HAProxy zawsze udostępnia trzy stabilne wersje do wyboru: dwie najnowsze obsługiwane wersje i trzecią, starszą wersję, która wciąż otrzymuje krytyczne aktualizacje. Zawsze możesz sprawdzić najnowszą stabilną wersję wymienioną na stronie HAProxy, a następnie zdecydować, z którą wersją chcesz pracować.
W tym poradniku będziemy instalować najnowszą stabilną wersję 2.0, która w chwili pisania poradnika nie była jeszcze dostępna w standardowych repozytoriach. Będziesz musiał zainstalować go z oryginalnego źródła. Ale najpierw sprawdź, czy spełniłeś warunki niezbędne do pobrania i skompilowania programu.
sudo yum install gcc pcre-devel tar make -y
Pobierz kod źródłowy za pomocą poniższego polecenia. Możesz sprawdzić, czy jest dostępna nowsza wersja
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Po zakończeniu pobierania wyodrębnij pliki za pomocą poniższego polecenia:
tar xzvf ~/haproxy.tar.gz -C ~/
Przejdź do rozpakowanego katalogu źródłowego:
cd ~/haproxy-2.0.7
Następnie skompiluj program dla swojego systemu:
make TARGET=linux-glibc
I na koniec zainstaluj sam HAProxy:
sudo make install
HAProxy jest teraz zainstalowany, ale wymaga pewnych dodatkowych manipulacji, aby działał. Kontynuujmy konfigurowanie oprogramowania i usług poniżej.
Konfigurowanie HAProxy dla Twojego serwera
Teraz dodaj następujące katalogi i plik statystyczny 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óc 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 swojego systemu jako usługę, skopiuj plik haproxy.init z przykładów do katalogu /etc/init.d. Edytuj uprawnienia do pliku, aby skrypt się uruchomił, a następnie zrestartuj demona 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 także zezwolić usłudze na automatyczne ponowne uruchomienie po uruchomieniu systemu:
sudo chkconfig haproxy on
Dla wygody zaleca się również dodanie nowego użytkownika w celu uruchomienia HAProxy:
sudo useradd -r haproxy
Następnie możesz ponownie sprawdzić numer zainstalowanej wersji, używając następującego polecenia:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
W naszym przypadku powinna to być wersja 2.0.7, jak pokazano w powyższym przykładzie.
Wreszcie domyślna zapora sieciowa w CentOS 8 jest dość restrykcyjna dla tego projektu. Użyj następujących poleceń, aby zezwolić na wymagane usługi i zresetować 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 modułu równoważenia obciążenia
Konfigurowanie HAProxy jest dość prostym procesem. Zasadniczo wszystko, co musisz zrobić, to powiedzieć HAProxy, jakich połączeń ma nasłuchiwać i gdzie powinien je przekazywać.
Odbywa się to poprzez utworzenie pliku konfiguracyjnego /etc/haproxy/haproxy.cfg z definiującymi ustawieniami. Możesz przeczytać o opcjach konfiguracyjnych HAProxy
Równoważenie obciążenia w warstwie transportowej (warstwa 4)
Zacznijmy od podstawowej konfiguracji. Utwórz nowy plik konfiguracyjny, na przykład za pomocą vi za pomocą poniższego polecenia:
sudo vi /etc/haproxy/haproxy.cfg
Dodaj następujące sekcje do pliku. Zastępować server_name co powinno wywoływać Twoje serwery na stronie statystyk i prywatny_ip — prywatne adresy IP serwerów, na które chcesz kierować ruch sieciowy. Możesz sprawdzić prywatne adresy IP
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 moduł równoważenia obciążenia warstwy transportowej (warstwa 4) o nazwie http_front, nasłuchujący na porcie 80, który następnie przekazuje ruch do domyślnego backendu o nazwie http_back. Dodatkowe statystyki /haproxy?stats łączy stronę statystyk z podanym adresem.
Różne algorytmy równoważenia obciążenia.
Określenie serwerów w sekcji backendu umożliwia HAProxy użycie tych serwerów do równoważenia obciążenia zgodnie z algorytmem okrężnym, jeśli to możliwe.
Algorytmy równoważące służą do określenia, do którego serwera w zapleczu przekazywane jest każde połączenie. Oto kilka przydatnych opcji:
- Roundrobin: Każdy serwer jest używany po kolei, zgodnie z jego wagą. Jest to najpłynniejszy i najuczciwszy algorytm, gdy czas przetwarzania serwerów jest równomiernie rozłożony. Algorytm ten jest dynamiczny, co pozwala na bieżąco dostosowywać wagę serwera.
- Najmniejconn: wybrany zostanie serwer z najmniejszą liczbą połączeń. Praca okrężna jest wykonywana pomiędzy serwerami o tym samym obciążeniu. Używanie tego algorytmu jest zalecane w przypadku długich sesji, takich jak LDAP, SQL, TSE itp., ale nie jest zbyt odpowiednie w przypadku krótkich sesji, takich jak HTTP.
- Pierwszy: Pierwszy serwer z dostępnymi slotami połączeń odbiera połączenie. Serwery są wybierane od najniższego identyfikatora numerycznego do najwyższego, co domyślnie oznacza pozycję serwera w farmie. Gdy serwer osiągnie maxconn, używany jest następny serwer.
- Źródło: Źródłowy adres IP jest szyfrowany i dzielony przez całkowitą wagę działających serwerów, aby określić, który serwer otrzyma żądanie. W ten sposób ten sam adres IP klienta będzie zawsze trafiał do tego samego serwera, podczas gdy serwery pozostaną takie same.
Konfigurowanie równoważenia obciążenia na poziomie aplikacji (warstwa 7)
Inną dostępną opcją jest skonfigurowanie modułu równoważenia obciążenia do działania w warstwie aplikacji (warstwa 7), co jest przydatne, gdy części aplikacji internetowej znajdują się na różnych hostach. Można to osiągnąć ograniczając transmisję połączenia, na przykład po adresie 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 deklaruje regułę ACL o nazwie url_blog, która ma zastosowanie do wszystkich połączeń ze ś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 żądania są obsługiwane przez backend domyślny.
Po stronie backendu konfiguracja tworzy dwie grupy serwerów: http_back, jak poprzednio, oraz nową o nazwie blog_back, która obsługuje połączenia z example.com/blog.
Po zmianie ustawień zapisz plik i zrestartuj HAProxy za pomocą następującego polecenia:
sudo systemctl restart haproxy
Jeśli podczas uruchamiania pojawią się jakiekolwiek ostrzeżenia lub komunikaty o błędach, sprawdź ich konfigurację i upewnij się, że utworzyłeś wszystkie niezbędne pliki i foldery, a następnie spróbuj uruchomić ponownie.
Testowanie konfiguracji
Po skonfigurowaniu i uruchomieniu HAProxy otwórz w przeglądarce publiczny adres IP serwera modułu równoważenia obciążenia i sprawdź, czy masz prawidłowe połączenie z backendem. Parametr stats uri w konfiguracji tworzy stronę statystyk pod określonym adresem.
http://load_balancer_public_ip/haproxy?stats
Jeśli po załadowaniu strony statystyk wszystkie serwery pokażą się na zielono, oznacza to, że konfiguracja przebiegła pomyślnie!
Strona statystyk zawiera przydatne informacje umożliwiające śledzenie hostów internetowych, w tym czas działania i liczbę sesji. Jeśli serwer jest zaznaczony na czerwono, upewnij się, że jest włączony i że możesz na niego pingować z komputera równoważącego obciążenie.
Jeśli moduł równoważenia obciążenia nie odpowiada, upewnij się, że połączenia HTTP nie są blokowane przez zaporę sieciową. Upewnij się także, że HAProxy działa, używając poniższego polecenia:
sudo systemctl status haproxy
Zabezpieczenie strony statystyk hasłem
Jeśli jednak strona ze statystykami jest po prostu wymieniona w interfejsie użytkownika, jest ona dostępna dla wszystkich, co może nie być dobrym pomysłem. Zamiast tego możesz przypisać mu niestandardowy numer portu, dodając poniższy przykład na końcu pliku haproxy.cfg. Zastępować nazwa użytkownika и password na coś bezpiecznego:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Po dodaniu nowej grupy słuchaczy usuń stary link uri statystyk z grupy frontonu. Po zakończeniu zapisz plik i uruchom ponownie HAProxy.
sudo systemctl restart haproxy
Następnie otwórz ponownie moduł równoważenia obciążenia, podając nowy numer portu i zaloguj się przy użyciu nazwy użytkownika i hasła podanego w pliku konfiguracyjnym.
http://load_balancer_public_ip:8181
Upewnij się, że wszystkie Twoje serwery nadal wyświetlają się na zielono, a następnie otwórz tylko adres IP modułu równoważenia obciążenia, bez numerów portów w przeglądarce.
http://load_balancer_public_ip/
Jeśli masz przynajmniej kilka różnych stron docelowych na swoich serwerach zaplecza, zauważysz, że za każdym razem, gdy ponownie ładujesz stronę, otrzymujesz odpowiedź od innego hosta. Możesz wypróbować różne algorytmy równoważenia w sekcji konfiguracji lub sprawdzić
Wniosek: moduł równoważenia obciążenia HAProxy
Gratulujemy pomyślnej konfiguracji modułu równoważenia obciążenia HAProxy! Nawet przy podstawowej konfiguracji równoważenia obciążenia można znacznie poprawić wydajność i dostępność aplikacji internetowej. Ten przewodnik jest jedynie wprowadzeniem do równoważenia obciążenia za pomocą HAProxy, które oferuje znacznie więcej niż to, co można opisać w przewodniku szybkiej konfiguracji. Zalecamy eksperymentowanie z różnymi konfiguracjami za pomocą
Używając wielu hostów do ochrony usługi internetowej z rezerwą, sam moduł równoważenia obciążenia może nadal stanowić punkt awarii. Możesz jeszcze bardziej poprawić wysoką dostępność, instalując zmienny adres IP między wieloma modułami równoważenia obciążenia. Więcej na ten temat znajdziesz w naszym
Więcej o kursie
Źródło: www.habr.com