Наконец-то установил более-менее приличный UPC в стойку (Powercom KIN-2200AP-RM [1]). Быстренько прицепил его COM-портом к серверу, и начал искать софтину, которая умела бы с ним работать. Выбор остановил на NUT [2] - набор утилит, которые обеспечивают общий интерфейс для мониторинга и администрирование UPS.
Устанавливать будем, конечно же, из портов:
# cd /usr/ports/sysutils/nut && make install clean && rehash |
Мой набор опций оказался следующим:
Options for nut 2.4.1_3 [X] SERIAL SERIAL support [ ] USB USB support [X] SNMP SNMP support [X] NEON NEON XML/HTTP support [ ] PDU Powerman PDU support [ ] HAL HAL support [ ] IPV6 IPV6 support [X] CGI Web CGI interface |
Приступаем к настройке. Для начала создадим необходимые каталоги для драйверов и сервера, выставим права:
# mkdir -p /var/state/ups |
Далее необходимо определиться, какой драйвер будет использоваться для данного UPS:
# cat /usr/local/etc/nut/driver.list | grep Powercom "Powercom" "SMK" "" "megatec" |
В моем случае нужно использовать драйвер "powercom", поскольку KIN относится к серии King PRO.
Теперь пора ознакомиться с конфигурационными файлами NUT. Все они находятся в директории /usr/local/etc/nut.
Назначение:
ups.conf - настройки UPS драйвера для сбора данных
upsd.conf - настройка основного демона upsd для Network UPS Tools
upsd.users - контроль доступа к UPS демону (профили пользователей)
upsmon.conf - настройки монитора UPS демона
Теперь по порядку займемся настройкой каждого из конфигурационных файлов.
ups.conf
Необходимо добавить в конфигурационный файл UPS и его настроки подключения.
# cd /usr/local/etc/nut && cp ups.conf.sample ups.conf |
В результате нехитрых манипуляций, получим следующий результат:
# cat /usr/local/etc/nut/ups.conf [Powercom] driver = powercom port = /dev/cuad0 desc = "KIN-2200AP-RM" type = KIN |
Более детально о каждой из опций:
- [ups_name] - имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя.
- driver - драйвер, используемый для работы с UPS.
- port - порт, на котором висит UPS
- desc - описание устройства (так, на всякий случай, чтобы не забыть).
- sdorder - необязательный элемент. При наличии нескольких UPS подключенных к серверу можно выключать в определенном порядке. используя upsdrvctl можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте -1.
- nolock - необязательный элемент, его не рекомендуется использовать в его этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой.
- maxstartdelay - необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам.
- cable - Если драйвер UPS требует дополнительных параметров, вы можете указать их здесь. Это индекс вашего кабеля и вы можете посмотреть его тут [3]. Вы можете не указывать это значение, если ваше подключение к UPS стандартно.
Допускается использование дополнительных опций, исходя из специфики оборудования (необходимо смотреть маны по конкретно используемому драйверу). В моем случае не совпадал тип с тем, который используется по умолчанию, соответственно пришлось конкретизировать. Значения по умолчанию для драйвера Powercom:
- linevoltage = 230
- manufacturer = PowerCom
- modelname = Unknown
- serialnumber = Unknown
- type = Trust
upsd.conf
upsd отвечает за передачу данных от драйвера клиентским программам в сети. upsd должен находится под управлением и по возможности, как единственный источник состояния и мониторинга клиентов, таких как upsmon. upsd использует этот файл для контроля доступа к серверу и для установки других значений различных конфигурации. Этот файл содержит подробные сведения об управлении доступом, таким образом, обеспечивается безопасность.
Создание файла:
# cp upsd.conf.sample upsd.conf |
Редактируем до следующего состояния:
# cat upsd.conf LISTEN 127.0.0.1 3493 LISTEN 195.3.159.250 3493 |
Доступные опции:
- MAXAGE <seconds> - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать только в том случае, если у вас трудности с обновлением данных.
- LISTEN <address> [<port>] - здесь указывается адрес и порт 3493 (по умолчанию) для прослушивания подключений.
- MAXCONN <connections> - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнятся количество подключений, он больше не будет принимать новых входящих клиентских подключений.
upsd.users
Контроль доступа до UPS-демона (профили пользователей). Именно в этом файле вы указываете, кто и в какой мере будет контролировать и работать с утилитой. Для начала создадим этот файл:
# cp upsd.users.sample upsd.users |
Правим конфиг до следующего состояния:
# cat upsd.users [admin] password = adminpass actions = SET instcmds = ALL [monmaster] [monslave] |
Теперь более подробно о доступных опциях.
Значения:
- password - пароль пользователя
- allowfrom - откуда разрешено подключатся
Каждый UPS монитор может определяться как один из трех возможных типов:
- upsmon master - полные полномочия управлением питания подключенных к системе UPS под управлением upsmon, эта система отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех Slave систем. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon системы следует определить этот UPS как Master.
- upsmon slave - эта система, под управлением upsmon и она не выключается непосредственно. Операционная система будет выключена перед отключением питания Master. Используйте этот режим при запуске монитора на других компьютерах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является Master. Все остальные сервера будут Slave.
- upsmon monitor-only - при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не завершать работу системы.
- actions - Действия пользователя с применением upsd.
- SET - изменить значения определенных переменных в UPS
- FSD - установка флага "принудительного выключения" для UPS
- instcmds - разрешения пользователю на инициирование конкретных команд. Применяя "ALL" вы разрешаете использовать все команды, Существует множество команд выполните 'upscmd -l' чтобы увидеть, что ваше оборудование поддерживает. Вот, к примеру, несколько команд.
- test.panel.start - старт теста передней панели
- test.battery.start - старт теста батареи
- test.battery.stop - остановка теста батареи
- calibrate.start - запуск калибровки батареи
- calibrate.stop - остановка калибровки батареи
upsmon.conf
upsmon предоставляет основные функции, которая собирается найти в программе мониторинга UPS, например это безопасное завершений работы при сбое питания. В многоуровневой схеме утилиты NUT это клиент. Создадим файл конфигурации:
# cp upsmon.conf.sample upsmon.conf |
Редактируем конфиг до следующего состояния:
# cat upsmon.conf MONITOR Powercom@localhost 1 monmaster masterpass master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -p now" POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 POWERDOWNFLAG /etc/killpower NOTIFYFLAG ONLINE SYSLOG+WALL NOTIFYFLAG ONBATT SYSLOG+WALL NOTIFYFLAG LOWBATT SYSLOG+WALL NOTIFYFLAG SHUTDOWN SYSLOG+WALL RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5 |
Итак, мы добавили monitir, формат записи которого следующий:
MONITOR system powervalue username password type |
Значение опций:
- MINSUPPLIES - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но мощные сервера, например HP NetServer LH4, могут работать с 2 из 4 БП и ему нужно ставить 2.
- SHUTDOWNCMD - upsmon выполняет эту команду, когда системе необходимо выключить.
- NOTIFYCMD - upsmon отправляет сообщение при происшествиях.
- POLLFREQ - опрос мониторами с частотой (измеряется в секундах) для обычной деятельности. Вы можете отрегулировать это частоту опроса, чтобы upsmon не “зашумлял” вашу сеть, но не вносите слишком большие значения тк. оно может пропустить отключение питания.
- POLLFREQALERT - опрос UPS с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи.
- HOSTSYNC - как долго upsmon будет ждать перед переходом к следующему upsmon. master upsmon использует это число при ожидании slaves чтобы отключиться после того как он установил флаг принудительное завершение работы (FSD). И если slaves не отключаться после этого тайм аута, то выключение продолжится без них.
- DEADTIME - интервал ожидания перед объявлением статуса UPS как «мертвый». upsmon требует, чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT). Если статус загрузки, UPS помечен fails. И если оно остается fails более чем DEADTIME секунд, то UPS помечается «мертвый».
- POWERDOWNFLAG - флаг файла для форсирования завершения работы UPS в master системе.
- NOTIFYMSG - изменение сообщения, отправленные upsmon при возникновении определенных событий.
- NOTIFYFLAG - изменение поведения upsmon при возникновении событий NOTIFY.
- RBWARNTIME - предупреждение замены аккумулятора в секундах.
- NOCOMMWARNTIME - предупреждение по времени при не общении к UPS в секундах.
- FINALDELAY - процент батареи, при котором происходит завершение работы системы.
С конфигурационными файлами разобрались. Теперь проверим права на файлы и каталоги. Владельцем /var/db/nut должен быть пользователь uucp, права на выставлены на 0750:
# ls -ld /var/db/nut/ drwxr-x--- 2 uucp uucp 512 24 апр 04:50 /var/db/nut/ |
Потом устанавливаем необходимые права на конфигурационные файлы. Условия - пользователь uucp должен иметь доступ на чтение:
# chown uucp:uucp upsd.conf upsd.users upsmon.conf # chmod 0640 upsd.conf upsd.users upsmon.conf |
Кажется ничего не забыли... Пробуем запустить сервис. Добавляем NUT в /etc/rc.conf и даем команду запуска для сервисов:
# echo '### Network UPS Tools' >> /etc/rc.conf |
Кажется все в порядке. На всякий случай, проверим:
# ps -ax | grep nut |
Все замечательно, сервисы запущены, работают и ведутся логи. Теперь подключимся к UPS для проверки его статуса:
# upsc Powercom@localhost battery.charge: 100.0 driver.name: powercom driver.parameter.pollinterval: 2 driver.parameter.port: /dev/cuad0 driver.parameter.type: KIN driver.version: 2.4.1 driver.version.internal: 0.12 input.frequency: 50.07 input.voltage: 234.0 input.voltage.nominal: 220 output.frequency: 50.07 output.voltage: 234.0 ups.load: 22.0 ups.mfr: PowerCom ups.model: KIN-2200AP ups.model.type: KIN ups.serial: Unknown ups.status: OL |
Вот и отлично, все необходимые параметры снимаются. Для проверки только режима работы UPS можно воспользоваться следующей командой (по аналогии можно запрашивать и другие параметры):
# upsc Powercom@localhost ups.status |
Переменная может принимать следующие значения:
- OL - система работает на линии (on line power)
- OB - система работает от батареи (on battery)
- LB - система работает от севшей батареи (low battery)
Теперь посмотрим монитором:
# upsmon Network UPS Tools upsmon 2.4.1 UPS: Powercom@localhost (master) (power value 1) Using power down flag file /etc/killpower |
Когда upsmon необходимо быстро выключить локальную систему, она устанавливает флаг "FSD" (forced shutdown - принудительное отключение) для любых UPS, на котором она выполняется в master режиме. Данная возможность используется и для синхронизации slaves компьютеров в том случае,если master UPS передает событие и всем рассылается сообщение о немедленном прекращении работы.Можно вручную вызвать этот режим на master upsmon, запустив другой экземпляр с флагом '-c fsd '. Это полезно, когда вы хотите инициировать shutdown перед критическим этапом. Эмулируем падение мощности:
# upsmon -c fsd |
Система должна корректно завершить работу.
upsstats
На этом настройку Network UPS Tools можно считать оконченой. Но есть еще порох в пороховицах, а ягоды в ягодицах! . В комплекте с NUT идет web-интерфейс проверки статуса UPS - upsstats. Посмотрим что это за штука.
Скопируем необходимые для работы файлы из предложеных примеров:
# cp upsset.conf.sample upsset.conf |
В конфигурационный файл apache добавим еще один virtualhost (надеюсь он у вас настроен с поддержкой виртуалхостов):
<VirtualHost *:80>
ServerName powercom.muff.kiev.ua
ServerAdmin apacheapache [at] muff [dot] kiev [dot] ua (@muff.kiev.ua) DocumentRoot /usr/local/www/nut/
<Directory /usr/local/www/nut> Options Indexes FollowSymlinks MultiViews +ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> Alias /cgi-bin/ "/usr/local/www/cgi-bin/"
<Directory /usr/local/www/cgi-bin/nut>
Order allow,deny Allow from all </Directory> </VirtualHost>
|
Перезапускаем apache, чтобы изменения вступили в силу:
# apachectl graceful |
Далее в файле upsset.conf необходимо расскоментировать строку I_HAVE_SECURED_MY_CGI_DIRECTORY:
# cat upsset.conf | grep HAVE I_HAVE_SECURED_MY_CGI_DIRECTORY |
Потом добавлям наш UPS в список хостов:
# echo 'MONITOR powercom@localhost "Powercom KIN-2200AP-RM"' >> hosts.conf |
Пора проверять, что же у нас получилось в результате. При переходе на ваш адрес, должна отобразится страница Network UPS Tools с вкладками Statistics и Settings.
- Settings – тут вы можете настроит UPS (пользователя берете согласно содержимому upsd.users)
- Statistics – здесь вы можете просмотреть статус вашего UPS, а так же посмотреть текущее состояние в графическом виде.
Добавляю скриншоты того, что у нас получилось.
Дополнительные возможности:
- построение графиков в cacti [7] (подробнее о cacti [8])
Используемые материалы:
- Network UPS Tools [2]
- POWERCOM CO., Ltd [9]
- man Powercom [10]
- Настройка Network UPS Tools и APC Smart-UPS 1500VA USB [11]