Как бы мы не уходили от понятия железа в облака, если есть в локальной сети серверное оборудование, то сразу возникает вопрос как бороться с перепадами и стабильностью напряжения и как быть когда пропадает питание в сети?
Решение обычно — это развертывание некой системы, которая обеспечит управление мягким отключением питания нашего оборудования. Как правило, производители систем бесперебойного питания (ИБП) имеют свою системы, но не всегда они бесплатны и доступны, например для простых моделей.
Для реализации подобной задачи развернем 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
Приветсвую!
а как настроить параметры самого APC Smart-UPS 1000 ?
например мне надо, чтобы параметр
ups.beeper.status: disable
и установить подачу нагрузки после зарядки UPS на 90%.
Как это сделать?
upsc aps ups.beeper.status
Вроде так
Ну и
upscmd -l apс
beeper.disable
Остальное тоже можно загуглить. Слишком подробно уже не помню