Co to jest HAproxy?
Autor: Redakcja Domeny.ForSale Opublikowano
W skrócie: HAProxy to oprogramowanie, które przyjmuje ruch sieciowy i przekazuje go do wybranych serwerów obsługujących aplikację. Działa jako odwrotny serwer proxy i równoważnik obciążenia: pośredniczy w połączeniach oraz rozdziela ruch między instancje usługi. Pomaga obsługiwać większe obciążenie i omijać niesprawne serwery, ale samo wdrożenie HAProxy nie gwarantuje nieprzerwanej dostępności.
Jak działa HAProxy między użytkownikiem a aplikacją
Odwrotny serwer proxy, czyli reverse proxy, przyjmuje połączenia w imieniu serwerów aplikacji. Użytkownik łączy się z adresem usługi, za którym stoi HAProxy, zamiast bezpośrednio z konkretnym serwerem zaplecza. HAProxy wybiera miejsce docelowe i przekazuje tam ruch, a odpowiedź wraca przez tę samą warstwę pośredniczącą.
Równoważenie obciążenia, czyli load balancing, polega na rozdzielaniu ruchu między dostępne serwery. Nie musi oznaczać idealnie równego podziału: mocniejsza maszyna może otrzymywać więcej zadań, a serwer w trakcie prac technicznych może zostać wyłączony z obsługi nowych żądań.
W konfiguracji HAProxy występują dwa ważne pojęcia. Frontend określa, gdzie program przyjmuje połączenia, na przykład na porcie 443 dla HTTPS. Backend opisuje grupę serwerów docelowych oraz zasady ich wyboru. Jeden frontend może kierować ruch do różnych backendów zależnie od domeny lub ścieżki adresu.
Obsługa TCP, HTTP i szyfrowania
HAProxy może pracować na różnych poziomach komunikacji. W trybie TCP przekazuje połączenia bez podejmowania decyzji na podstawie treści żądań HTTP. Takie rozwiązanie przydaje się również przy usługach innych niż strony internetowe, o ile korzystają z TCP.
W trybie HTTP HAProxy rozumie elementy żądania, takie jak nazwa hosta, ścieżka i nagłówki. Może więc kierować ruch dla /api do serwerów API, a pozostałe żądania do aplikacji prezentującej stronę. Zasady te często zapisuje się jako ACL, czyli warunki dopasowujące ruch do określonych reguł.
Przy HTTPS istotne jest miejsce zakończenia TLS — protokołu zabezpieczającego połączenie:
- Zakończenie TLS w HAProxy: program obsługuje certyfikat i odszyfrowuje ruch, dzięki czemu może analizować HTTP. Połączenie do zaplecza może być ponownie szyfrowane.
- Przekazywanie zaszyfrowanego połączenia: TLS obsługuje serwer docelowy. HAProxy nie widzi wtedy ścieżek ani nagłówków HTTP, więc nie może używać ich do routingu.
Zakończenie TLS w HAProxy nie oznacza automatycznie szyfrowania połączenia z aplikacją. Ten odcinek trzeba skonfigurować osobno, uwzględniając również weryfikację certyfikatu serwera docelowego.
Jak rozdzielanie ruchu pomaga podczas awarii
Wyobraź sobie sklep internetowy działający na trzech serwerach aplikacji. HAProxy przyjmuje żądania klientów i rozdziela je metodą round robin, czyli kolejno między dostępne serwery. Alternatywą jest na przykład least connections, które preferuje serwer z mniejszą liczbą aktywnych połączeń; wybór metody zależy od charakteru ruchu.
HAProxy może wykonywać health checks, czyli okresowe testy dostępności zaplecza. Gdy jeden z serwerów przestaje przechodzić testy, program może wyłączyć go z przydzielania nowego ruchu, pozostawiając obsługę pozostałym maszynom. Aktywne połączenia z uszkodzonym serwerem mogą jednak zostać przerwane.
Sam test otwarcia portu nie potwierdza, że sklep potrafi obsłużyć zamówienie. Trafniejszy bywa test HTTP specjalnego punktu kontrolnego aplikacji, który sygnalizuje jej gotowość. Zakres testu trzeba dobrać ostrożnie: zbyt powierzchowny przeoczy awarię, a zbyt restrykcyjny może niepotrzebnie wyłączyć sprawne instancje.
Rozdzielanie ruchu wymaga też odpowiedniej budowy aplikacji. Jeśli koszyk klienta jest zapisany wyłącznie w pamięci jednego serwera, kolejne żądanie wysłane do innej maszyny może go nie odtworzyć. Pomaga wspólny magazyn sesji; przypinanie klienta do serwera, nazywane sticky sessions, nie chroni danych sesji przed awarią tej maszyny.
Czym HAProxy różni się od serwera WWW
Głównym zadaniem HAProxy jest pośredniczenie w komunikacji i zarządzanie ruchem, a nie typowe serwowanie plików witryny czy uruchamianie kodu aplikacji. W praktyce stoi przed serwerami WWW lub procesami aplikacyjnymi, które generują odpowiedzi. Nie zastępuje też bazy danych ani mechanizmu jej replikacji.
NGINX i Apache HTTP Server mogą również działać jako reverse proxy, a jednocześnie pełnić rolę serwera WWW. Wybór nie sprowadza się więc do pytania, które narzędzie jest ogólnie lepsze. HAProxy jest rozsądnym kandydatem, gdy potrzebna jest osobna warstwa równoważenia ruchu TCP lub HTTP, kontroli stanu zaplecza i reguł kierowania połączeń.
Przy jednej niewielkiej witrynie istniejący serwer WWW albo load balancer dostawcy chmury może wystarczyć. Dodanie HAProxy oznacza kolejny komponent wymagający aktualizacji, monitorowania i utrzymania konfiguracji.
Co sprawdzić przed wdrożeniem
Pojedyncza instancja HAProxy może stać się pojedynczym punktem awarii: jej niedostępność odetnie użytkowników nawet od sprawnych serwerów aplikacji. W systemie wymagającym wysokiej dostępności potrzebne są także redundantne instancje proxy oraz mechanizm przełączenia ruchu między nimi.
Przed uruchomieniem produkcyjnym sprawdź cztery kwestie:
- Testy zaplecza: czy wykrywają brak gotowości aplikacji, a nie tylko działający port?
- Limity i timeouty: ile połączeń system przyjmie i jak długo będzie czekał na odpowiedź?
- Adres klienta: jak aplikacja otrzyma prawdziwy adres IP i którym nagłówkom proxy może ufać?
- Obserwowalność: czy logi i metryki pozwalają rozpoznać błędy, opóźnienia oraz przeciążenie?
Dostępność funkcji i składnię konfiguracji potwierdź w oficjalnej dokumentacji używanej wersji HAProxy. Pierwszy test wykonaj na dwóch instancjach aplikacji: wyłącz jedną podczas kontrolowanego ruchu i sprawdź zarówno reakcję proxy, jak i zachowanie sesji użytkownika.
Zobacz też: Co to jest 2FA?
