Некоторые ошибки 502 в GCP HTTP Балансировка нагрузки

Наш балансировщик нагрузки возвращает 502 ошибки для некоторых запросов. Это очень низкий процент от общего числа запросов, у нас около 36000 запросов в час и около 40 ошибок в час, поэтому только 0,01% запросов возвращает ошибку.

Экземпляры исправны, когда возникает ошибка, и мы добавили это правило пересылки в брандмауэр для балансировщика нагрузки: 130.211.0.0/22 ​​tcp:1-5000 Применить ко всем целям

Это не очень серьезная проблема, потому что приложение допускает такие ошибки, но я хотел бы знать, почему они выдаются.

Любая помощь будет оценена.

5 ответов

Кажется, что нет простого решения для этого.

Как объясняет Майк Фотинакис в этом блоге (спасибо за эту информацию JasonG:)):

Оказывается, существует условие состязания между балансировщиком нагрузки HTTP(S) Google Cloud и временем ожидания активности по умолчанию NGINX в 65 секунд. Время ожидания NGINX может быть достигнуто в то же время, когда подсистема балансировки нагрузки пытается повторно использовать соединение для другого HTTP-запроса, что разрывает соединение и приводит к ответу 502 Bad Gateway от подсистемы балансировки нагрузки.

В моем случае я использую Apache с модулем mpm_prefork. Предлагаемое решение состоит в том, чтобы увеличить время ожидания активности соединения до 650 с, но это невозможно, поскольку каждое соединение открывает один новый процесс (поэтому это будет представлять собой большую потерю ресурсов).

ОБНОВИТЬ:
Похоже, что есть новая документация по этой проблеме на официальной странице документации балансировщика нагрузки (поиск "Таймауты и повторные попытки"): https://cloud.google.com/compute/docs/load-balancing/http/

Они рекомендуют установить значение KeepAliveTimeout равным 620 в обоих случаях (Apache и Nginx).

У меня была проблема с 502, которая была необъяснима после воссоздания балансировщика нагрузки и конфигурации бэкенда. Я воссоздал свою группу бэкэндов и экземпляров для неуправляемых экземпляров, и это, казалось, решило проблему для меня. Я не смог определить какие-либо проблемы в моей конфигурации в GCP:(

Но у меня было намного больше ошибок - 1/10. Существуют журналы балансировки нагрузки, которые сообщают вам причину, а документы объясняют причины.

Например, мои были: jsonPayload: { statusDetails: failed_to_pick_backend" @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBal‌ ancerLogEntry" }

Если вы используете nginx и он находится на POSTS, а ошибка сообщается как "backend_connection_closed_before_data_sent_to_client", это можно исправить, изменив время ожидания nginx. Смотрите этот отличный пост в блоге:

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

Иногда вы можете получить необъяснимые ошибки 502, потому что ваша AutoScalingGroup создает экземпляры по EVEN-логике. После того, как я перешел на БАЛАНСИРОВАННУЮ схему, 99% ошибок исчезли. Вы можете прочитать об этом: https://cloud.google.com/compute/docs/instance-groups/regional-mig-distribution-shape .

Проверка того, блокирует ли ваш брандмауэр брандмауэр IP-адрес cdn облака Google или нет (не только 130.211.0.0/22), все эти адреса можно найти здесь: https://cloud.google.com/compute/docs/faq

Оказывается, если у вас есть несколько портов в ваших «Внутренних службах», эта ошибка отображается, как описано (периодически без значимой обратной связи где-либо в каких-либо журналах).

Как видно на этом снимке экрана , когда вы создаете/редактируете свои серверные службы и связываете их с группами экземпляров, убедитесь, что здесь настроен только один порт.

Если у вас 443 и 80, ошибка, описанная в исходном вопросе, проявится и в этих обстоятельствах.

Другие вопросы по тегам