Настройка NUT сервера на базе pfsense + Powercom Vanguard

nutВ серверной стойке имелся бесперебойник Powercom Vanguard VGD-3000 и шлюз работающий под pfsense. В связи с начавшимися и при этом достаточно частыми отключениями электричества встал вопрос о сохранности серверов не подключенных к программе управления упсом. Самым логичным решением стал NUT, тем более его пакет есть в pfsense. Но не все так просто, этот пакет собран и настроен для простого локального мониторинга упса, настроить NUT в качестве сервера для Windows машин через Web интерфейс нельзя. Но так как это хоть сильно порезанный, но все же FreeBSD 8.1, все легко настраивается через консоль. Поехали!

1. Ставим пакет, но ничего в нем не настраиваем через Web морду (это важно! любые изменения в веб морде перетирают конфиги).

2. Идем на сайт NUT и смотрим какой драйвер использовать для этого упса.

3. Настраиваем все лежащие тут конфиги /usr/local/etc/nut

ups.conf

# Название бесперебойника в конфигурации.
[UPS]
# Драйвер бесперебойника.
driver=blazer_ser
# Порт к которому он подключен.
port=/dev/cuau0
# Описание. Но виндовые клиенты его не видят.
desc = "Powercom Vanguard VGD-3000"
# Переопределение максимального и минимального вольтажа батарейного блока.
default.battery.voltage.high = 84.96 default.battery.voltage.low = 71.84

О последних двух параметрах хотелось бы сказать отдельно. Эти параметры переопределяют максимальный и минимальный вольтаж батарейного блока, ибо драйвер делает это неверно, так же он совершенно не учитывает возможность подключения нескольких батарейных блоков. На основание этих величин NUT высчитывает заряд батареи в процентах. Если не выставить правильно, батарея будет выглядеть разряженной, и соответственно счетчики на выключение будут обрабатываться не должным образом. Как видно на скриншоте:

Коррекция заряда батареи в NUT

 

 

 

 

 

 

 

 

При полном заряде, мой батарейный блок показывает 84.96 V, но при этом заряд батареи 73%. После внесения поправок в конфигурации заряд батарее отображается верно.

Минимальный же заряд можно посмотреть на выводе команды  upsc UPS@localhost

battery.charge: 100
battery.voltage: 84.96
battery.voltage.high: 84.96
battery.voltage.low: 71.84
battery.voltage.nominal: 82.9
device.mfr: UPS
device.model: Model 3000
device.type: ups
driver.name: blazer_ser
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/cuau0
driver.version: 2.6.4
driver.version.internal: 1.55
input.current.nominal: 14.0
input.frequency: 50.0
input.frequency.nominal: 50
input.voltage: 219.5
input.voltage.fault: 0.0
input.voltage.nominal: 220
output.voltage: 220.0
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.firmware: Ver R1.4B
ups.load: 13
ups.mfr: UPS
ups.model: Model 3000
ups.status: OL
ups.temperature: 28.0
ups.type: online

upsd.conf

# Интерфейсы через которые возможно подключение к NUT.
LISTEN 127.0.0.1
LISTEN ::1
LISTEN 192.168.0.1

upsd.users

# Учетная запись которая может управлять NUT.
[monuser]
password = nut510b5e0f983bc
upsmon master

# Учетная запись которая только подчиняется, без возможности управления.
[monslave]
password = win upsmon slave

upsmon.conf

# Не буду повторятся. Все настройки этой секции, и более
# подробное объяснение секций выше
# можно и нужно смотреть в этой статье.

MONITOR UPS@localhost 1 monuser nut510b5e0f983bc master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -p +0"
POWERDOWNFLAG /etc/killpower
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
NOTIFYFLAG ONLINE SYSLOG+WALL
NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG SHUTDOWN SYSLOG+WALL
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

4. Закрепляем результат:

Как оказалось pfsense довольно специфически устроен. Его настройки хранятся в xml файлах, эти файлы формируются на основе веб морды, а уже на основание этих xml переформируются все конфиги. Так как я ничего не делал через веб морду, все конфиги после перезагрузки затерлись. Я потратил некоторое время что бы сделать 2 вывода.

Первый, это то, что подобная система интересна, но очень хрупка и как показал эксперимент, если убить основной xml, система перестает работать на все 100% (не советую трогать эти файлы на рабочей машине).

Второй вывод, это то, что пытаться разобраться в устройстве этой схемы, или пытаться конфигурировать pfsense через xml не имеет вообще никакого смысла.

Выход из ситуации прост и костылеобразен ))) После настройки копируем папку с конфигами NUT в надежное место (home, root, var, в общем, куда угодно) и после перезагрузки и переформирования конфиговх погаными xml, заменяем получившиеся конфиги своими и перезапускаем сервер. Это костыль, но это надежно и это работает.

Я сохранил конфиги в /root Создал в /usr/local/etc/rc.d (Каталог с пользовательскими скриптами, которые стартуют после загрузки системы.) sh скрипт с таким содержимым:

#!/bin/sh
# Выжидаем 15 сек, что бы не переписать конфиги раньше, чем они переформируются.
sleep 15
# Копируем свои конфиги на место и перегружаем NUT
cp -R /root/nut /usr/local/etc && /usr/local/etc/rc.d/nut onerestart

Существует еще один вариант сохранить свои конфиги. Все конфиги создаются по нужным папкам и файлам руководствуясь этим файлом настройки /usr/local/pkg/nut.inc

Можно сменить в нем целевую папку с /usr/local/etc/nut на какую то другую, и тогда пере заливка не будет портить наши конфиги. Просто меняем строчку NUT_DIR’,’/usr/local/etc/nut например на такую NUT_DIR’,’/usr/local/etc/nut_pfsense только надо предварительно создать папку nut_pfsense.

mkdir /usr/local/etc/nut_pfsense

Можно выбрать любой из способов, второй более вменяемый, но первый не перестает работать после обновления pfsense, так что думайте сами.

На этом настройка серверной части закончена, осталось настроить машины под Windows.

5. Настройка Windows машина на работу с нашим сервером.

Есть 2 программы под Windows способные работать с NUT, первая это WinNutClient — скриншот из которой представлен у меня выше, а вторая WinNutUpsMonV2.0.0b. Так как первая программа больше подходит для мониторинга и может быть выключения рабочих станций, для серверов она не подходит совсем, т.к. не может стартовать в качестве службы и имеет достаточно ограниченный функционал. WinNutUpsMonV2.0.0b не имеет интерфейса вообще и стартует только как служба, но зато имеет почти те же настройки что и сам нут, а это то, что надо на серверах.

Лирическое отступление о моем применение WinNutClient. У меня в сетки используются перемещаемые профили, при этом, почти все программы работают с сервера (ну и документы там всякие запускаются оттуда же), при подобном подходе к организации работы, без серверов пользователям вообще нечего делать, и было бы неплохо погасить все компьютеры в организации раньше серверов. Именно для этого я и использовал WinNutClient, поставил его на все компы в автозагрузку, после работы обесточил офис, и замерил время работы самого слабого звена (той машины, которая выключилась первая), затем посчитал на сколько процентов разрядился серверный упс за это время и выставил процент разряда на всех компах.
По итогу я получил тот эффект, который был мне нужен. После отключения питания, через 20 минут гаснут рабочие машины (И не надо заморачиваться с разношерстным софтом от разных производителей упсов, и настройкой каждого компьютера в отдельности. Эта утилита настраивается один раз, а затем просто копируется на компа пользователей через групповые политики, или еще как то.), еще через какое то время гаснут сервера. По итогу все счастливы, данные не потерялись, с машинами и серверами все в порядке, профили выгрузились на сервер, и готовы к перемещению в любое другое место (как вариант, ведь электричества может не быть очень долго).

winnut

 

 

 

 

 

 

 

 

 

Скачав установочный пакет WinNUT распакуем и инсталлируем его выбрав вариант Full instalation. В главном окне программы отметим флажок Install As Service, чтобы задействовать службу как сервис Windows, и флажок Automatic Startup, чтобы сервис стартовал после загрузки Windows.

Правим файл upsmon.conf расположенный в каталоге с программой.

MONITOR ups@enconas 1 root freenas slave

Здесь после @ идет сетевое имя компьютера на котором работает NUT сервер. По умолчанию для связи используется порт 3493, но его можно переопределить, задав явное значение через двоеточие (например hostname:5678). Значение 1 указывает на количество батарей UPS. Далее идут логин и пароль на доступ к серверу.

Команда которая будет выполнятся при получение сигнала от NUT, это не обязательно может быть выключение, тут можно много чего интересного придумать.

SHUTDOWNCMD «shutdown -s»

Перед отключением Windows желательно об этом сообщить пользователю (хотя это актуально только на терминальных серверах). И еще, надо обратить внимание на путь до alertPopup, ибо он почему то часто «левый».

NOTIFYCMD «c:\\Program Files\\WinNUT\\alertPopup.exe»

Пожалуй самый важный параметр, он указывает остаток заряда батарее в процентах, при котором начинается завершение работы (ну или что вы там себе зададите параметром SHUTDOWNCMD).

Хочется обговорить один момент, который ИМХО достаточно важен, но нигде я не встретил упоминания о такой ситуации. Представим себе следующее: Сервер с NUT и сервер с виндой подключены к одной розетке упса, при этом наступает момент разрядки ниже установленной нами границы в 5%, сервер с виндой гаснет в штатном режиме. И как только он гаснет, включают электричество, розетка не была обесточена (ведь сервер с NUT продолжает рабоать), поэтому сам запустится по настройке BIOS сервер не сможет, и будет оставаться выключен до ручного включения. Поэтому разумным решение будет выставление одинакового процента отключения на сервере и на клиентах (но при этом надо выставлять параметры POLLFREQ и POLLFREQALERT на более частое время опроса, дабы клиент не пропустил сигнал выключения от сервера, ведь повтора не будет. У меня выставлено по 1 секунде). Или как вариант, выставить процент с минимальным отличием, к примеру, на сервере 5%, на клиентах 6%, но подобный поход будет не состоятельным при мощном батарейном блоке и низкой нагрузке на упс, ибо даже один процент разряда может означать и 10 и 20 минут работы.

FINALDELAY 5

Опрос мониторами с частотой (измеряется в секундах) для обычной деятельности.

POLLFREQ 1

Опрос упса с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи.

POLLFREQALERT 1

Обычно тут все копируют строчку про зашумление сети, я вам хочу сказать, что это уже очень давно не актуально, ибо эта рекомендация писалась еще во времена каоксиала и любая езернетовская сеть, пусть даже 10BASE-T, не почувствует «шума» от сотни NUT серверов.

Закончив этап настройки можно запустить сервис на исполнение. Для этого жмем кнопку «Apply and Start WinNUT«. Состояние строки Status: должно измениться с Not Running на Running as Service, а в логе не должно быть ошибок!

Проверить работу всей системы можно командой:

upsmon -c fsd

на NUT сервере (выполняющего в режиме master`а).

Смотрите так же:

Настройка NUT сервера на базе pfsense + Powercom Vanguard: 3 комментария

  1. Я если честно тоже не встречал, да и у себя нечего подобного не довелось применять пока )

    1. Спасибо. Хотелось бы каких то эксплуатационных отзывов об этой схеме, т.к. подобных решений в интернете я не встречал.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.