Блог ИТ склеротика. Автоматическое завершение работы linux и windows при отключении электричества

Страницы

Расширенный поиск в статьях блога

29 мая 2012 г.

Автоматическое завершение работы 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

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





Ссылки




.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free