5W site logo 5W - мой домашний сайт-блог с картинками, кино и плюшками.

avtohalt-linux-windows-vyklucheniie-elektrich.txt

Автоматическое завершение работы linux и windows при отключении электричества
В наличии:

Три сервера: 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


Получаем примерно следующее