Автомасштабирование AWS: как убить машины, которые не заняты

У нас есть группа автомасштабирования, которая порождает рабочие серверы. Каждый рабочий сервер запускает процессы сельдерея. Мы отслеживаем длину очереди сельдерея с помощью cloudwatch и в зависимости от длины очереди запускаем / убиваем сервер автоматического масштабирования. В этом ответе вы видите, как мы это делаем: Есть ли способ использовать длину очереди RabbitMQ, используемой Celery для запуска экземпляра в группе автомасштабирования?

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

При нормальной настройке всегда доступны 3 сервера. Группа автомасштабирования срабатывает только тогда, когда длина очереди превышает определенное число.Скажем, в очереди 10 заданий на 30 секунд.

Я не настроил ни маршрутизацию, ни приоритет в моей конфигурации сельдерея.

Вот проблема. Когда происходит уменьшение масштаба, я не совсем уверен, что убиваемый хост свободен, потому что ко всем рабочим относятся одинаково. Задачи иногда занимают до 5-10 минут, и я не хочу, чтобы сервер был убит, если он находится в процессе выполнения задачи

. Пока я не сталкивался с какими-либо проблемами. Но я боюсь, что некоторые из наших клиентов могут столкнуться с проблемой из-за этой

1
задан 28 January 2019 в 15:42
1 ответ

Вы можете использовать событие жизненного цикла для выполнения настраиваемых действий, когда экземпляр находится в состоянии «завершение: ожидание».

enter image description here

Создайте обработчик жизненного цикла в соответствии с шагами на на этой странице , скопировано ниже. В этом состоянии скрипт или Lambda могут держать экземпляр открытым до тех пор, пока не будут выполнены все задания. На странице, на которую я указал, есть дополнительная информация о периодах восстановления.

Группа Auto Scaling реагирует на события масштабирования запуском экземпляры и события масштабирования путем завершения экземпляров.

Хук жизненного цикла переводит экземпляр в состояние ожидания (Ожидание: Ожидание или Завершение: Подождите). Экземпляр приостановлен, пока вы не продолжите или период тайм-аута истекает.

Вы можете выполнить настраиваемое действие, используя одно или несколько из следующих параметры:

Определите цель CloudWatch Events для вызова лямбда-функции, когда происходит действие жизненного цикла. Функция Lambda вызывается, когда Amazon EC2 Auto Scaling отправляет событие для действия жизненного цикла в CloudWatch События. Событие содержит информацию об экземпляре, который запуск или завершение, а также токен, который вы можете использовать для управления действие жизненного цикла.

Определите цель уведомления для ловушки жизненного цикла. Amazon EC2 Авто Масштабирование отправляет сообщение цели уведомления. Сообщение содержит информацию об экземпляре, который запускается или завершение и токен, который можно использовать для управления жизненным циклом действие.

Создайте сценарий, который запускается в экземпляре при запуске экземпляра. В скрипт может управлять действием жизненного цикла, используя идентификатор экземпляра на котором он выполняется.

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

2
ответ дан 3 December 2019 в 20:10

Теги

Похожие вопросы