дек 17
Настройка Network UPS Tools

​Network UPS Tools представляет собой набор программ, которые обеспечивают общий
интерфейс для мониторинга и администрирование UPS оборудования. NUT позволяет работать нескольким серверам с одним UPS и позволяет штатно отключать необходимые серверы в случае разрядки батареи, а также возможен мониторинг текущего состояния UPS (нагрузка/зарядка/входная мощность).

 

Схема включения в серверной

Схема 

Несколько UPS подключены к серверу кабелем управления. Это master система со службами upsd и upsmon в режиме мастера. Остальные системы - это slave, для них необходимы только upsmon в подчиненном режиме.  Все команды от master системы подчиненные получают по сети.

 

Установка

Для Debian дистрибутивов пакет nut есть в репозиториях

Выполняем

apt-get install nut-client nut-server

Для Windows систем на сайте (http://www.networkupstools.org/download.html#_binary_packages) есть инсталлятор.

Скачиваем и запускаем установщик от имени администратора. Для master системы так же в инсталляторе выбираем установку libUSB.

 

Структура NUT

процессы:

upsd - сервер

upsmon - клиент

 

программы:

upsc - программа общения с сервером вручную

upsdrvctl - программа запуска драйвера ИБП вручную

upscmd - программа посылки команд в ИБП вручную

upssched - скрипт для гибкой обработки событий от ИБП

 

конфигурационные файлы:

nut.conf - указывает тип работы nut

ups.conf - конфигурация драйвера и способа подключения к ИБП

upsd.conf - конфигурация сервера

upsd.user - описание клиентов и пользователей

upsmon.conf - конфигурация клиента, строка соединения с сервером

upssched.conf - логика отработки событий через скрипт upssched

 Сервер upsd поддерживает связь с ИБП и отвечает на запросы клиентов upsmon.Процесс upsmon (клиент) отвечает за своевременное обнаружение проблем с питанием и принятие необходимых решений.

Примеры конфигурационных файлов

Конфигурация NUT задаётся в файле nut.conf одной строкой:

  • Для master системы MODE=netserver
  • Для slave MODE=netclient

Логика работы с событиями от ИБП задаётся клиентом upsmon в его файле конфигурации upsmon.conf:

  • на master системе:

MONITOR apc1500up@localhost 2 localuser localpass master

MONITOR apc1500low@localhost 2 localuser localpass master

MINSUPPLIES 2

SHUTDOWNCMD "C:\\WINDOWS\\system32\\shutdown.exe -s -t 0"

NOTIFYCMD "C:\\NUT\\bin\\upssched.exe"

POLLFREQ 5

POLLFREQALERT 5

HOSTSYNC 15

DEADTIME 15

POWERDOWNFLAG "C:\\killpower"

NOTIFYMSG ONLINE     "UPS %s on line power"

NOTIFYMSG ONBATT     "UPS %s on battery"

NOTIFYMSG LOWBATT    "UPS %s battery is low"

NOTIFYMSG FSD        "UPS %s: forced shutdown in progress"

NOTIFYMSG COMMOK     "Communications with UPS %s established"

NOTIFYMSG COMMBAD    "Communications with UPS %s lost"

NOTIFYMSG SHUTDOWN   "Auto logout and shutdown proceeding"

NOTIFYMSG REPLBATT   "UPS %s battery needs to be replaced"

NOTIFYMSG NOCOMM     "UPS %s is unavailable"

NOTIFYMSG NOPARENT   "upsmon parent process died - shutdown impossible"

NOTIFYFLAG ONLINE    SYSLOG+WALL+EXEC

NOTIFYFLAG ONBATT    SYSLOG+WALL+EXEC

NOTIFYFLAG LOWBATT   SYSLOG+WALL+EXEC

NOTIFYFLAG FSD       SYSLOG+WALL+EXEC

NOTIFYFLAG COMMOK    SYSLOG+WALL+EXEC

NOTIFYFLAG COMMBAD   SYSLOG+WALL+EXEC

NOTIFYFLAG SHUTDOWN  SYSLOG+WALL+EXEC

NOTIFYFLAG REPLBATT  SYSLOG+WALL+EXEC

NOTIFYFLAG NOCOMM    SYSLOG+WALL+EXEC

NOTIFYFLAG NOPARENT  SYSLOG+WALL+EXEC

RBWARNTIME 43200

NOCOMMWARNTIME 300

FINALDELAY 1000

 

  • на slave системе:

MONITOR apc1500up@master_name_or_ip 2 remoteuser remotepass slave

MONITOR apc1500low@ master_name_or_ip 2 remoteuser remotepass slave

MINSUPPLIES 2

SHUTDOWNCMD "C:\\WINDOWS\\system32\\shutdown.exe -s -t 0"

POLLFREQ 5

POLLFREQALERT 5

HOSTSYNC 15

DEADTIME 15

POWERDOWNFLAG "C:\\killpower"

RBWARNTIME 43200

NOCOMMWARNTIME 300

FINALDELAY 5

 

MONITOR system powervalue username password type

MINSUPPLIES - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной.

SHUTDOWNCMD - 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 при возникновении определенных событий.

NOTIFYCMD - upsmon отправляет сообщение при происшествиях. это программа входит в пакет nut и предназначена для запуска какого-нибудь скрипта по наступлению события и заданного интервала времени. Программа upssched срабатывает на те события в описании которых присутствует слово +EXEC.

NOTIFYFLAG - изменение поведения upsmon при возникновении событий NOTIFY.

RBWARNTIME - предупреждение замены аккумулятора в секундах.

NOCOMMWARNTIME - предупреждение по времени при не общении к UPS в секундах.

FINALDELAY - через сколько выполнить SHUTDOWNCMD.

 

Отредактировав nut.conf и upsmon.conf, настройка slave системы закончена. Остальные конфигурационные файлы необходимы для master.

 

ups.conf

Служит для контроля доступа к серверу и для установки других значений конфигурации.

Пример файла:

LISTEN 127.0.0.1 3493

LISTEN 10.10.0.146 3493

LISTEN address port - здесь указывается IP адрес и порт 3493 (по умолчанию) для прослушивания подключений. Так же на мастере необходимо открыть этот порт для подключений.

 

ups.conf

В этом конфигурационном файле указываются настройки подключения UPS.

Пример:

[apc1500up]

            driver = usbhid-ups

            port = auto

            desc = "Back-UPS 1500 up"

            serial = "#############"

            ignorelb

            override.battery.charge.low = 50

            override.battery.charge.warning = 80

 

[apc1500low]

            driver = usbhid-ups

            port = auto

            desc = "Back-UPS 1500 lower"

            serial = "#############"

            ignorelb

            override.battery.charge.low = 50

            override.battery.charge.warning = 80

[ups_name] - это имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя.

driver - драйвер, используемый для работы с UPS. Для APC обычно используется usbhid-ups.

port - порт, на котором висит UPS (для подключения через USB указываете значение "auto").

serial – так как используются 2 UPS, то что бы NUT умел их различать указываются их серийные номера.  

UPS сначала должен быть подключен один, параметр serial закомментирован и в ups.conf указан только один UPS. Серийный номер получаем из вывода команды upsc apc1500up@localhost ups.serial. Отключили один, включили второй. Повторили команду. И теперь ups.conf можно приводить к финальному виду.

ignorelb – перезапись параметров UPS на свои, указанные ниже. Так как с аккумуляторами беда, установил уровни зарядов low и warning на 50 и 80 соответственно, вместо дефолтных 10 и 50.

 

upsd.users

Контроль доступа для UPS демона (профили пользователей). Именно в этом файле вы указываете, кто и в какой мере будет работать с NUT.

Пример:

[admin]

            password = password

            upsmon master

            allowfrom = localhost

            actions = SET

            instcmds = ALL

 

[localuser]

            password  = localpass

            upsmon master

           

[remoteuser]

            password  = remotepass

            upsmon slave

Значения:

[NAME] - имя пользователя.

password - пароль пользователя.

actions - возможность настройки.

instcmds - выполняемые команды.

upsmon - вид подключения клиентов.

upsmon master - полные полномочия управлением питания подключенных к системе. UPS под управлением этого upsmon и отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех slave мониторов. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon этой системы следует определить его как master.

 

upsmon slave - эта система, под управлением upsmon master и она не выключается непосредственно. Операционная система будет выключена перед отключением питания master. Используйте этот режим при запуске монитора на других серверах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является master. Все остальные сервера будут slave.

 

upssched.conf

Здесь указываются настройки планировщика. Ключевым моментом тут является работа с таймерами.

Алгоритм обработки событий +EXEC, указанных в upsmon.conf, записывается в файле upssched.conf например:

CMDSCRIPT "C:\\upssched.bat"

PIPEFN "C:\\upssched.pipe"

LOCKFN "C:\\upssched.lock"

AT ONBATT * START-TIMER stopcluster 60

AT LOWBATT * EXECUTE sendshutdown

AT ONLINE * CANCEL-TIMER stopcluster

PIPEFN и LOCKFN наверно нужны для правильной обработки таймеров в скрипте.

AT ONBATT * START-TIMER stopcluster 60 

говорит о том, что если на любом (*) ИБП произошёл переход на батареи, то надо запустить таймер stopcluster на 60 сек.

AT ONLINE * CANCEL-TIMER stopcluster

если в течении 60 сек.  питание возвратится, то нужно сбросить таймер, а если нет то произойдёт вызов CMDSCRIPT upssched.bat с параметром stopcluster. Вот пример такого скрипта upssched.bat:

ECHO OFF

CD C:\NUT\bin\

GOTO CASE_%1

:CASE_stopcluster

    powershell -executionpolicy unrestricted -Command "ping 127.0.0.1"

    upsmon -c fsd

    GOTO END_SWITCH

REM :CASE_sendshutdown

REM   upsmon -c fsd

REM    GOTO END_SWITCH

:END_SWITCH

 

Обработать можно следующие события

# ONLINE   : UPS is back online

# ONBATT   : UPS is on battery

# LOWBATT  : UPS has a low battery (if also on battery, it's "critical")

# FSD      : UPS is being shutdown by the master (FSD = "Forced Shutdown")

# COMMOK   : Communications established with the UPS

# COMMBAD  : Communications lost to the UPS

# SHUTDOWN : The system is being shutdown

# REPLBATT : The UPS battery is bad and needs to be replaced

# NOCOMM   : A UPS is unavailable (can't be contacted for monitoring)

# NOPARENT : The process that shuts down the system has died (shutdown impossible)

 

Таким образом, итоговый алгоритм выключения таков:

Если пропало питание, то включается таймер stopcluster на минуту, если не вернулось, то выполняется upssched.bat, в нем прописана powershell команда, после выполнениния которой выполнится upsmon -c fsd (NUT выставляет флаг "Forced Shutdown" и ждёт 15сек. (параметр HOSTSYNC в upsmon.conf) для того чтобы slave клиенты успели принять FSD флаг, и начать завершение работы, т.е. выполнить SHUTDOWNCMD). После выключения всех slave, выключается master.

 

Ссылки

https://sites.google.com/site/plan0metr/home/nut

http://www.ignix.ru/book/freebsd/daemon/network_ups_tools

http://andy.od.ua/news_print_46.html

https://ru.opensuse.org/SDB:Перевод_конфигурационных_файлов_NUT

Заметки

Нет заметок для этой записи.