Сервис управления бесперебойным питанием в сети (NUT)

Как бы мы не уходили от понятия железа в облака, если есть в локальной сети серверное оборудование, то сразу возникает вопрос как бороться с перепадами и стабильностью напряжения и как быть когда пропадает питание в сети?

Решение обычно — это развертывание некой системы, которая обеспечит управление мягким отключением питания нашего оборудования. Как правило, производители систем бесперебойного питания (ИБП) имеют свою системы, но не всегда они бесплатны и доступны, например для простых моделей.

Для реализации подобной задачи развернем NUT в локальной сети.

NUT — NetworkUPSTools программа мониторинга и управления различными ИБП. Состоит из сервера и клиента. Сервер мониторит состояние ИБП и передает команды на клиентов.

В качестве сервера выбран Linux Debian 10, тут нет сильных отличий при установке. Клиентами будут выступать Linux и Windows машины.

Сервер NUT

Установим NUT на сервер:

apt install nut

Список поддерживаемых ИБП (драйвера) можно посмотреть тут — /usr/share/nut/driver.list или выбрать драйвер для устройства на сайте — https://networkupstools.org/stable-hcl.html

Какое именно устройства подключено и на каком порту смотрим командой:

root@debian:~# lsusb
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Посмотрим подробно информацию про наш ИБП:

lsusb -vd 051d:0002

Настройки NUT

vi /etc/nut/nut.conf

MODE=netserver

Определим драйвер, в данном примере — usbhid-ups и настроим параметры:

vi /etc/nut/ups.conf

[apc]
driver = usbhid-ups
port = auto
vendorid = 051d
productid = 0002
desc = "apc smart-ups 1000"

Настройка драйвера NUT для работы с нашим ИБП

Чтобы NUT мог управлять ИБП через USB, необходимо разрешить данные действия в системе. Для этого пропишем правила в udev.
udev — это подсистема управления устройствами, в псевдо-файловой системе /dev находятся активные подключенные устройства к системе.

Создаем файл с правилом для udev:

/etc/udev/rules.d/90-nut-ups.rules

# Smart-UPS 1000 
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="051d", ATTR{idProduct}=="0002", MODE="0660", GROUP="nut"

Перезапустим сервис udev:

systemctl restart udev.service

и проверим настройки:

root@debian:~# upsdrvctl start
Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - Generic HID driver 0.41 (2.7.4)
USB communication driver 0.33
Using subdriver: APC HID 0.96

Если вывод похож на этот, то настроено правильно.

Настройка адресов и портов прослушивания подключений к NUT

В /etc/nut/upsd.conf раскомментируем или добавим:

LISTEN 127.0.0.1 3493
LISTEN 192.168.1.108 3493

Теперь настроим пользователей и пароли для подключения клиентских устройств к серверу NUT:

vi /etc/nut/upsd.users:

[upsadm]
    password = USER_PASS
    actions = SET
    instcmds = ALL

Пользователю upsadm разрешили управлять NUT через утилиту upscmd, менять все параметры ИБП (строка actions = SET и instcmds = ALL). Если нужно разрешить менять только определенные параметры, то их нужно описать в опции instcmds, например:

[upsadm]
...
    instcmds  = test.battery.start
    instcmds  = test.battery.stop
...

Запустим сервер NUT и проверим статус:

systemctl start nut-server.service
systemctl status nut-server.service

Проверим слушает ли NUT настроенные порты:

root@debian:~# ss -ltun | grep 3493
tcp     LISTEN   0        16             127.0.0.1:3493          0.0.0.0:*
tcp     LISTEN   0        16         192.168.1.108:3493          0.0.0.0:*

Сервер наш готов.

Протестируем соединение с ИБП, должно сообщить о своем состоянии:

upsc apc@localhost

Настройка клиентов NUT

Подготовим пользователей клиентов от имени которых будет подключение к NUT. В /etc/nut/upsd.conf добавим секции с пользователями:

vi /etc/nut/upsd.users:

[upsadm]
    password = ups_passwd
    actions = SET
    instcmds = ALL
	
[srv_mon]
    password = srv_passwd
    upsmon master
	
[linux_mon]
    password = linux_passwd
    upsmon slave
	
[win_mon]
    password = win_passwd
    upsmon slave
  • local_mon — пользователь локального (серверного) клиента
  • linux_mon — пользователь linux клиента
  • win_mon — пользователь windows клиента

/etc/nut/upsmon.conf и приведем его к виду:

MONITOR apc@localhost 1 srv_mon srv_passwd master
SHUTDOWNCMD "/sbin/shutdown -h +0"

Разберем значения MONITOR:

  • apc@localhost — имя и адрес ИБП (берется из /etc/nut/ups.conf)
  • 1 — количество ИБП
  • srv_mon srv_passwd — логин и пароль
  • master — опция которая определяет, что данный сервер будет выключен после отключения всех slave серверов

Настройка клиента NUT на сервере под управлением Linux

Для разнообразия в качестве клиента будет выступать Linux CentOS 7, по сути клиента для Debian систем мы настроили на сервере.

yum install nut-client

/etc/ups/upsmon.conf и приведем к виду:

MONITOR apc@192.168.1.108 1 linux_mon linux_passwd slave
SHUTDOWNCMD "/sbin/shutdown -h +0"

Перезапустим сервис и включим автостарт при загрузке:

systemctl restart nut-monitor.service
systemctl enable nut-monitor.service

Проверим подключение к серверу NUT:

upsc apc@192.168.1.108

Настройка клиента Windows

Скачиваем NUT клиент для Windows — и устанавливаем.

В папку где установили NUT в bin находим и кладем библиотеки OpenSSL, о которых предупреждал при установке, ssleay32.dll, libssl32.dll и libeay32.dll. Библиотеки входят в дистрибутив openssl или просто находим отдельными файлами.

NUT\etc\nut.conf.sample переименовываем в NUT\etc\nut.conf и правим:

MODE=netclient

Аналогично upsmon.conf.sample в upsmon.conf и правим:

MONITOR apc@192.168.1.108 1 win_mon win_passwd slave
SHUTDOWNCMD "shutdown /s /t 0"

Далее через Пуск — Программы — NUT:

Stop Service
Start Service

Или через консоль:

net stop "Network UPS Tools"
net start "Network UPS Tools"

Проверим подключение:

"C:\Program Files (x86)\NUT\bin\upsc.exe" apc@192.168.1.108

Еще один рабочий вариант — это использовать приложение WinNUT с GUI. Настройки более понятны и просты, есть подробный readme.

Ссылка на WinNUT.

Проверка системы

Протестируем нашу систему. Отправим сигнал отключения, наши сервера поочередно пойдут выключаться и в конце выключится сервер NUT.

Отправим команду с сервера:

upsmon -c fsd

Дополнительно:

https://networkupstools.org/
https://wiki.debian.org/ru/NetworkUPSToolsHowto
Top