Понадобилось настроить автоматическое выключение двух гипервизоров Xenserver 6.5 при отключении электроэнергии с помощью apcupsd. Информация уже не очень актуальная, так как сейчас вышел новый гипервизор под версией 7, но тем не менее, хочу зафиксировать свой опыт, может еще кому-нибудь пригодится. Подсказу для XenServer 7 тоже приведу. Был приобретен один UPS APC Smart-UPS SC 1500VA/865W и подключен по USB порту к одному из xenserver.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Реклама ИП Скоромнов Д.А. ИНН 331403723315
Введение
Идея решения заключается в том, что мы ставим демон управления упсом apcupsd на один из xenserver, а второй получает состояние упса по сети с первого сервера. Когда пропадет электричество, первый гипервизор напрямую получает информация от упса о том, что надо выключиться, а второй на пару минут раньше получает эту информацию от первого гипервизора. В итоге они оба благополучно завершают свою работу.
Идея не нова, утилиту apcupsd я постоянно использую в тех или иных случаях. Она очень удобна и функциональна. Позволяет настроить завершение работы на целом парке всевозможных систем при наличии всего одного упса, подключенного по usb к какому-нибудь серверу. Это достигается благодаря кросплатформенности утилиты. Конкретно в моем случае, слушать состояние упса будут еще и другие серверы на базе линукс и windows. Но в рамках данной статьи я рассмотрю вариант с двумя серверами. По аналогии вы можете добавить сколько угодно серверов.
Устанавливаем apcupsd на XenServer
У меня 2 гипервизора, соответственно установку нужно будет произвести на оба. Отличия будут позже в конфигурационных файлах. Работать будем на следующих версиях:
# cat /etc/redhat-release XenServer release 6.5.0-90233c (xenenterprise)
В зависимости от установленных обновлений, какие-то пакеты вам будут не нужны. Я приведу полный набор пакетов, которые нужно установить. Мне, к примеру, пакет glibc-common не понадобился, уже был установлен. Устанавливаем необходимые пакеты:
# yum --enablerepo=base --disablerepo=citrix list glibc-common gcc
Скачиваем остальные пакеты. Если ссылки со временем умрут, поищите в гугле по названию пакета:
# mkdir /root/apc && cd /root/apc # wget https://serveradmin.ru/files/rpm/mailx-8.1.1-44.2.2.x86_64.rpm # wget https://serveradmin.ru/files/rpm/apcupsd-3.14.10-1.el5.x86_64.rpm # rpm -i mailx-8.1.1-44.2.2.x86_64.rpm # rpm -i apcupsd-3.14.10-1.el5.x86_64.rpm
Установка apcupsd закончена. Все достаточно просто и быстро. Я сделаю подсказку для тех, кто пападет сюда в поиске информации по установке apcupsd на XenServer 7. У меня нет возможности проверить, но скорее всего все заработает, если вы просто установите пакеты для версии centos 7, а не 5, как в моем примере. XenServer базируется на дистрибутиве CentOS, поэтому пакеты подходят. Попробуйте установить apcupsd по этой ссылке, а mailx из пакетов в стандартном репозитории и у вас должно все заработать:
# yum --enablerepo=base --disablerepo=citrix list glibc-common gcc mailx # wget https://dl.fedoraproject.org/pub/epel/7/x86_64/a/apcupsd-3.14.12-1.el7.x86_64.rpm
Двигаемся дальше и настроим apcupsd в соответсвии с нашими задачами.
Настройка apcupsd
Открываем конфигурационный файл apcupsd на сервере, к которому подключен ups и редактируем. Я не рекомендую копировать и вставлять приведенный мной файл, лучше в своем файле измените нужные параметры. Так надежнее. Утилита как минимум читает комментарии в заголовке конфига, если вы их удалите, получите ошибку при старте сервиса.
# mcedit /etc/apcupsd/apcupsd.conf
## apcupsd.conf v1.1 ## # # for apcupsd release 3.14.10 (13 September 2011) - redhat # # "apcupsd" POSIX config file UPSCABLE usb UPSTYPE usb DEVICE LOCKFILE /var/lock SCRIPTDIR /etc/apcupsd PWRFAILDIR /etc/apcupsd NOLOGINDIR /etc ONBATTERYDELAY 6 BATTERYLEVEL 10 MINUTES 2 TIMEOUT 0 ANNOY 300 ANNOYDELAY 60 NOLOGON disable KILLDELAY 0 NETSERVER on NISIP 192.168.0.1 NISPORT 3551 EVENTSFILE /var/log/apcupsd.events EVENTSFILEMAX 50 UPSCLASS sharemaster UPSMODE share STATTIME 10 STATFILE /var/log/apcupsd.status LOGSTATS off DATATIME 0
Я не буду приводить описание параметров, они очень хорошо прокомментированы разработчиками, там все понятно. Обращаю внимание на адрес 192.168.0.1. В данном случае это адрес сервера, на котором установлен apcupsd. По этому адресу к нему будут обращаться остальные серверы за состоянием упса.
Редактируем конфигурационный файл на клиенте:
# mcedit /etc/apcupsd/apcupsd.conf
## apcupsd.conf v1.1 ## # # for apcupsd release 3.14.10 (13 September 2011) - redhat # # "apcupsd" POSIX config file UPSCABLE ether UPSTYPE net DEVICE 192.168.0.1:3551 LOCKFILE /var/lock SCRIPTDIR /etc/apcupsd PWRFAILDIR /etc/apcupsd NOLOGINDIR /etc ONBATTERYDELAY 6 BATTERYLEVEL 20 MINUTES 3 TIMEOUT 0 ANNOY 300 ANNOYDELAY 60 NOLOGON disable KILLDELAY 0 NETSERVER off NISIP 127.0.0.1 NISPORT 3551 EVENTSFILE /var/log/apcupsd.events EVENTSFILEMAX 50 UPSCLASS standalone UPSMODE disable STATTIME 10 STATFILE /var/log/apcupsd.status LOGSTATS off DATATIME 0
Теперь запускаем на обоих серверах службу:
# service apcupsd start
В XenServer 7:
# systemctl start apcupsd
Проверяете лог событий и файл состояния упса. В логе должны увидеть информацию о том, что сервис запущен, в файле состояния информацию от упса. На сервере и клиенте она будет разная.
# cat /var/log/apcupsd.events # cat /var/log/apcupsd.status
Статус сервера:
Статус клиента:
Одно важное замечание. Не забудьте открыть необходимые порты на фаерволе. Лично у меня на гипервизоре был включен фаервол и клиентаская утилита apcupsd не смогла подключиться к серверу и прочитать состояние упса. Исправляем это:
# iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 3551 -j ACCEPT # iptables -I INPUT -p udp -m state --state NEW,ESTABLISHED -m udp --dport 3551 -j ACCEPT # iptables -I OUTPUT -p tcp --sport 3551 -m state --state ESTABLISHED -j ACCEPT # iptables -I OUTPUT -p udp --sport 3551 -m state --state ESTABLISHED -j ACCEPT # service iptables save
Я не знаю, по tcp или udp работает apcupsd, поэтому открыл оба порта на вход и выход. После этого клиент успешно подключился к серверу и получил состояние упса. В завершение настройки, убедившись, что все работает, добавляем apcupsd в автозагрузку:
# chkconfig --add apcupsd # chkconfig apcupsd on
В случае с Xenserver 7 команда будет такая:
# systemctl enable apcupsd
Заключение
Данная инструкция подойдет практически для любой ситуации использования apcupsd. Она кросплатформенная, конфиги легко переносятся с одной системы в другую. Будут отличия только в командах установки и запуска, в расположении лог файлов. В случае с линуксом, даже этих отличий почти не будет. Изменить пути в конфигурационном файле придется при переносе конфига с linux на windows.
Я рекомендую эту утилиту к использованию. Сам пользуюсь ей повсеместно. Лучшего решения по управлению упсами и безопасному завершению работы в разнородных сетях я не знаю. Обычно мое применение выглядит следующим образом. Я покупаю один УПС компании APC и подключаю его к одному серверу. Дальше приобретается сколько угодно упсов любой фирмы для любого количества серверов. Сервера подключаются по питанию к различным упсам, а информацию о состоянии электросети берут с сервера, к которому подключен APC. Когда пропадает свет, серверы по команде с этого упса завершают свою работу.
Получается бюджетная и эффективная схема. Проблема только одна - приходится завершать работу с большим запасом заранее, чтобы точно быть уверенным, что все остальные сервера успеют получить команду на завершение работы до того, как отключится основной сервер. Но я в этом не вижу большого неудобства, так как предпочитаю завершать работу серверов заранее, минут через 10 после пропадания электричества, не рассчитывая особо на длительное время работы от батарей.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Реклама ИП Скоромнов Д.А. ИНН 331403723315
Возникла проблема после установки и запуска: cat: /var/log/apcupsd.status: Нет такого файла или каталога
Разобрался. STATTIME стоял 0.
Это каэшна все здорово ровно до того момента, как подвиснет сервак с упсом или сеть отвалится, а спустя время пропадет лепездричество )))
На каждом серваке должен быть УПС с которого каждый сервак сам снимает инфу. Иначе это все малонадежно.
У меня в этом плане никогда не было проблем. С чего бы серваку зависнуть? Если сервак виснет, он меняется или ремонтируется. Сетевое оборудование запитано от того же упса, что и сервера, которые на нем висят. Это хорошее бюджетное решение. Конечно, можно сделать лучше, но это будет дороже. А ставить по одному отдельному упсу в каждый сервер это не удобно. Проще обслуживать один большой упс, чем кучу мелких.