Load balancing w nginx: upstream, metody i health checki

Load balancing w nginx

Load balancer nginx: upstream, metody, wagi, health checki | We.Inc

Skonfiguruj nginx jako load balancer: blok upstream, round robin, least_conn, ip_hash i hash, wagi, max_fails i fail_timeout, serwery zapasowe, plus generator konfiguracji.

Aby rozkładać ruch w nginx, wypisz serwery aplikacji w bloku upstream i skieruj proxy_pass na jego nazwę. Żądania są rozdzielane metodą round robin, chyba że dodasz least_conn, ip_hash, hash lub random. Każda linia server może mieć weight, max_fails i fail_timeout dla pasywnych health checków oraz flagi backup lub down.

Metody load balancingu w nginx

Rozkładanie ruchu na kilka kopii aplikacji to jedno z najstarszych zadań nginx, a cała konfiguracja mieści się w kilkunastu liniach. Generator poniżej tworzy blok upstream z listy serwerów, ostrzega przed kombinacjami, które nginx odrzuca, i pokazuje udział każdego serwera w żądaniach, gdy działają wagi. Zestawienie pod nim opisuje każdy parametr server wraz z wartością domyślną.

Najczęściej zadawane pytania

Czy nginx open source ma aktywne health checki?

Nie. Dyrektywa health_check należy do komercyjnego NGINX Plus. nginx open source polega na pasywnych sprawdzeniach: jeśli żądanie do serwera zawiedzie max_fails razy w ciągu fail_timeout, serwer jest pomijany przez fail_timeout, a potem ponownie testowany prawdziwym ruchem.

Jakie są wartości domyślne max_fails i fail_timeout?

max_fails domyślnie wynosi 1, a fail_timeout 10 sekund. Jedna nieudana próba wyłącza więc serwer na dziesięć sekund. Ustawienie max_fails=0 wyłącza zliczanie dla tego serwera.

Jak zrobić sticky sessions w nginx?

Użyj ip_hash, aby trzymać każdy adres klienta na jednym serwerze, albo hash ze zmienną cookie, taką jak $cookie_session, dla dokładniejszej kontroli. Dyrektywy sticky oparte na cookies istnieją tylko w wersji komercyjnej.

Co robi parametr weight?

Zmienia liczbę żądań, które serwer dostaje w stosunku do pozostałych. Przy wagach 3, 1 i 1 pierwszy serwer w round robin otrzymuje około trzech z każdych pięciu żądań. Domyślna waga to 1.

Czy nginx może rozkładać połączenia WebSocket?

Tak. Skieruj proxy_pass na upstream i przekazuj nagłówki Upgrade i Connection. least_conn lepiej pasuje do długo żyjących socketów niż round robin, bo liczy, ile połączeń każdy serwer już utrzymuje.

Gdzie umieścić poszczególne elementy

Pasywne health checki krok po kroku

Parametry server i ich wartości domyślne

Parametry linii server wewnątrz upstream

Kompletne przykłady

Round robin z zapasowym serwerem

Dwa główne serwery dzielą obciążenie; trzeci odpowiada tylko wtedy, gdy oba nie działają.

least_conn z ponownym użyciem połączeń

keepalive przechowuje bezczynne połączenia z backendami; dwie linie proxy sprawiają, że to działa.

Powinowactwo cache według URL

Każdy URL trafia zawsze na ten sam serwer cache; consistent zachowuje większość przypisań, gdy serwer zostanie dodany lub usunięty.

Nazwa upstream

Metoda

Round robin (domyślnie)

Klucz hash

Bezczynne połączenia keepalive (0 = brak)

Serwery

Adres i port

Waga

fail_timeout (s)

Udział

Usuń serwer {n}

Dodaj serwer

nginx odrzuca serwery backup przy hash, ip_hash i random. Usuń flagę backup albo zmień metodę.

Każdy główny serwer jest oznaczony jako down, więc nic nie może odbierać ruchu.

Konfiguracja

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony