Назад | Перейти на главную страницу

Автоматическое масштабирование Elastic Beanstalk - это добавление узлов перед перемещением приложения с рабочей площадки на текущую.

Когда правила автомасштабирования в моей группе запускают развертывание нового экземпляра EC2, или, например, я изменяю размер экземпляра, чтобы имитировать поведение узла, развернутого, но добавленного в балансировщик нагрузки до того, как приложение будет готово.

Начнется развертывание, и скрипты в .ebextensions начнут выполняться. Папка с названием current пуста, поскольку это первое развертывание на этом узле, поэтому при доступе к этому узлу в браузере отображается ошибка 403 Forbidden.

В конце концов, развертывание приложения завершается, и папка ondeck перемещается в текущую, как и ожидалось, после чего приложение работает, и ошибка 403 исчезает.

Проблема здесь в том, что узел добавляется в подсистему балансировки нагрузки до завершения этого процесса, поэтому часть трафика распределяется на неисправные узлы.

Как я могу остановить это? Я делаю что-то неправильно?

Балансировщик нагрузки начнет отправлять трафик на новый экземпляр EC2, как только этот экземпляр начнет проходить проверку работоспособности балансировщика нагрузки. Я предполагаю, что ваш балансировщик нагрузки настроен с проверкой состояния TCP ping. Это означает, что как только новый экземпляр начинает отвечать на эхо-запросы через порт 80, он считается исправным и готовым к приему запросов. Однако, как вы заметили, это произойдет до того, как приложение будет полностью развернуто и действительно не получит хороших ответов.

Решение состоит в том, чтобы настроить балансировщик нагрузки на выполнение проверки работоспособности с помощью HTTP-запросов, чтобы новый экземпляр EC2 не считался исправным, пока ваше приложение не будет запущено и успешно не отвечает на веб-запросы. На консоли AWS найдите раздел Load Balancers на панели инструментов EC2 и выберите балансировщик нагрузки для своей среды Elastic Beanstalk. Вы увидите вкладку «Проверка работоспособности» на панели конфигурации балансировщиков нагрузки, где вы можете изменить настройки проверки работоспособности и переключиться на HTTP-запросы в качестве метода проверки связи.

Если ваше приложение настроено для обработки только запросов, отправленных через имя рабочего хоста, вы можете обнаружить, что проверка работоспособности HTTP всегда не выполняется. Балансировщик нагрузки отправляет запросы на конкретный URL-адрес экземпляра EC2, и если ваше приложение отвечает на эти запросы с ошибками или 30-кратным перенаправлением, балансировщик нагрузки сочтет его неисправным. В этом случае вам нужно будет добавить исключение в фильтрацию вашего запроса, чтобы разрешить успешное выполнение запроса проверки работоспособности независимо от имени хоста. Например, добавьте в свое приложение статический пустой файл elbhealthcheck.html (или как вам угодно назовите его) и разрешите запросы для этого файла с любым именем хоста. Затем настройте проверку работоспособности балансировщика нагрузки на использование этого URL-адреса в его HTTP-запросе, и все будет в порядке.