Можем ли мы сделать Google Cloud Load Balance, чтобы повторить запрос при ошибке? - PullRequest
0 голосов
/ 27 февраля 2019

иногда несколько экземпляров, просто отвечающих с ошибкой 5xx, я хочу знать, есть ли решение для перенаправления запроса на другой экземпляр?

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Относительно того, что упомянул Энтони, и на основании официальной документации 1 :

"HTTP (S) повторяет попытку балансировки нагрузки, которая в некоторых случаях не выполняла запросы GET, например, когдавремя ожидания ответа исчерпано. "

Здесь вы можете найти официальное руководство по настройке времени ожидания ответа 2 .

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

Нет порядка приоритетов, для которого экземпляр будет обрабатывать запрос, подсистема балансировки нагрузки отправит запрос только исправным бэкэндам.Выбор бэкэнда будет зависеть от некоторых определяемых вами параметров, таких как загрузка процессора.Если балансировщик нагрузки отвечает 5xx, это означает, что нет работоспособного бэкэнда.

Вам нужно будет работать над устранением этих ошибок 5xx: возможно, бэкэнды не могут обработать объем полученной нагрузки, веб-серверне прослушивает правильные порты или, возможно, проверки работоспособности настроены неправильно.


0 голосов
/ 28 февраля 2019

Согласно документации GCP LB, повторяются только тайм-ауты, и только в особых случаях.Ответы с кодом ошибки не повторяются.

Чтобы обойти это, вы можете создать проверку работоспособности HTTP для группы экземпляров (есть также проверки работоспособности https, tcp и http2).

Создание проверки работоспособности HTTP

$ HOST_HEADER=www.example.com
$ gcloud beta compute health-checks create http hc-http-port-80 \
    --description="Simple HTTP port 80 health check" \
    --check-interval=5s \
    --timeout=5s \
    --healthy-threshold=2 \
    --unhealthy-threshold=2 \
    --port=80 \
    --host=${HOST_HEADER}

После создания вы можете связать его с вашим LB

$ cloud compute backend-services update [BACKEND_SERVICE_NAME] \
    --region [REGION] \
    --health-checks [HEALTH_CHECK_NAME]

Найдите идентификатор бэкэнд-сервиса Если вы не знаете название бэкэнд-сервиса, вы можете получить его с помощью этой команды

gcloud compute backend-services list \
    --filter="loadBalancingScheme=EXTERNAL" \
    --filter="protocol=HTTP"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...