Проверки и автоматическое восстановление виртуальных машин в группе
Instance Groups регулярно проверяет, что виртуальные машины в вашей группе работают корректно. Если ВМ остановилась или приложение слишком долго отвечает, Instance Groups попробует восстановить эту ВМ — перезапустит ее или создаст новую, в зависимости от политики восстановления. ВМ будут автоматически восстанавливаться согласно политике развертывания.
Примечание
Если для группы ВМ приостановлены процессы (статус PAUSED
), ВМ не восстанавливаются.
Типы проверок
Для автоматического восстановления Instance Groups выполняет проверки двух типов:
Не путайте эти проверки с проверкой состояния от балансировщика нагрузки, которая выполняется, если группа ВМ интегрирована с Yandex Network Load Balancer или Yandex Application Load Balancer. Проверка от балансировщика влияет только на процесс развертывания: когда во время запуска ВМ перейдет в статус OPENING_TRAFFIC
, Instance Groups будет ждать, пока в балансировщике состояние ВМ станет HEALTHY
, после этого Instance Groups прекратит следить за состоянием ВМ в балансировщике. При этом для проверки от балансировщика тоже можно настроить автоматическое восстановление ВМ. Подробнее см. в разделе Проверки состояния от балансировщиков.
Проверка, что ВМ работает
Instance Groups раз в несколько секунд автоматически проверяет статус ВМ в Compute Cloud. Если ВМ остановилась или произошла ошибка (статусы STOPPED
, ERROR
, CRASHED
), Instance Groups попробует перезапустить ее или создаст новую ВМ, в зависимости от политики восстановления. ВМ будут восстанавливаться в зависимости от политики развертывания.
Проверка состояния приложения на ВМ
Эта проверка позволит обнаружить, что приложение на вашей ВМ зависло, завершило работу или слишком долго отвечает. Вы можете включить проверку состояния приложения при создании или изменении ВМ.
Если вы включили эту проверку, Instance Groups будет с заданной периодичностью опрашивать статус приложения на ВМ все время, пока группа ВМ находится в статусе ACTIVE
.
Рекомендации для групп с балансировщиком нагрузки
Если группа ВМ интегрирована с Network Load Balancer или Application Load Balancer, то для проверки в Instance Groups выставляйте более мягкие настройки, чем для проверки состояния в балансировщике (подробнее о проверках см. в документации Network Load Balancer или Application Load Balancer). Балансировщик распределяет нагрузку на приложение, а Instance Groups только следит за работоспособностью приложения.
Например, если в балансировщике вы задали время ожидания ответа — 1 секунда, то в Instance Groups выставьте 30 секунд. Если приложение не отвечает 3-5 секунд, возможно, оно не справляется с текущим потоком трафика. А если приложение не отвечает более 30 секунд, скорее всего, оно совсем не работает и ВМ необходимо восстановить.
Настройки проверок состояния приложения
Проверки состояния приложения на ВМ можно настроить в консоли управления или описать в YAML-спецификации группы, чтобы передать спецификацию через один из программных инструментов — интерфейс командной строки (CLI) или API Yandex Cloud.
Примечание
В YAML-спецификации можно настроить несколько разных проверок, например запросы на разные порты, — ВМ в группе должна будет проходить их все, чтобы считаться «здоровой». Через консоль управления настраивается только одна проверка.
Настройки можно указать при создании или изменении группы.
Ниже описаны поля с настройками в YAML-спецификации и соответствующие им поля в консоли управления.
health_checks_spec:
health_check_specs:
- interval: 2s
timeout: 1s
unhealthy_threshold: 2
healthy_threshold: 2
http_options:
port: 8081
path: "/_hz"
- interval: 2s
timeout: 1s
unhealthy_threshold: 2
healthy_threshold: 2
tcp_options:
port: 8080
max_checking_health_duration: 25s
Поля и опции в консоли управления находятся в блоке Проверка состояний на страницах создания и редактирования группы ВМ.
Ключ в YAML Поле или опция в консоли |
Описание |
---|---|
health_checks_spec Активировать |
Настройки проверок состояния приложений. Если ключа нет в YAML-спецификации или опция в консоли управления отключена, проверки не будут выполняться. |
health_checks_specs |
Список проверок состояния. Если проверки включены, в списке должна быть хотя бы одна проверка. В YAML-спецификации можно настроить несколько проверок, в консоли управления — только одну. |
interval Интервал, c |
Интервал между двумя последовательными проверками от 1 до 300 секунд. Должен быть больше времени ожидания хотя бы на 1 секунду. Значение по умолчанию — 2 секунды (2s ). |
timeout Время ожидания, c |
Таймаут проверки от 1 до 60 секунд: если ВМ не ответила на проверку в течение этого времени, она не прошла проверку. Значение по умолчанию — 1 секунда (1s ). |
unhealthy_threshold Порог неработоспособности |
Количество последовательных непройденных проверок, после которого ВМ считается «нездоровой» и будет автоматически восстановлена. Возможные значения — 0 и от 2 до 10. Значение по умолчанию — 2. Значение 0 равносильно значению по умолчанию. |
healthy_threshold Порог работоспособности |
Количество последовательных пройденных проверок, после которого ВМ считается «здоровой». Возможные значения — 0 и от 2 до 10. Значение по умолчанию — 2. Значение 0 равносильно значению по умолчанию. |
http_options Тип — HTTP |
Настройки проверки состояния по протоколу HTTP. Проверка состояния проводится либо по HTTP, либо по TCP, поэтому в описании проверки в YAML-конфигурации должен быть только один из ключей http_options и tcp_options . |
port Порт |
Порт от 1 до 65535, на который будут отправляться проверочные запросы по HTTP. |
path Путь |
Путь, по которому будут отправляться проверочные запросы по HTTP. |
tcp_options Тип — TCP |
Настройки проверки состояния по протоколу TCP. Проверка состояния проводится либо по HTTP, либо по TCP, поэтому в описании проверки в YAML-конфигурации должен быть только один из ключей http_options и tcp_options . |
port Порт |
Порт от 1 до 65535, на который будут отправляться проверочные запросы по TCP. |
max_checking_health_duration Время ожидания первой проверки |
Время, в течение которого новая ВМ в группе (добавленная в группу или запущенная после остановки) должна пройти проверки состояния и стать «здоровой». Возможные значения — 0 и от 1 секунды. Значение по умолчанию — 0: время ожидания не ограничено. |
Особенности автоматического восстановления
Восстановление и политики развертывания
Для восстановления ВМ Instance Groups может пересоздавать или перезапускать ВМ. Какой метод восстановления использовать, определено настройками политики развертывания.
-
Создание новых ВМ
Instance Groups будет создавать новые ВМ вместо тех, которые не прошли проверку, если в настройках политики развертывания разрешено превышение целевого размера группы. Задать максимальное количество ВМ, на которое разрешено превысить целевой размер группы, можно с помощью параметраmax_expansion
. Допустимые значения: от0
до100
. Тогда Instance Groups сначала создаст новую ВМ, дождется, пока она пройдет все проверки, а затем удалит ВМ, которая не прошла проверку.При приведении количества ВМ в группе к целевому значению, созданные по квоте
max_expansion
ВМ могут остаться в группе, в то время как ВМ, существовавшие в группе до этого, могут быть удалены, даже если они прошли все проверки. -
Перезагрузка ВМ
Instance Groups будет перезагружать ВМ, которые не прошли проверку, если в настройках политики развертывания разрешено уменьшение целевого размера группы. Задать максимальное количество ВМ, которые разрешается сделать недоступными одновременно, можно с помощью параметраmax_unavailable
. Допустимые значения: от0
до100
. Instance Groups будет стремиться не превышать этого значения при автоматическом восстановлении.Это ограничение не действует на ВМ в статусах
CRASHED
,ERROR
иSTOPPED
, так как в этих случаях ВМ уже считается недоступной и должна быть перезагружена немедленно.
Если одновременно задать значения max_expansion
и max_unavailable
, Instance Groups будет использовать оба метода восстановления.
ВМ, которая полностью загрузилась и находится в статусе RUNNING_ACTUAL
или RUNNING_OUTDATED
, считается запущенной с точки зрения квоты max_unavailable
, даже если она не прошла проверку состояния. Чтобы автоматически остановить такую ВМ, требуется свободная квота max_unavailable
.
Дополнительные ВМ создаются по квоте max_expansion
только в тех случаях, когда не хватает квоты max_unavailable
. Другими словами, перезагрузка ВМ приоритетнее, чем создание новых ВМ.
Например, вы указали
max_expansion = 1
иmax_unavailable = 1
. Когда одна из ВМ не пройдет проверку, Instance Groups начнет перезапускать эту ВМ. Если в это же время еще одна ВМ не пройдет проверку, Instance Groups не сможет ее перезагрузить из-за превышения параметраmax_unavailable
. Поэтому начнется создание новой машины параллельно с перезапуском первой ВМ.
Чтобы ограничить скорость восстановления и развертывания, вы также можете задать:
-
Максимальное количество ВМ, которые вводятся в эксплуатацию одновременно, в значении параметра
max_creating
. Учитываются создаваемые и запускаемые ВМ в статусахCREATING
иSTARTING
.Допустимые значения: от
0
до100
. Значение0
— любое количество ВМ в рамках допустимых значений. -
Максимальное количество ВМ, которые выводятся из эксплуатации одновременно, в значении параметра
max_deleting
. Учитываются останавливаемые ВМ в статусеSTOPPING
, так как при удалении ВМ Instance Groups сначала останавливает ее.Допустимые значения: от
0
до100
. Значение0
— любое количество ВМ в рамках допустимых значений.
Изменение статуса ВМ при восстановлении
Instance Groups не будет восстанавливать ВМ, если это уже не требуется.
Например, если в группе из 10 ВМ все 10 стали недоступны, то при
max_unavailable = 3
Instance Groups перезапустит первые три ВМ. Если в это время остальные семь ВМ снова станут работоспособны, то Instance Groups не будет перезапускать их.При
max_expansion = 3
Instance Groups запустит создание трех новых ВМ. Старые ВМ не удаляются до тех пор, пока не будут созданы новые. Если в процессе создания все ВМ в группе снова станут работоспособны, то Instance Groups отменит создание новых ВМ.При приведении количества ВМ в группе к целевому значению, созданные по квоте
max_expansion
ВМ могут остаться в группе, в то время как ВМ, существовавшие в группе до этого, могут быть удалены, даже если они работоспособны.
Восстановление при обновлении конфигураций ВМ
Восстановление ВМ имеет более высокий приоритет, чем обновление конфигурации ВМ.
Допустим, у вас группа из 100 ВМ, а значение
max_unavailable = 1
. Когда вы обновите конфигурацию ВМ в группе, Instance Groups будет по очереди перезапускать машины, обновляя конфигурацию на них.Если в этот момент одна из ВМ не пройдет проверку состояния приложения, то Instance Groups поставит ее первой в очереди на перезапуск.
Восстановление при изменении размера группы
При уменьшении целевого размера группы в первую очередь удаляются те ВМ, которые не прошли проверку (если такие есть).
При увеличении целевого размера группы новые ВМ будут создаваться параллельно с восстановлением ВМ, не прошедших проверку, если это позволяют параметры max_creating
и max_expansion
:
Допустим, в группе 2 из 4 ВМ не прошли проверку состояния приложения. В этот момент целевой размер группы увеличился до 6 ВМ. Две ВМ необходимо создать, еще две восстановить.
Если
max_expansion = 1
, аmax_creating
не задано, то Instance Groups начнет создавать сразу три ВМ: две в рамках увеличения группы, одну в рамках восстановления.
Восстановление прерываемых ВМ
Автоматическое восстановление прерываемых ВМ будет происходить только, если в зоне доступности для этого достаточно вычислительных ресурсов. Если ресурсов недостаточно, Instance Groups продолжит автоматическое восстановление, когда появятся свободные ресурсы, но этот процесс может занять продолжительное время.
Прерываемые ВМ должны быть принудительно остановлены через 24 часа с момента запуска. Однако в таком случае есть риск, что вся группа ВМ перезапустится одновременно и перестанет обслуживать нагрузку запущенных приложений. Чтобы избежать этого, Instance Groups останавливает прерываемые ВМ в группе не ровно через 24 часа, а через случайный момент времени — от 22 до 24 часов.