Как корректно завершить работу 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

BTC:
bc1qzw9vam8mv6derwscxl0vrnd6m9t2rpjg273mna

ETH / BNB BSC / Polygon MATIC:
0x5cc07FF76490350ac6112fbFdA1B545Bc794602F

Tron:
TJUz8sJr9XYMjVqzmFNnCzzRWfPa57X2RV

USDT/USDC в сетях ETH/BSC/Polygon:
0x5cc07FF76490350ac6112fbFdA1B545Bc794602F

USDT в сети TRX (Tron):
TJUz8sJr9XYMjVqzmFNnCzzRWfPa57X2RV

LTC:
LRMZaFCSyCT6FUF62WEX1BokWV7v2dh2zo

Doge:
DTEnGLZRps9XaWNtAhchJWSeD4uTNDRxg7

XMR:
4A6uP1WxEc7HktToZFyiJuK6YmjdL8bSn2aY653qPwABhT4Y56iFuedgHcmpvLwWE55u8qkjGc715ZJs761FqedA8gkgznr

TON:
UQAdSPiWIDx2Q1VIeezkUV3s4sNlZM90w2ohSO6bD2-okwgY

You have no rights to post comments

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