Podczas konfigurowania serwera proxy HA, jak zdecydować, jakie wartości przypisać do limitów czasu? Przeczytałem pół tuzina próbek na różnych blogach i wszyscy używają różnych limitów czasu i nikt nie dyskutuje dlaczego.
HAProxy wydaje się szczególnie zaniepokojony klientem, połączeniem i serwerem, o którym HAPRoxy wyświetla ostrzeżenie, jeśli pozostawisz całkowicie nieuzbrojony:
While not properly invalid, you will certainly encounter various problems
with such a configuration. To fix this, please ensure that all following
timeouts are set to a non-zero value: 'client', 'connect', 'server'.
Dokumentacja jest nieprzydatny w tym względzie: „sugeruje nieco powyżej wielokrotności 3 sekundy”, ale nie dlaczego chcesz wybrać wielokrotność 1 vs 100 lub 42.
RPM, którego używam (repozytorium Amazon Linux) ustawia następujące wartości domyślne:
timeout connect 10s
timeout client 1m
timeout server 1m
Dwie z nich to dokładne wielokrotności 3 sekund, co stanowi naruszenie jedynej oficjalnej porady, jaką widziałem.
Jeśli nie masz szczegółowych porad dotyczących tuningu, być może łatwiejsze pytanie brzmi: czego mogę się spodziewać po bardzo krótkich lub naprawdę długich przerwach?
Przedmowa
Od jakiegoś czasu dostrajam HAProxy i przeprowadziłem na nim wiele testów wydajności. Od 100 żądań HTTP / s do 50 000 żądań HTTP / s.
Pierwszą radą jest włączenie strony statystyk w HAProxy . POTRZEBUJESZ monitorowania, bez wyjątku. Będziesz także potrzebował dostrajania, jeśli zamierzasz przekroczyć 10 000 żądań / s.
Limity czasu są mylącą bestią, ponieważ mają ogromny zakres możliwych wartości, z których większość nie ma zauważalnej różnicy. Nie widziałem jeszcze, żeby coś zawiodło z powodu o 5% mniejszej lub o 5% wyższej. 10000 vs 11000 milisekund, kogo to obchodzi? Prawdopodobnie nie twój system.
Konfiguracja
Nie mogę z czystym sumieniem podać kilku liczb jako „najlepszych limitów czasu dla wszystkich”.
Zamiast tego mogę powiedzieć, NAJBARDZIEJ agresywne limity czasu, które są zawsze dopuszczalne w przypadku równoważenia obciążenia HTTP (S). Jeśli napotkasz niższe wartości, nadszedł czas, aby ponownie skonfigurować moduł równoważenia obciążenia.
klient limitu czasu:
Przeczytaj : Jest to maksymalny czas na otrzymanie nagłówków żądań HTTP od klienta.
Czasami 3G / 4G / 56k / satelita może być wolny. Nadal powinny być w stanie wysłać nagłówki HTTP w ciągu kilku sekund, NIE 30.
Jeśli ktoś ma tak złe połączenie, że potrzebuje więcej niż 30 sekund, aby poprosić o stronę (następnie więcej niż 10 * 30s, aby poprosić o 10 osadzonych obrazów / CSS / JS), uważam, że jest dopuszczalne, aby go odrzucić.
serwer limitu czasu:
Odczyt : Jest to maksymalny czas na otrzymanie nagłówków odpowiedzi HTTP z serwera (po otrzymaniu pełnego żądania klienta). Zasadniczo jest to czas przetwarzania z serwerów, zanim zacznie wysyłać odpowiedź.
Jeśli twój serwer jest tak wolny, że potrzeba ponad 30 sekund, aby zacząć udzielać odpowiedzi, to uważam, że dopuszczalne jest uznanie go za martwy.
Przypadek szczególny : udzielenie odpowiedzi na niektóre usługi RZADKIE bardzo intensywne przetwarzanie może zająć minutę lub dłużej. Ten limit czasu może wymagać znacznego zwiększenia w przypadku tego konkretnego zastosowania. (Uwaga: może to być przypadek złego projektu, użyj komunikacji w stylu asynchronicznym lub w ogóle nie używaj HTTP).
limit czasu połączenia:
Przeczytaj : Maksymalny czas, w którym serwer musi zaakceptować połączenie TCP.
Serwery są w tej samej sieci LAN co HAProxy, więc powinno być szybkie. Daj mu co najmniej 5 sekund, ponieważ tyle czasu może potrwać, gdy wydarzy się coś nieoczekiwanego (utracony pakiet TCP do retransmisji, serwer wymyślający nowy proces do przyjmowania nowych żądań, wzrost ruchu).
Przypadek szczególny : gdy serwery są w innej sieci LAN lub łączą niewiarygodne. Ten limit czasu może wymagać znacznego zwiększenia. (Uwaga: może to być przypadek złej architektury).
kontrola limitu czasu:
Przeczytaj : Podczas przeprowadzania kontroli poprawności serwer musi
timeout connect
zaakceptować połączenie, a następnietimeout check
udzielić odpowiedzi.Wszystkie serwery MUSZĄ mieć skonfigurowane sprawdzenie poprawności HTTP (S). To jedyny sposób, aby moduł równoważenia obciążenia wiedział, czy serwer jest dostępny. Kontrola zdrowia to prosta
/isalive
strona, na którą zawsze można odpowiedziećOK
.Daj temu limit czasu co najmniej 5 sekund, ponieważ tyle czasu może potrwać, gdy wydarzy się coś nieoczekiwanego (utracony pakiet TCP do ponownej transmisji, serwer wymusza nowy proces do przyjmowania nowych żądań, wzrost ruchu).
War Story : Wiele osób błędnie uważa, że serwer zawsze może odpowiedzieć na tę prostą stronę w 3 ms. Ustawiają agresywny limit czasu (<2000 ms) z agresywnym przełączaniem awaryjnym (2 nieudane kontrole = serwer nie działa). Z tego powodu widziałem, jak całe witryny się psują. Zazwyczaj występuje niewielki wzrost ruchu, serwery zaplecza stają się wolniejsze, kontrole zdrowia są opóźnione ... aż nagle wszystkie się skończyły razem, HAProxy uważa, że WSZYSTKIE serwery zginęły jednocześnie, a cała strona się zawiodła.
źródło