2016-12-23 17 views
10

Nasz moduł równoważenia obciążenia zwraca błędy 502 dla niektórych żądań. Jest to bardzo niski odsetek wszystkich zapytań, mamy około 36000 zgłoszeń na godzinę i około 40 błędów na godzinę, więc tylko 0,01% zgłoszeń zwraca błąd.Niektóre błędy 502 w GCP HTTP Równoważenie obciążenia

Przypadki są zdrowe, gdy wystąpi błąd i dodaliśmy tę regułę przekierowania do zapory dla równoważenia obciążenia: 130.211.0.0/22 ​​tcp: 1-5000 Zastosuj do wszystkich celów

to nie jest bardzo poważny problem, ponieważ aplikacja toleruje takie błędy, ale chciałbym wiedzieć, dlaczego są one podawane.

Każda pomoc zostanie rozpatrzona.

Odpowiedz

4

Miałem problem w/502, który był niewytłumaczalny po odtworzeniu load balancera i konfiguracji backendu. Odtworzono moją instancję instancji & dla niezarządzanych instancji i wydawało mi się, że problem został rozwiązany. Nie udało mi się zidentyfikować żadnych problemów w mojej konfiguracji w GCP :(

Ale miałem o wiele więcej błędów - 1/10. Istnieją logi równoważenia obciążenia, które powiedzą ci, co jest przyczyną, i docs wyjaśniają przyczyny .

Np moje były: jsonPayload: {statusDetails: "failed_to_pick_backend" @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBal ancerLogEntry"}

Jeśli używasz nginx i jest na POSTS, a błąd jest zgłaszany jako "backend_connection_closed_before_data_sent_to_client" może zostać naprawiony przez zmianę limitów czasu twojego nginx. Zobacz ten doskonały blog:

https://blog.percy.io/tuning-nginx-behind-google-cloud-platform-http-s-load-balancer-305982ddb340#.btzyusgi6

+0

Używam Apache, ale tak, błędy są na żądania POST i błąd jest "backend_connection_closed_before_data_sent_to_client". Zmieniłem konfigurację KeepAliveTimeout Apache na 65 sekund, a problem został rozwiązany. Dziękujemy za pomoc JasonG! :) – Jordi

+0

Wydaje się, że jest mniej błędów, ale wciąż się dzieje. Sprawdzę to za kilka godzin. – Jordi

+0

Myślę, że potrzebujesz limitu czasu na dłużej niż 600 sekund. – JasonG

7

Wygląda na to, że nie ma na to łatwego rozwiązania.

Jak Mike Fotinakis wyjaśnia w this blog (dziękuję tej informacji JasonG :)):

Okazuje się, że istnieje sytuacja wyścigu między HTTP Google Cloud (S) równoważenia obciążenia i nginx za zwłokę utrzymanie -aktywny limit czasu wynoszący 65 sekund. Limit czasu NGINX może zostać osiągnięty w tym samym czasie, gdy moduł równoważenia obciążenia próbuje ponownie użyć połączenia dla innego żądania HTTP, co powoduje przerwanie połączenia i powoduje 502 odpowiedź złych bramek z modułu równoważenia obciążenia.

W moim przypadku używam Apache'a z modułem mpm_prefork. Proponowane rozwiązanie polega na zwiększeniu limitu czasu utrzymywania połączenia do 650s, ale nie jest to możliwe, ponieważ każde połączenie otwiera jeden nowy proces (więc oznaczałoby to wielkie marnowanie zasobów).

UPDATE:
Wydaje się, że istnieje jakaś nowa dokumentacja o tym problemie na oficjalnej stronie dokumentacji równoważenia obciążenia (szukaj „czasów oczekiwania i prób”): https://cloud.google.com/compute/docs/load-balancing/http/

Zalecają, aby ustawić wartość KeepAliveTimeout do 620 w obu przypadkach (Apache i Nginx).

Powiązane problemy