Меню сайта
Категории каталога
Network UPS Tools [2009]
Network UPS Tools представляет собой набор программ, которые обеспечивают общий интерфейс для мониторинга и администрирование UPS оборудования. У меня есть APC Smart-UPS 1500VA USB & Serial 230V и к нему подключено 2 сервера один с FreeBSD, второй - c Windows 2003. При выключении питания один штатно выключается (тк к нему подключен дата-кабель от UPS), второй - как получится. Передо мной встала задача - автоматизировать процесс выключения серверов подключенных к одному UPS, при разрядке батареи последнего. Требования к утилите были следующие: умение работать с сетью, наличие интерфейса управления, возможность работы с любыми операционными системами.
Установка
Подключение При подключении APC Smart-UPS 1500VA USB & Serial 230V к FreeBSD, UPS определяется так: (подключения через USB)
ugen0: <American Power Conversion Smart-UPS 1500
FW:653 .12 .I USB FW:4 .2 , class 0 /0 , rev 1 .10 /0 .06 , addr 2 > on uhub0
(подключения через COM)
# dmesg -a | grep sio0
sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sio0: type 16550A
sio0: [FILTER]
Я остановился на подключении через COM порт, так как выдел в нем более светлое будущее для работы с NUT.Порт
# cd /usr/ports ; make search name='nut-'
Port: nut-2 .4 .1
Path: /usr/ports/sysutils/nut
Info: Network UPS Tools
Maint: Joerg.Pulz@frm2.tum.de
B-deps: autoconf-2 .62 autoconf-wrapper-20071109 expat-2 .0 .1 gettext-0 .17_1
gmake-3 .81_3 libiconv-1 .11_1 libusb-0 .1 .12_4 m4-1 .4 .12 ,1 neon28-0 .28 .3
net-snmp-5 .4 .2 .1_3 perl-5 .8 .9_2 pkg-config-0 .23_1
R-deps: expat-2 .0 .1 gettext-0 .17_1 libiconv-1 .11_1 libusb-0 .1 .12_4
neon28-0 .28 .3 net-snmp-5 .4 .2 .1_3 perl-5 .8 .9_2 pkg-config-0 .23_1
WWW: http://www.networkupstools.org/]
# cd /usr/ports/sysutils/nut ;make config
Options for nut 2 .4 .1
[X] SERIAL SERIAL support
[ ] USB USB support
[ ] SNMP SNMP support
[X] NEON NEON XML/HTTP support
[ ] PDU Powerman PDU support
[ ] HAL HAL support
[ ] IPV6 IPV6 support
[ ] DEVEL Install header files
[X] CGI Web CGI interface
Уберите лишнее, например IPV6, и SERIAL\USB (зависит от подключаения UPS), поставьте SNMP (если ваш UPS поддерживает такую возможность) и CGI, если требуется мониторить UPS через веб интерфейс. Приступаем к установке.
# cd /usr/ports/sysutils/nut ;make install clean
Options for libusb 0 .1 .12_4
[ ] SGML Install developer guide from SGML
~~~~~~~~~~~
This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/nut_upsmon
/usr/local/etc/rc.d/nut_upslog
/usr/local/etc/rc.d/nut
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
http://www.networkupstools.org/
Готово, теперь переходим к настройке NUT.
Предварительная настройка
Директория Создадим необходимые директории для драйверов и сервера, куда будут сохраняться данные UPS, и выставим корректные права на директорию.
# mkdir -p /var/state/ups ;chmod 0770 /var/state/ups; chown uucp:wheel /var/state/ups
Драйвер Найдем свой драйвер UPS в списке поддерживаемого оборудования.
Посмотрим, поддерживает ли NUT мое оборудование APC Smart-UPS 1500VA.
# cat driver.list | grep Smart-UPS
## <manufacturer> <model name> <model extra> <driver> ##
"APC" "Smart-UPS" "" "apcsmart"
"APC" "Smart-UPS USB" "USB" "usbhid-ups"
Поддержка имеется, поэтому я могу использовать два драйвера для USB и для COM порта. На данный момент буду использовать драйвер "apcsmart ".
Настройка
Конфигурационные файлы Все конфигурационные файлы находятся в директории /usr/local/etc/nut ups.conf - настройки UPS драйвера для сбора данныхupsd.conf - настройка основного демона upsd для Network UPS Toolsupsd.users - контроль доступа к UPS демону (профили пользователей)upsmon.conf - настройки монитора UPS демона
ups.conf В этом файле вы указываете свои UPS.
# cd /usr/local/etc/nut
# cp ups.conf.sample ups.conf
Добавим UPS и настроим подключение к нему.
[APC]
driver = apcsmart
port = /dev/cuad0
cable = 940 -0024C
desc = "APC Smart-UPS 1500VA"
Опишим некоторые параметры для использования:
[ups_name] - имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя.
driver - драйвер, используемый для работы с UPS.
port - порт, на котором висит UPS (для подключения через USB, UPS вставляет это значение в auto). - Для snmp-ups: имя хоста SNMP агента - Для newhidups: значение "auto" для автоматического соединения с USB UPS.
desc - описание устройства для себя, чтобы не забыть.
sdorder - необязательный элемент. При наличии нескольких UPS подключенных к серверу можно выключать в определенном порядке. используя upsdrvctl можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте -1.
nolock - необязательный элемент, его не рекомендуется использовать в его этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой.
maxstartdelay - необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам.
cable - Если драйвер UPS требует дополнительных параметров, вы можете указать их здесь. Например, для флага "cable" я ставлю значение 940-0024C . Это индекс вашего кабеля и вы можете посмотреть его тут /usr/local/share/doc/nut/cables . Вы можете не указывать это значение, если ваше подключение к UPS стандартно.
upsd.conf upsd отвечает за передачу данных от драйвера клиентским программам в сети. upsd должен находится под управлением и по возможности, как единственный источник состояния и мониторинга клиентов, таких как upsmon . upsd использует этот файл для контроля доступа к серверу и для установки других значений различных конфигурации. Этот файл содержит подробные сведения об управление доступом и таким образом обеспечивается безопасность. В идеальном случае только процесс upsd должны иметь возможность прочитать этот файл. Создадим конфигурационный файл.
# cp upsd.conf.sample upsd.conf
Добавим следующие значения:
LISTEN 127 .0 .0 .1
LISTEN 192 .168 .0 .2
Про ACLComment By: Arnaud Quette (aquette) Date: 26/01/2008 20:53 Message: the ACL mechanism has been removed from NUT 2.3.0 development tree. Заменено на TCP wrappers. Опишем параметры использования:
MAXAGE <seconds> - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать только если у вас трудности с обновлением данных. См syslog.
LISTEN <address> [<port>] - здесь указывается адрес и порт 3493 (по умолчанию) для прослушивания подключений.
MAXCONN <connections> - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнятся кол-во подключений, он больше не будет принимать новых входящих клиентских подключений.
upsd.users Контроль доступа для UPS демона (профили пользователей) Именно здесь вы указываете, кто и в какой мере будет контролировать, и работать с утилитой.
# cp upsd.users.sample upsd.users
# cat upsd.users
[admin]
password = admin
actions = SET
instcmds = ALL
[monmaster]
password = bsd
upsmon master
[monslave]
password = win2k3
upsmon slave
Значения:
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 APC@localhost 1 monmaster bsd master
MONITOR APC@localhost 1 monslave win2k3 slave
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0 "
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
Мы добавили MONITOR в котором указали наши значения. Формат таков:
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 (или другой NUT_USER) и права 0750:
# ls -ld /var/db/nut/
drwxr-x--- 2 uucp wheel 512 Apr 28 16 :16 /var/db/nut/
Измените разрешения на конфигурационные файлы: они должны читаться пользователем uucp (или другим пользователем NUT_USER):
# chown uucp:wheel upsd.conf upsd.users upsmon.conf
# chmod 0640 upsd.conf upsd.users upsmon.conf
Запуск сервиса
Он сказал поехали... =)
# /usr/local/etc/rc.d/nut start Network UPS Tools - UPS driver controller 2.4.1 Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1) APC command table version 2.0 Broadcast Message from root@bsd.ampul.local (no tty) at 12:51 MSD... Communications with UPS APC@localhost lost Detected Smart-UPS 1500 [AS0537130911] on /dev/cuad0 Starting nut. Network UPS Tools upsd 2.4.1 listening on 192.168.0.2 port 3493 listening on 127.0.0.1 port 3493 Connected to UPS [APC]: apcsmart-APC Broadcast Message from root@bsd.ampul.local (no tty) at 12:51 MSD... Communications with UPS APC@localhost established
Смотрим, что все запустилось нормально и UPS подхватился, все правила подключились и порт слушается. =)
Тест Теперь потыкаем демон. И посмотрим, запустился ли демон.
# ps -ax |grep nut 752 ?? Ss 0:00.32 /usr/local/libexec/nut/apcsmart -a APC # ps -ax | grep ups 754 ?? Ss 0:00.03 /usr/local/sbin/upsd 761 ?? Ss 0:00.00 /usr/local/bin/upslog -s myups@localhost -l /var/log/ups.log -i 300 768 ?? Is 0:00.00 /usr/local/sbin/upsmon localhost 771 ?? S 0:00.01 /usr/local/sbin/upsmon localhost
Все замечательно и слушает и логи ведет и нормально висит. Теперь проверим свой UPS
# upsc APC@localhost battery.alarm.threshold: 0 battery.charge: 100.0 battery.charge.restart: 00 battery.date: 09/07/05 battery.packs: 000 battery.runtime: 1800 battery.runtime.low: 120 battery.voltage: 27.54 battery.voltage.nominal: 024 driver.name: apcsmart driver.parameter.cable: 940-0024C driver.parameter.pollinterval: 2 driver.parameter.port: /dev/cuad0 driver.version: 2.4.1 driver.version.internal: 2.00 input.frequency: 50.00 input.quality: FF input.sensitivity: H input.transfer.high: 253 input.transfer.low: 208 input.transfer.reason: T input.voltage: 220.3 input.voltage.maximum: 221.7 input.voltage.minimum: 218.8 output.voltage: 220.3 output.voltage.nominal: 230 ups.delay.shutdown: 090 ups.delay.start: 000 ups.firmware: 653.12.I ups.id: UPS_IDEN ups.load: 026.6 ups.mfr: APC ups.mfr.date: 09/07/05 ups.model: Smart-UPS 1500 ups.serial: AS0537130911 ups.status: OL ups.temperature: 027.0 ups.test.interval: 1209600 ups.test.result: NO
Полная картина ясна и все в порядке, но кому нужно поменьше букв, то выполните следующую команду.
# upsc APC@localhost ups.status OL
OL - система работает на линии (on line power)
OB - система работает от батареи (on battery)
LB - система работает от севшей батареи (low battery) Можно посмотреть монитором
# upsmon
Network UPS Tools upsmon 2 .4 .1
UPS: APC@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 перед критическом этапе. Эмулируем падение мощности:
Если система корректно выключилась, то все в порядке.rc.conf Для запуска NUT при старте FreeBSD добавляем в /etc/rc.conf следующее:
nut_enable="YES"
nut_upslog_enable="YES"
nut_upsmon_enable="YES"
Перезагрузим FreeBSD и увидим при загрузке следующее.
NNetwork UPS Tools - UPS driver controller 2.4.1 Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1) APC command table version 2.0 Detected Smart-UPS 1500 [AS0537130911] on /dev/cuad0 Starting nut. Network UPS Tools upsd 2.4.1 listening on 192.168.0.2 port 3493 listening on 127.0.0.1 port 3493 Connected to UPS [APC]: apcsmart-APC Starting nut_upslog. Network UPS Tools upslog 2.4.1 logging status of myups@localhost to /var/log/ups.log (300s intervals) Starting nut_upsmon. Network UPS Tools upsmon 2.4.1 UPS: APC@localhost (master) (power value 1) Warning: ignoring duplicate UPS [APC@localhost] Using power down flag file /etc/killpower
Сетевой сервер Клиенты Подключим второй сервер Windows 2003 St в качестве клиента. Для этого необходимо найти необходимое ПО клиента установить и настроить его. Список клиентских модулей смотрите тут Client projects. Мне был необходим Windows NUT client Необходимо скачать и установить модуль, а так же настроить его под свои параметры и добавить в автозагрузку системы.
Проведем практические испытания, выключим электричество на вход к UPS и посмотрим, как отреагирует сервер и клиент.
Как и было задумано сначала штатно выключился Windows 2003 slave (при зарядке батареи 10%), а потом FreeBSD master (при зарядке батареи 5%)
May 5 14:04:03 bsd upsmon[770]: UPS APC@localhost on battery May 5 14:41:43 bsd upsmon[770]: UPS APC@localhost battery is low May 5 14:41:43 bsd upsmon[770]: Executing automatic power-fail shutdown Broadcast Message from root@bsd.ampul.local (no tty) at 14:41 MSD... UPS APC@localhost battery is low Broadcast Message from root@bsd.ampul.local (no tty) at 14:41 MSD... Executing automatic power-fail shutdown May 5 14:41:43 bsd upsmon[770]: Auto logout and shutdown proceeding Broadcast Message from root@bsd.ampul.local (no tty) at 14:41 MSD... Auto logout and shutdown proceeding *** FINAL System shutdown message from root@bsd.ampul.local *** System going down IMMEDIATELY May 5 14:41:48 bsd shutdown: halt by root: May 5 14:42:20 bsd rc.shutdown: 30 second watchdog timeout expired. Shutdown terminated.
Дополнительно SNMP Доступно для снятия данных со специализированных UPS. К сожалению, у меня нет APC AP9606 APC Web/SNMP management card и тп чтобы я смог бы попробовать данную опцию.
Web Web-интерфейс проверки статуса UPS. Установим и посмотрим, что upsstats может нам предложить.
upsset.conf - Конфигурация Network UPS Tools для upsset.cgi
# cp upsset.conf.sample upsset.conf
# cp upsstats.html.sample upsstats.html
# cp upsstats-single.html.sample upsstats-single.html
Раскоментируем строчку.
# cat upsset.conf
I_HAVE_SECURED_MY_CGI_DIRECTORY
В конфигурационный файл Apache добавим следующее:
<VirtualHost *:80 >
ServerName ups.mydomain
ServerAlias ups
ServerAdmin admin@localhost
Options Indexes FollowSymlinks MultiViews +ExecCGI
AddHandler cgi-script .cgi
DocumentRoot /usr/local/www/nut/
AccessFileName .htaccess
</VirtualHost>
И при переходе на ваш адрес у вас должна отобразится страница Network UPS Tools с вкладками Statistics и Settings. - Settings – тут вы можете, настроит UPS (пользователя берете согласно upsd.users) - Statistics – здесь можете просмотреть статус вашего UPS, а так же посмотреть текущее состояние в графическом виде.
Заключение
Система поработала в тестовом режиме полторы недели и уже один раз спасла (как раз на праздниках выключали электричество). И после получение питания с UPS(включили электричество) эти два сервера включились самостоятельно (настройка BIOSа) как и положено. =)
Источник: http://www.lissyara.su/?id=1932
Категория: Работа с железом | Добавил: oleg (19.05.2009) | Автор: Raven2000
Просмотров: 1532 | Рейтинг: 0.0 /0 |
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]
Форма входа
Друзья сайта