Выключение VMware ESXi запускается ИБП APC, подключенным через USB

Я отправляю несколько серверов ESXi 5.1 в удаленные офисы, где они будут получать питание от ИБП APC.

Я хотел бы, чтобы ИБП инициировал отключение подключенного сервера - тогда я бы положился на конфигурацию ESXi, чтобы позаботиться о выключении / приостановке виртуальных машин, размещенных на нем.

Я вижу, что у APC есть решение, задокументированное с использованием их PowerChute Network Shutdown, но это включает в себя настройку дополнительного сервера для каждого офиса и требует сетевых карт на каждом ИБП. Обычно мы используем ИБП без сетевой карты (например, Back-UPS Pro) - они поставляются с разъемом USB, и они легко доступны в местах, где находятся наши офисы.

Как я могу подключить ИБП к хосту ESXi через USB, чтобы ESXi обнаружил перебои в питании и затем действовал соответствующим образом? Кому-нибудь удалось это сделать.

9 ответов

Решение

Согласно APC, это невозможно, и вам требуется отключение Powerchute Network. Мы пробовали это несколько раз с USB и не нашли решения.

VMWare имеет здесь информацию об использовании одобренного APC решения.

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

Да, это возможно. Вот подробности моей аналогичной установки.

Конфигурация оборудования: APC Smart-UPS 1500 подключен к хосту ESXi 5.1 через USB. Виртуальная машина Linux, работающая на этом хосте ESXi. ИБП подключен к этой виртуальной машине с помощью опции ESXi USB pass through.

Конфигурация программного обеспечения: мастер NUT (Network UPS Tools), работающий на виртуальной машине, и собственный ведомый NUT ESXi, работающий на хосте ESXi.

Логика выключения: VM запускает драйверы ИБП, которые отвечают за связь с ИБП через USB. Процесс upsd подключается к ИБП через драйвер usbhid-ups и отслеживает состояние ИБП. Главный процесс upsmon, запущенный на той же машине, подключается к upsd и инициирует завершение работы. На хосте ESXi запущен второй экземпляр upsmon, который также подключается к той же виртуальной машине upsd через внутреннюю сеть.

При сбое питания происходит следующая последовательность:

  1. UPS через usbhid-ups сообщает upsd о сбое питания.
  2. (необязательно, полезно, если вы хотите выключить через несколько минут вместо низкого заряда батареи) upsmon на виртуальной машине запускает 5-минутный таймер с повышением скорости. Таймер отменяется, если питание восстановлено.
  3. Когда срабатывает таймер или когда ИБП сообщает о низком заряде батареи, upsmon поднимает флаг FSD (принудительное отключение) до upsd.
  4. В автономной конфигурации NUT флаг FSD отключит машину. Но здесь команда shutdown заменяется простой регистрацией, такой как "Я должен завершить работу сейчас, но вместо этого я жду хоста". И ничего не делает.
  5. Флаг FSD также считывается приложением ESXi upsmon, которое инициирует отключение хоста ESXi.
  6. Хост ESXi отключает все виртуальные машины одну за другой. Важно то, что виртуальная машина, которая запускает upsd, должна быть отключена последней (используя конфигурацию последовательности запуска / выключения ESXi).
  7. Важно: на этой виртуальной машине должны быть установлены инструменты VM ware. Когда он получает команду гостевого выключения от хоста, запускается скрипт выключения vmware-tools. Этот скрипт проверяет наличие флага /etc/killpower. Если флажок отсутствует, он ничего не делает (это означает, что пользователь отключил linux, а не событие ИБП). Но если флаг существует (FSD активен), то этот сценарий отправляет ИБП команду отложенного отключения питания (скажем, через 3 минуты).
  8. После запуска скрипта vmware-tools гостевая виртуальная машина отключается.
  9. ESXi видит последнее состояние выключения виртуальной машины и отключается (это занимает около 1 минуты, потому что другие машины сейчас не работают).
  10. Через 2 оставшиеся минуты ИБП отключает питание.
  11. Когда питание восстанавливается, ESXi запускается и включает все виртуальные машины. Сначала необходимо запустить ИБП (та же конфигурация, что и при отключении).

Загрузки:

NUT для Linux может быть установлен из пакета.

Собственный клиент NUT для сервера ESXi можно загрузить по последней ссылке на этой странице: http://www.networkupstools.org/download.html

Некоторые мои скрипты и файлы conf находятся здесь (показаны только измененные строки): http://pastebin.com/KkEeanK1

Примечания:

Конечно, есть еще детали, и мне потребовалось некоторое время, чтобы все заработало как надо. Но сейчас это работает очень хорошо. Эта система учитывает случаи, когда вы просто выключаете виртуальную виртуальную машину изнутри (сценарий vmware-tools не запускается) или если это отключение виртуальной машины, инициированное хостом ESXi (без флага /etc/killpower, поэтому загрузка ИБП не отключается), или если это отключение ESXi (то же самое). Единственное, что важно - это запустить эту виртуальную машину как можно скорее после загрузки хоста и завершить ее в последний раз (поэтому время простоя хоста предсказуемо - как сказано выше, для меня это составляет около 1 минуты и еще 2 минуты, которые я оставляю на всякий случай).

Мой ИБП, контролирующий виртуальную машину Linux, также является сервером общего доступа Samba/NFS для резервного копирования, сервером NAT/DHCP для виртуальных машин и некоторыми другими облегченными службами. Требуется около 22 МГц общих ресурсов процессора ESXi и около 10 МБ активной памяти в режиме ожидания. Благодаря использованию NUT вы можете при необходимости питать больше устройств от одного ИБП, и все они могут быть отключены изящно. Не требуется PowerChute и / или дорогая карта сетевого монитора.

Супер вопрос. На самом деле это можно сделать довольно хорошо - по крайней мере, на некоторых установках. Я попробовал следующий рецепт на нескольких хостах ESXi 5.5. По сути, решение выглядит так:

  1. Разрешите SSH-доступ на хосте ESXi
  2. Создайте виртуальную машину Linux - я использую Ubuntu. Вам нужна только минимальная настройка - без графического интерфейса или чего-либо еще.
  3. Подключите устройство APC через USB к хосту ESXi и передайте его на виртуальную машину Linux.
    • Убедитесь, что контроллер USB, который вы добавляете в виртуальную машину, соответствует фактическому физическому контроллеру USB, к которому подключено устройство APC, т. Е. Добавьте контроллер XHCI, только если физическое устройство является устройством USB3. Несоответствия, кажется, вызывают странные проблемы в драйвере USB-устройства Linux.
    • Если что-то не получается, и вы видите такие ошибки, как ctrl urb status -62 в dmesg Скорее всего, физический контроллер не совпадает с контроллером в вашей виртуальной машине. Если они совпадают - тогда это проблема. У меня есть одна установка с такой проблемой и нет реального решения.
  4. устанавливать apcupsd на Linux VM - в Ubuntu вы можете сделать sudo apt-get install apcupsd установить последнюю версию. Проект NUT тоже хорош, но я традиционалист.
  5. Установите утилиту plink, выполнив sudo apt-get install putty-tools
  6. Подключитесь к вашему хосту ESXI, выполнив plink root@<your ESXi host IP>, Вы можете немедленно закрыть соединение. Цель состоит в том, чтобы сохранить ключ хоста, чтобы plink не запрашивал его снова, когда мы запускаем его через скрипт
  7. редактировать /etc/apcupsd/apcupsd.conf и измените элементы ниже, чтобы они соответствовали: UPSNAME < the name you'd like your UPS to have > UPSCABLE usb UPSTYPE usb # DEVICE DIRECTIVE should be blank for USB DEVICE Также убедитесь, что /etc/default/apcupsd имеет ISCONFIGURED=yes
  8. редактировать /etc/apcupsd/apccontrol и выделите doshutdown дело. Сделайте так, чтобы это выглядело так: doshutdown) echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} # Shut down indirectly by triggering the ESXi host to do the # shutdown via VMWare tools /usr/bin/plink root@< your ESXi host IP > -pw < your root pw > "/sbin/shutdown.sh && /sbin/poweroff" ;;
  9. Перезапустите apcupsd, используя sudo service apcupsd restart и посмотреть, если все работает, вызывая apcaccess, Если нет, проверьте логи и dmesg
  10. Убедитесь, что на всех виртуальных машинах, которые необходимо правильно отключить в случае сбоя питания, установлены VMWare Tools. Также убедитесь, что они являются частью списка запуска / выключения виртуальной машины (в vSphere Web Client перейдите по адресу: vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown). Убедитесь, что действие завершение работы заключается в выключении гостевой ОС.

Как только вы запустите эти вещи, doshutdown скриптлет из шага 8 вызывается при сбое питания. В этом случае вызывается сценарий shutdown.sh на хосте ESXi, который сигнализирует пакету инструментов VMWare в каждой виртуальной машине на вашем хосте о необходимости полного отключения через гостевую ОС. По моему опыту, он работает лучше, чем программное обеспечение PowerChute от APC.

Если вам нравится отслеживать вещи с ваших виртуальных машин, вы можете настроить на них экземпляры ведомого apcupsd, которые подключаются к главной виртуальной машине Linux управления ИБП. Ваши ведомые файлы apcupsd.conf должны иметь такую ​​запись:
UPSTYPE net < your UPS control VM IP >:3551
Записи как UPSCABLE и такие не имеют значения в этом случае. Это работает с версией Windows apcupsd (доступно здесь). Вы можете использовать включенный apctray.exe чтобы проверить текущее состояние вещей.

Это в значительной степени покрывает это, я думаю.

Возможно, вы захотите использовать функцию сквозного подключения USB-устройства к гостю, на котором запущен PowerChute или другое программное обеспечение, способное контролировать состояние ИБП и способное инициировать отключение на хосте ESXi (например, apcupsd). ESXi официально поддерживает только очень ограниченное количество USB-устройств для сквозного прохождения, но люди уже с переменным успехом подключают и проходят через различные классы устройств, но USB-APC UPS, кажется, работает в соответствии с этим пошаговым описанием для виртуальной машины Windows или этот для CentOS Linux VM.

Посмотрите на vSphere Management Assistant (vMA) отсюда. Мы используем его в моем офисе, чтобы делать то, что вы пытаетесь, однако с Smart-UPS, подключенным через USB, а не Back-UPS.

В старые времена установки без использования металла APC PowerChute Plus был неотъемлемой частью моего процесса установки. Используя простой последовательный сигнальный кабель и их двоичный файл только для Red Hat, было легко настроить правила для управления локально подключенным сервером. Основные уведомления по электронной почте о событиях батареи UPC, событиях питания линии и действиях по отключению были доступны:

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

UPS on battery: Blackout 000.0 V. 

а также

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Normal power restored: UPS on line.  

или же

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Shutdown started.  

Плюс разумный интерфейс, чтобы увидеть, что происходит...

введите описание изображения здесь

Это программное обеспечение в конечном итоге стало коммерческим (или было похоронено на сайте APC). Было несколько подходов с открытым исходным кодом, чтобы обеспечить нечто подобное. Но все это усложняется с отдельными хостами VMWare ESXi.

Кажется, что это то, что VMWare должен был включить в базовый гипервизор. Он базовый и может предложить пользователям достойный уровень защиты. Наиболее распространенные средства, которые я вижу сейчас, - это переход через USB на выделенную виртуальную машину, сетевой демон или выполнение того, что я делаю; не настраивать автоматическое отключение или отключение батареи...

Конечно, я обычно иду с ИБП, который может поддерживать нагрузку на систему в течение часа или более, но длительные перерывы в работе действительно случаются. Возможно, альтернативой является сбор нескольких недорогих или отремонтированных сетевых карт и планирование покупки устройств SmartUPS как минимум...

Хотя это возможно (возможно / в целом), я не думаю, что автоматическое отключение компьютера от батареи является хорошей идеей. Если вы собираетесь это сделать, то для большинства практических целей и задач вам, вероятно, следует просто сэкономить деньги на ИБП с батарейным питанием и позволить потере мощности отключить вашу машину для вас. (Конечно, чистое отключение всегда предпочтительнее потери питания, но вы, похоже, упускаете момент, когда время работы от батареи превышает пару минут, если вы автоматически выключаете все, когда теряете подачу питания.)

Я всегда обращался с этим с помощью мониторинга оповещений SA при отключении питания, чтобы SA могли использовать свое серое вещество, чтобы решить, когда (или даже если) отключить серверы. Если это кратковременное отключение, возможно, не стоит вообще отключать серверы, или вы можете оставить некоторые серверы включенными и работать как можно дольше, и отключать их только до того, как батарея вот-вот разрядится. Мне действительно кажется, что задача принятия решений лучше подходит человеку, чем простому правилу.

Я использовал решение MrMajestyk и изменил ssh-доступ только через plink с ssh-доступом без пароля, используя открытый ключ rsa. Ключ rsa, сгенерированный в виртуальной машине apcupsd, должен быть включен в / etc / ssh / keys-root/authorized_keys хоста vmware.

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

Другие вопросы по тегам