Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

  1. ИБП через usbhid-ups сообщает upsd о сбое питания.
  2. (необязательно, полезно, если вы хотите завершить работу через несколько минут вместо низкого заряда батареи) запускается upsmon на виртуальной машине upssched Таймер на 5 минут. Таймер прерывается при восстановлении питания.
  3. Когда срабатывает таймер или когда ИБП сообщает о разряде батареи, upsmon поднимает флаг FSD (принудительное выключение) до upsd.
  4. В автономной конфигурации NUT флаг FSD отключит машину. Но здесь команда выключения заменяется простой записью типа «Я должен выключиться сейчас, но вместо этого я жду хост». И ничего не делает.
  5. Флаг FSD также считывается upsmon ESXi, который инициирует завершение работы хоста ESXi.
  6. Хост ESXi отключает все виртуальные машины одну за другой. Важно то, что виртуальная машина, на которой выполняется upsd, должна отключаться последней (с использованием конфигурации последовательности запуска / завершения ESXi).
  7. Важный: на этой виртуальной машине должны быть установлены инструменты vmware. Когда он получает команду выключения гостя от хоста, запускается сценарий выключения vmware-tools. Этот скрипт проверяет наличие / etc / killpower флаг. Если флаг отсутствует, он ничего не делает (это означает, что завершение работы Linux было активировано пользователем, а не событием UPS). Но если флаг существует (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 - в 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. Также убедитесь, что они входят в список запуска / завершения работы виртуальных машин (в веб-клиенте vSphere перейдите по адресу: vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown). Убедитесь, что действие выключения - выключение гостевой ОС.

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

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

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

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

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

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

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

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

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

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

В былые времена установки без покрытия, 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 ...

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

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