Установка и настройка apcupsd на XenServer

Понадобилось настроить автоматическое выключение двух гипервизоров Xenserver 6.5 при отключении электроэнергии с помощью apcupsd. Информация уже не очень актуальная, так как сейчас вышел новый гипервизор под версией 7, но тем не менее, хочу зафиксировать свой опыт, может еще кому-нибудь пригодится. Подсказу для XenServer 7 тоже приведу. Был приобретен один UPS APC Smart-UPS SC 1500VA/865W и подключен по USB порту к одному из xenserver.

Онлайн-курс по устройству компьютерных сетей

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Введение

Идея решения заключается в том, что мы ставим демон управления упсом 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

Не забудьте так сконфигурировать apcupsd на всех серверах, чтобы самым последним у вас завершал работу сервер, к которому подключен УПС. Если ошибиться и этого не сделать, то если завершит работу сервер с упс, остальные не смогут правильно определить свое время отключения. После пропадания связи с сервером, клиенты apcupsd не будут ничего предпринимать.

Теперь запускаем на обоих серверах службу:

# service apcupsd start

В XenServer 7:

# systemctl start apcupsd

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

# cat /var/log/apcupsd.events
# cat /var/log/apcupsd.status

Статус сервера:

apcupsd server status

Статус клиента:

apcupsd client 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 после пропадания электричества, не рассчитывая особо на длительное время работы от батарей.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

4 комментария

  1. Андрей

    Возникла проблема после установки и запуска: cat: /var/log/apcupsd.status: Нет такого файла или каталога

  2. Это каэшна все здорово ровно до того момента, как подвиснет сервак с упсом или сеть отвалится, а спустя время пропадет лепездричество )))
    На каждом серваке должен быть УПС с которого каждый сервак сам снимает инфу. Иначе это все малонадежно.

    • У меня в этом плане никогда не было проблем. С чего бы серваку зависнуть? Если сервак виснет, он меняется или ремонтируется. Сетевое оборудование запитано от того же упса, что и сервера, которые на нем висят. Это хорошее бюджетное решение. Конечно, можно сделать лучше, но это будет дороже. А ставить по одному отдельному упсу в каждый сервер это не удобно. Проще обслуживать один большой упс, чем кучу мелких.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar