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

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


Введение

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

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


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









2016-09-12T14:41:44
XenServer