Как корректно завершить работу ESXi при отключении электричества?

Рейтинг:   / 5
ПлохоОтлично 

На работе была поставлена следующая задача: при отключении электричества все серверы должны корректно завершить свою работу и отключиться. Все серверы подключены к бесперебойнику APC Smart-UPS XL Modular 3000VA, который позволяет мониторить своё состояние через SNMP-подключение:

И для серверов, работающих на типовых операционных системах Windows/Linux/FreeBSD, решением является замечательная программа Apcupsd. В настройках подключения к ИБП надо прописать строчки: 

UPSTYPE snmp
DEVICE 10.100.xx.xx:161:APC:public 

Ну и указать параметры BATTERYLEVEL и MINUTES под себя.

И всё становится хорошо: серверы мониторят UPS по SNMP, и когда заряд батареи подходит к концу, программа Apcupsd инициирует корректное завершение работы ОС. Вот только проблема в том, что есть серверы ESXi, на которые Apcupsd не установить. А их тоже как-то надо выключать. Решение довольно простое. Для начала надо включить SSH-доступ на ESXi-сервере:

А дальше требуется найти какой-нибудь линуксовый сервер, на котором стоит Apcupsd и который будет выключаться параллельно с сервером ESXi. В моём случае это машина с Debian. На этой машине устанавливаю пакет plink

apt install putty-tools

plink (PuTTY Link) является консольной заменой приложения PuTTY и входит в состав его дистрибутива. Теперь пробую через него подключиться по SSH к серверу ESXi: 

plink root@10.100.xx.xx

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

Теперь надо отредактировать файл /etc/apcupsd/apccontrol. В нём надо найти секцию doshutdown и добавить одну строчку. Это должно выглядеть так (выделил зелёным добавленное): 

doshutdown)
        echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
        # сначала завершить работу сервера ESXi
        /usr/bin/plink -batch root@10.100.xx.xx -pw <пароль рута от ESXi> "/sbin/poweroff"
        /bin/sleep 5
        ${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
    ;;

Всё. Теперь сервер с Debian, увидев, что заряд батареи в ИБП низкий, сначала подключится по SSH к серверу ESXi и отправит ему команду завершения работы, затем уже сам завершит работу.

Что же касается завершения работы виртуальных машин, работающих на ESXi, то они тоже мониторят бесперебойник по SNMP, и здесь просто надо правильно настроить время завершения работы, чтобы сначала выключились виртуальные машины, а уже после них завершали работу «железные» серверы. Ну например, чтоб на виртуалках были параметры: BATTERYLEVEL 12 и MINUTES 10, а на «железных» серверах были параметры BATTERYLEVEL 10 и MINUTES 8.

Донаты принимаются на кошельки:

Yoomoney:
4100118091867315

Карта Т-Банк (бывший Тиньков):
2200 7017 2612 2077

Карта Альфа-Банк:
2200 1539 1357 2013

You have no rights to post comments

Вы здесь: Home Мои Заметки Как корректно завершить работу ESXi при отключении электричества?