В наличии:
Три сервера: 2 под GNU/Debian и 1 под windows 2003.
Два UPS: APC Smart-UPS 1000 и APC Back-UPS RS 800.
Back-UPS подключен к linux. Питание мониторится через usb интерфейс.
Smart-UPS подключен к linux и windows. Питание мониторится через com интерфейс подключенный к linux.
Задача: настроить корректное завершение работы в случае отключения электричества на всех трех серверах.
Для UPS компании APC существует утилита apcupsd.
Back-UPS + linux
Ставим
aptitude update && aptitude install apcupsd
Изменяем no на yes в /etc/apcupsd/apcupsd
ISCONFIGURED=yes
Далее идем рихтовать конфиг /etc/apcupsd/apcupsd.conf
#тип-кабеля
UPSCABLE usb
#тип соединения
UPSTYPE usb
DEVICE
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /etc/apcupsd
NOLOGINDIR /etc
ONBATTERYDELAY 6
#Заряд батареи в процентах после которого начинается выключение
BATTERYLEVEL 10
#Кол-во минут до разряда батареи после которого начинается выключение
MINUTES 3
#Если не нуль, то число секунд после сбоя питания перед началом выключения
TIMEOUT 0
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 127.0.0.1
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 0
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0
Проверяем
gate:/etc/default# apcaccess
Error contacting apcupsd @ localhost:3551: Connection refused
Что то корректно не работает
При этом
gate:/etc/default# lsusb
ничего не выводит. Это меня натолкнуло на мысль, что в BIOS отключены usb порты. Проверка биоса подтвердила мою догадку. После включения usb потров:
gate:/# apcaccess
APC : 001,044,1057
DATE : Mon Nov 09 14:39:56 EET 2009
HOSTNAME : gate
RELEASE : 3.14.4
VERSION : 3.14.4 (18 May 2008) debian
UPSNAME : gate
CABLE : USB Cable
MODEL : Back-UPS BR 800
UPSMODE : Stand Alone
STARTTIME: Mon Nov 09 14:39:26 EET 2009
STATUS : ONLINE
LINEV : 224.0 Volts
LOADPCT : 14.0 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 36.8 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
OUTPUTV : 230.0 Volts
SENSE : High
DWAKE : 000 Seconds
DSHUTD : 000 Seconds
LOTRANS : 188.0 Volts
HITRANS : 264.0 Volts
RETPCT : 000.0 Percent
ITEMP : 29.2 C Internal
ALARMDEL : Always
BATTV : 27.6 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Low line voltage
NUMXFERS : 0
TONBATT : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x07000008 Status Flag
SERIALNO : QB0543233740
BATTDATE : 2001-09-25
NOMOUTV : 230 Volts
NOMINV : 230 Volts
NOMBATTV : 24.0 Volts
NOMPOWER : 540 Watts
FIRMWARE : 9.o2 .I USB FW:o2
APCMODEL : Back-UPS BR 800
END APC : Mon Nov 09 14:40:26 EET 2009
gate:/etc/apcupsd# ps aux |grep apc
root 3687 0.0 0.0 13648 852 ? Ssl 14:46 0:00 /sbin/apcupsd
root 3763 0.0 0.0 3144 780 pts/1 S+ 14:50 0:00 grep apc
Соответственно все работает.
Получить некоторую информацию и настроить UPS можно через команду apctest.
Перед использованием необходимо:
gate:/etc/apcupsd# /etc/init.d/apcupsd stop
Stopping UPS power management: apcupsd.
gate:/etc/apcupsd# apctest
2009-11-09 14:54:36 apctest 3.14.4 (18 May 2008) debian
Checking configuration ...
Attached to driver: usb
sharenet.type = DISABLE
cable.type = USB_CABLE You are using a USB cable type, so I'm entering USB test mode
mode.type = USB_UPS
Setting up the port ...
Hello, this is the apcupsd Cable Test program.
This part of apctest is for testing USB UPSes. Getting UPS capabilities...SUCCESS Please select the function you want to perform. 1) Test kill UPS power
2) Perform self-test
3) Read last self-test result
4) Change battery date
5) View battery date
6) View manufacturing date
7) Set alarm behavior
8) Set sensitivity
9) Set low transfer voltage
10) Set high transfer voltage
11) Quit
После использования apctest не забываем запустить apcupsd
gate:/etc/apcupsd# /etc/init.d/apcupsd start
Starting UPS power management: apcupsd.
Smart-UPS + linux + windows
Ставим
aptitude update && aptitude install apcupsd
Изменяем no на yes в /etc/apcupsd/apcupsd
ISCONFIGURED=yes
Далее идем рихтовать конфиг /etc/apcupsd/apcupsd.conf
#тип-кабеля
UPSCABLE smart
#тип соединения
UPSTYPE apcsmart
DEVICE /dev/ttyS0
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /etc/apcupsd
NOLOGINDIR /etc
ONBATTERYDELAY 6
#Заряд батареи в процентах после которого начинается выключение
BATTERYLEVEL 10
MINUTES 3
#Если не нуль, то число секунд после сбоя питания перед началом выключения
TIMEOUT 0
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
#NIS сервер слушает на всех сетевых интерфейсах.
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 0
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0
Запускаем
ns1:/var/log# /etc/init.d/apcupsd start
Starting UPS power management: apcupsd.
Сразу проверяем и получаем.
ns1:/var/log# apcaccess
Error contacting apcupsd @ localhost:3551: Connection refused
Но проблема вовсе не в том, что что то не работает, а по всей видимости в тормознутости последовательного интерфейса. После запуска демона ждем 15 секунд и вновь повторяем команду
ns1:/var/log# apcaccess
APC : 001,052,1237
DATE : Tue Nov 10 12:27:58 EET 2009
HOSTNAME : ns1
RELEASE : 3.14.4
VERSION : 3.14.4 (18 May 2008) debian
UPSNAME : UPS_IDEN
CABLE : Custom Cable Smart
MODEL : Smart-UPS 1000
UPSMODE : ShareUPS Master
STARTTIME: Tue Nov 10 12:27:40 EET 2009
SHARE : ShareUPS
STATUS : ONLINE
LINEV : 221.7 Volts
LOADPCT : 40.9 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 17.0 Minutes
MBATTCHG : 10 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
MAXLINEV : 223.2 Volts
MINLINEV : 221.7 Volts
OUTPUTV : 221.7 Volts
SENSE : High
DWAKE : 000 Seconds
DSHUTD : 180 Seconds
DLOWBATT : 02 Minutes
LOTRANS : 208.0 Volts
HITRANS : 253.0 Volts
RETPCT : 000.0 Percent
ITEMP : 31.9 C Internal
ALARMDEL : 5 seconds
BATTV : 27.4 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Unacceptable line voltage changes
NUMXFERS : 0
TONBATT : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI : 336
STATFLAG : 0x07000008 Status Flag
REG1 : 0x00 Register 1
REG2 : 0x00 Register 2
REG3 : 0x00 Register 3
MANDATE : 02/13/04
SERIALNO : AS0407331128
BATTDATE : 02/13/04
NOMOUTV : 230 Volts
NOMBATTV : 24.0 Volts
EXTBATTS : 0
FIRMWARE : 600.3.I
APCMODEL : FWI
END APC : Tue Nov 10 12:28:30 EET 2009
Калибровка Smart-UPS
Желательно провести калибровку UPS для более точного определения времени работы от батарей. Операцию калибровки желательно проводить раз в год. При данной операции батарея будет разряжена до 30%.
Останавливаем демон
# /etc/init.d/apcupsd stop
Stopping UPS power management: apcupsd.
# apctest
Появляется меню
1) Query the UPS for all known values
2) Perform a Battery Runtime Calibration
3) Abort Battery Calibration
4) Monitor Battery Calibration progress
5) Program EEPROM
6) Enter TTY mode communicating with UPS
7) Quit
Выбираем второй пункт.
У меня калибровка заняла 16 минут при том, что к UPS было подключено два сервера.
После калибровки не забываем запустить демон
# /etc/init.d/apcupsd start
Итак, все работает.
Теперь необходимо настроить сервер с windows питание которого подключено к нашему Smart-UPS.
Скачиваем winapcupsd для windows.
После установки рихтуем конфиг
C:\apcupsd\etc\apcupsd\apcupsd.conf
UPSCABLE ether
UPSTYPE net
#IP того сервера к которому подключен UPS
DEVICE 192.168.37.2:3551
#Интервал опроса сервера в секундах.
POLLTIME 30
SCRIPTDIR C:\apcupsd\etc\apcupsd
PWRFAILDIR C:\apcupsd\etc\apcupsd
NOLOGINDIR C:\apcupsd\etc\apcupsd
ONBATTERYDELAY 6
# Выставляем значения больше чем на сервере к которому подключен UPS.
# Т. к. данный сервер должен выключиться раньше. Иначе некого будет опрашивать :)
BATTERYLEVEL 20
MINUTES 6
TIMEOUT 0
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE C:\apcupsd\etc\apcupsd\apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 0
STATFILE C:\apcupsd\etc\apcupsd\apcupsd.status
LOGSTATS off
DATATIME 0
Перезапускаем службу
net stop apcupsd
net start apcupsd
Тестирование Apcupsd
Если есть сомнение в том, что если UPS корректно выключат сервера, то можно схитрить — сервера временно подключить к другим UPS или же напрямую в розетку.
Back-UPS + linux
Устанавливаем в конфиге /etc/apcupsd/apcupsd.conf
TIMEOUT 60
Отключаем UPS от розетки.
После минуты сервер должен начать корректно завершать работу.
Наблюдать за процессом можно
gate:/etc/apcupsd# tail -f /var/log/apcupsd.events
Smart-UPS + linux + windows
Устанавливаем в конфиге на linux /etc/apcupsd/apcupsd.conf
TIMEOUT 180
Устанавливаем в конфиге на windows C:\apcupsd\etc\apcupsd\apcupsd.conf
TIMEOUT 60
Отключаем UPS от розетки.
После минуты windows-сервер должен начать корректно завершать работу.
После трех минут linux-сервер должен начать корректно завершать работу.
Почему windows-сервер должен завершать работу раньше linux-сервера думаю объяснять не следует.
После тестов не забываем вернуть значения TIMEOUT в нуль.
apcupsd-cgi — мониторинг UPS через web-интерфейс
Для удобного мониторинга наших UPS настроим web-интерфейс на одном из серверов linux.
aptitude install apcupsd-cgi
Прописуем в файле /etc/apcupsd/hosts.conf ip-адреса и названия наших серверов.
MONITOR 127.0.0.1 "gate"
MONITOR 192.168.37.2 "ns1"
MONITOR 192.168.37.1 "srv"
заходим через браузер
http://gate/cgi-bin/apcupsd/multimon.cgi
Получаем примерно следующее
Ссылки