Настройка UPS в VMWare ESXi через Ubuntu-сервер
- Информация о материале
- Категория: Servers (ru)
- Опубликовано: 04.11.2013, 13:21
- Автор: Super User
- Просмотров: 4409
Есть сервер виртуализации с VMWare ESXi и к нему прикручен бесперебойник APC Smart-UPS SC1500. Так же есть задача научить этот сервер корректно выключаться (и не менее корректно выключать все виртуалки) при отключении электричества. При этом на сервере есть виртуалка с установленным Ubuntu Server 12.04. Так, как непосредственно ESXi нельзя научить работать с упсом, то именно эта виртуалка и будет заниматься мониторингом UPS.
Решение этой задачи делится на несколько этапов.
Установка VMWare tools на Ubuntu Server
Если этого не сделать, то корректного выключения виртуалки средствами ESXi просто не получится. Без VMWare tools выключение будет сродни вырубанию питания. И так, ставим VMWare tools.
Переходим в меню «Virtual Machine» — «Install VMware Tools» (или «VM» — «Install VMware Tools»).
Создаем каталог для монтирования образа:
sudo mkdir /mnt/cdrom
Монтируем образ:
sudo mount /dev/cdrom /mnt/cdrom
Распаковываем пакет во временный каталог
tar xzvf /mnt/cdrom/VMwareTools-
x.x.x-xxxx.tar.gz -C /tmp/
Переходим туда
cd /tmp/vmware-tools-distrib/
И устанавливаем VMWare tools
sudo ./vmware-install.pl -d
Далее нужно перезагрузить наш сервер.
Если есть еще какие-то виртуальные сервера, то устанавливаем
VMWare tools
на все.
2. Установка и настройка apcupsd
Для
мониторинга UPS чаще всего используется NUT, но так как у нас
бесперебойник APC, то воспользуемся утилитой apcupsd, которая
значительно проще в настройке. Для начала ее установим:
# apt-get install
apache2
apcupsd apcupsd-cgi
Без
apache2 и
apcupsd-cgi
в принципе можно обойтись. Непосредственно для работы он
и
не нужн
ы
.
Но вот посмотреть состояние UPS через веб-интерфейс приятно, да и
быстрее, чем логиниться в консоль сервера и смотреть там. По этому
ставим
все три
пакета.
Теперь нужно соединить UPS кабелем с сервером VMWare ESXi и пробросить USB-устройство на виртуалку с Ubuntu.
Обратите
внимание! Для того, что бы пробросить по USB UPS на виртуальный сервер,
обязательно в устройствах виртуалки должен быть установлен USB
контроллер. Если его нет, но вначале необходимо его добавить, а потом
перезагрузить виртуалку.
После
этого, в списке USB-устройств должен появиться наш UPS. Так, как APC
Smart-UPS SC1500 для соединения использует кабель типа serial-to-usb, то
у нас устройство будет отображаться следующим образом:
yakim@
server
:~$ lsusb
Bus 002 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
После присоединения кабеля в системе должно появиться нужное устройство с именем ttyUSBxxx. У меня это оказалось
/dev/ttyUSB0
. У вас, естественно, имя может оказаться немного другим. Именно его и будем использовать при настройке apcupsd.
Переходим к настройке apcupsd. Для этого в файле
/etc/apcupsd/apcupsd.conf
прописываем:
UPSNAME Server-UPS # Тут даем произвольное имя нашему беспередойнику
UPSCABLE smart
UPSTYPE apcsmart
DEVICE /dev/ttyUSB0 #Имя устройства соединения с UPSCABLE
Параметры выключения системы в этом файле настраиваем по собственному усмотрению. У меня это:
BATTERYLEVEL 15
MINUTES 25
Остальные настройки можно оставить по умолчанию.
Проверить доступность UPS можно командой:
$ apcaccess
Если настройки apcupsd правильные, то на выходе мы должны увидеть параметры состояния UPS:
APC : 001,049,1240
DATE : 2013-11-01 13:56:52 +0200
HOSTNAME : backup
VERSION : 3.14.10 (13 September 2011) debian
UPSNAME : Server-UPS
CABLE : Custom Cable Smart
DRIVER : APC Smart UPS (any)
UPSMODE : Stand Alone
STARTTIME: 2013-10-30 12:45:49 +0200
MODEL : Smart-UPS SC1500
STATUS : ONLINE
LINEV : 232.0 Volts
И так далее...
Будет выведено несколько страниц параметров состояния UPS'а
3. Настройка соединения с ESXi Server
На сервере
ESXi
нужно обязательно включить доступ по SSH, если вы этого не сделали ранее.
Для этого в консоли управления (
vSphere Client) перейдем на вкладку "Configuration". Далее выберем пункт "Security Profile" и нажмем "Properties".
В
появившемся списке найдем SSH и, если он не запущен (в колонке «Daemon»
прописано не «Running»), то для его конфигурирования нажмем кнопку
«Options».
Установим режим запуска сервиса SSH на ESXi и включим его кнопкой Start:
При
критическом значении параметров бесперебойника нам будет нужно на
сервере ESXi выполнить команду выключения как виртуалок, так и самого
сервера. Делать это мы будем по SSH. Так, как все действия будут
выполняться в фоновом режиме, то парольная авторизация нас не
устраивает. Нужно сделать авторизацию по ключу.
Для этого на сервере Ubuntu Генерируем ключ авторизации:
Заходим на свою машину с правами root:
$sudo su
Вводим свой пароль.
Генерируем RSA ключи:
#ssh-keygen -t rsa
Отвечаем на вопросы:
-
Enter file in which to save the key (/root/.ssh/id_rsa):
— соглашаемся на значение по умолчанию.
-
Enter passphrase (empty for no passphrase):
— Оставляем значение пустым. Паролем пользоваться не будем.
-
Enter same passphrase again:
— Снова оставляем значение пустым.
Скрипт создал 2 ключа: приватный и публичный.
Your identification has been saved in /root/.ssh/id_rsa.
— секретный приватный ключ для декодирования.
Your public key has been saved in /root/.ssh/id_rsa.pub.
— публичный ключ для кодирования.
Будьте
внимательны! Ключи нужно генерировать именно для пользователя root, так
как именно с правами этого пользователя и работает демон apcupsd.
Сейчас нужно скопировать на ESXi сервер наш публичный ключ:
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@server_ESXi
Обратите внимание! Даже после этого зайти на сервер
ESXi
без пароля мы не можем. Это связано с тем, что в настройках ssh на
ESXi
прописан параметр :
AuthorizedKeysFile /etc/ssh/keys-%u/authorized_keys
То есть ключи авторизации хранятся не в домашнем каталоге пользователя, а в специфическом, который прописан в настройках.
Для того, что бы авторизация по ключу все-таки заработала залогинимся на ESXi
$ ssh root@server_ESXi
И скопируем файл с ключами на нужное место
~ # cp /.ssh/authorized_keys /etc/ssh/keys-root/authorized_keys
После этого мы сможем заходить без пароля с сервера Ubuntu на сервер ESXi.
В корне файло
в
ой
системы сервера виртуализации (хотя это можно сделать и в любом другом
каталоге) создадим скрипт выключения всех виртуальных серверов и самого
сервера ESXi:
~ #
vi ups_down.sh
И запишем в него:
#!/bin/sh
#
Получаем ID всех виртуалок
VMID=$(/usr/bin/vim-cmd vmsvc/getallvms | grep ^[0-9] | awk '{print $1}')
#
Просматриваем все виртуалки в цикле
for i in $VMID
do
#
Получаем их состояние
(turned on, off, whatever)
STATE=$(/usr/bin/vim-cmd vmsvc/power.getstate $i | tail -1 | awk '{print $2}')
#
Если виртуалка запущена - выключить
if [ $STATE == on ]
then
/usr/bin/vim-cmd vmsvc/power.shutdown $i
fi
done
#Делаем паузу в ожидании, пока виртуалки погаснут
sleep 180
# Теперь выключаем и сам сервер виртуализации.
/sbin/shutdown.sh
/sbin/poweroff
После этого не забываем сделать скрипт исполняемым:
~ #
chmod +x
ups_down.sh
4. Окончательная настройка apcupsd
Остался последний шаг. Заставить apcupsd выполнить скрипт
ups_down.sh
на сервере ESXi. Для этого открываем файл /etc/apcupsd/apccontrol, ищем в нем:
doshutdown)
echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
И в этом блоке заменяем строку
${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
на
/usr/bin/ssh root@server_ESXi /
ups_down.sh
На
этом основная настройка закончена. При пропадании питания корректно
выключится как сам сервер виртуализации, так и все виртуальные сервера.
5. Настройка веб-интерфейса состояния
По умолчанию веб-интерфейс apcupsd доступен по ссылке:
http://Ubuntu-server/cgi-bin/apcupsd/multimon.cgi
Пользоваться такой ссылкой не очень удобно. По этому подредактируем файл
/var/www/index.html
и приведем его к следующему виду:
<meta http-equiv="refresh" content="0;url=http://Ubuntu-server/cgi-bin/apcupsd/multimon.cgi">
<html><body><h1 APC UPS Statistic /h1>
</body></html>
Здесь мы сделали всего-навсего переадресацию на адрес веб-интерфейса apcupsd.
Теперь при заходе на http://Ubuntu-server/ мы увидим статистику состояния источника бесперебойного питания.
Перейдя по ссылке System можно увидеть подробный статус нашего устройства.