Подсистема контроля UPS

Skip to end of metadata
Go to start of metadata

Подсистема контроля UPS

Зачем нужна подсистема контроля UPS?

При отсутствии подключенного UPS, подсистема минимизирует риски потери информации при работе биллинга путем перевода базы данных в синхронный режим. В этом режиме изменения и новые данные сразу записываются на диск.
При наличии подключенного UPS, подсистема переключает базу данных в асинхронный режим, в этом случае изменения и новые данные хранятся в памяти и периодически сбрасываются на диск подсистемой ввода/вывода операционной системы. Это дает гораздо большую производительность, чем при синхронном режиме.

Ответы на очевидные вопросы

Возникает вопрос: А нужно ли настраивать UPS, если база и так надежно защищена синхронным режимом?
Ответ: Да, нужно. Потому что синхронный режим не гарантирует корректную работы БД после сбоя по питанию, а также кроме БД в биллинге есть другие подсистемы, которые при внезапном отключении питания могут принести долгий простой и много боли при восстановлении.

Настройка подсистемы

Установка пакета Network UPS Tools

  1. создать пользователя и группу с именем "nut", дать пользователю nut права root
    useradd nut
    usermod -a -G root nut
  2. перейти во временную директорию /tmp и скачать пакет Network UPS Tools (далее по тексту — nut), при необходимости установить wget;
    yum install nut -y
  3. настройка udev.
    cp /lib/udev/rules.d/62-nut-usbups.rules /etc/udev/rules.d/

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

Все конфигурационные файлы находятся в директории "/etc/ups".

  • ups.conf - настройки nut для работы с UPS (драйвер/порт/наименование).
  • upsd.conf - настройка основного демона upsd Network UPS Tools.
  • upsd.users - контроль доступа к UPS демону (профили пользователей).
  • upsmon.conf - настройка текущего клиентского агента.

ups.conf

Конфигурация подключенных UPS.

  • [ups_name] - это имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя;
  • driver - драйвер, используемый для работы с UPS;
  • port - порт, на котором висит UPS (для подключения через USB указываете значение "auto"). Для snmp-ups: имя хоста SNMP агента. Для newhidups: значение "auto" для автоматического соединения с USB UPS;
  • bus - канал/шина на котором расположен порт;
  • desc - описание устройства;
  • sdorder - необязательный элемент. При наличии нескольких UPS подключенных к этому серверу можно выключать UPS в определенном порядке. используя upsdrvctl к примеру можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте -1;
  • nolock - необязательный элемент, его не рекомендуется использовать в этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой;
  • maxstartdelay - необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам;
  • cable - Если драйвер UPS требует дополнительных параметров, вы можете указать их здесь. Не указывайте это значение, если ваше подключение к UPS стандартно.

upsd.conf

Служит для контроля доступа к серверу и для установки других значений конфигурации. Этот файл содержит подробные сведения о предоставлении доступа, таким образом, обеспечивается безопасность. В идеальном случае, только процесс upsd должен иметь возможность прочитать данные из этого файла.

  • MAXAGE - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать другое значение только в том случае, если у вас трудности с обновлением данных;
  • LISTEN address port - здесь указывается IP адрес и порт 3493 (по умолчанию) для прослушивания подключений;
  • MAXCONN connections - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнится количество подключений, он больше не будет принимать новых входящих клиентских подключений.

upsd.users

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

  • [NAME] - имя пользователя;
  • password - пароль пользователя;
  • actions - возможность настройки см ниже;
  • instcmds - выполняемые команды см ниже;
  • upsmon - вид подключения клиентов см ниже.

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

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

upsmon monitor-only - при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не будет завершать работу системы.

actions - Действия пользователя с применением upsd.

  • SET - изменить значения определенных переменных в UPS;
  • FSD - установка флага "принудительного выключения" для UPS.

instcmds - разрешения пользователю на инициирование конкретных команд. Применяя "ALL" вы разрешаете использовать все команды, Существует множество команд выполните "upscmd -l  <имя UPS в настройках>" чтобы увидеть, что ваше оборудование поддерживает. Вот, к примеру, несколько команд.

  • test.panel.start - старт теста передней панели
  • test.battery.start - старт теста батареи
  • test.battery.stop - остановка теста батареи
  • calibrate.start - запуск калибровки батареи
  • calibrate.stop - остановка калибровки батареи

upsmon.conf

Этот конфигурационный файл предоставляет основные функции в программе мониторинга UPS, например это безопасное завершение работы при сбое питания, уведомления и другие переменные. В многоуровневой схеме утилиты nut это клиент.

  • MINSUPPLIES - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но дорогие сервера, например HP NetServer LH4 могут работать с 2 из 4 БП и ему нужно ставить 2;
  • 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 помечается как «мертвый». Выставляйте значение этой переменной в несколько (в три раза пойдет) раз больше чем POLLFREQ и POLLFREQALERT;
  • POWERDOWNFLAG - флаг файла для форсирования завершения работы UPS в master системе;
  • NOTIFYMSG - изменение сообщения, отправленные upsmon при возникновении определенных событий;
  • NOTIFYCMD - upsmon отправляет сообщение при происшествиях;
  • NOTIFYFLAG - изменение поведения upsmon при возникновении событий NOTIFY;
  • RBWARNTIME - предупреждение замены аккумулятора в секундах;
  • NOCOMMWARNTIME - предупреждение по времени при не общении к UPS в секундах;
  • FINALDELAY - через сколько выполнить SHUTDOWNCMD.

Что нужно знать перед настройкой UPS

Если только собираетесь покупать UPS, то рекомендуется ознакомится со списком совместимости nuthttp://www.networkupstools.org/stable-hcl.html в фильтре указать интересующие параметры.

1. ознакомится со списком максимально совместимых UPS;

2. определить тип подключения UPS. Это может быть USB, COM, Ethernet, other. Определить можно по спецификации UPS в инструкции пользователя, и/или визуально, при наличии необходимых знаний;

3. если UPS один и подключается через USB (а так же максимально совместим с nut), то в настройках можно указать порт как "auto";

4. если UPS не один, nut не может определить порт в режиме "auto", или тип подключения не через USB, то нужно выяснить порт, через который произведено подключение UPS;

5. найти драйвер для вашего UPS по ссылке — http://www.networkupstools.org/ddl/ находите модель UPS и смотрите строку driver.name;

6. если UPS в единственном числе и подключен на прямую к серверу, то нужно использовать standalone мод, если же схема другая (UPS подключен не напярмую, несколько ups), то nut нужно сконфигурировать под данную схему, обращайтесь в тех. поддержу;

7. Не все UPS одинаково полезны! Некоторые UPS не могут, после обратного перехода с батареи на сеть, включить ПК.


Пример настройки nut

0. обязательно прочитать заметки!

1. Указываем nut,  то есть что UPS один и подключен на прямую к серверу ;

vim /etc/ups/nut.conf
— далее изменяем переменную
MODE = standalone

2. Добавляем UPS (в качестве примера был выбран APC Black-UPS ES 700);

vim /etc/ups/ups.conf
— добавляем строки
[apces700]
       driver =  usbhid-ups
       desc = "Back-UPS ES 700"
       bus = "004"
       port = "005"
       vendorid = 051d
       productid = 0002

В случае, если управление ups будет происходить по snmp, данный файл будет выглядеть примерно следующим образом:

[apces700]
        driver = snmp-ups
        port = 10.0.0.1
        community = public
        snmp_version = v1
        pollfreq = 15
        desc = "Example SNMP v1 device"

Где 10.0.0.1 - ip адрес, по которому доступен ups.
По совместимости Вашего ИБП с драйвером можете обратиться к документации драйвера http://networkupstools.org/docs/man/snmp-ups.html

В некоторых случаях при настройке подключения через COM порт достаточно параметров.

[apces700]
        driver = serial
        desc = "Back-UPS ES 700"
        port = /dev/ttyS0
При использовании переходника USB-to-Serial порт нужно указать такой:
port = /dev/ttyUSB0

3. Устанавливаем IP и порт, на котором демон, будет принимать данные о состоянии UPS;

vim /etc/ups/upsd.conf
— добавляем строки
LISTEN 127.0.0.1 3493

4. Добавляем пользователя, от имени которого будет производится мониторинг и отправка команд в систему;

useradd upsuser
passwd upsuser

5. Добавляем созданного пользователя в настройки;

Если в пароле используются спецсимволы, например №!#%^& - в о всех конфигурационных файлах пароль следует заключать в кавычки:
password = 'my!#%password'
vim /etc/ups/upsd.users
— добавляем строки
[upsuser]
   password = password
   actions = SET
   instcmds = ALL
   upsmon master

6. Устанавливаем основные настройки nut;

vim /etc/ups/upsmon.conf
— добавляем строки
MONITOR apces700@localhost 1 upsuser password master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/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+EXEC
NOTIFYFLAG ONBATT    SYSLOG+EXEC
NOTIFYFLAG LOWBATT   SYSLOG+EXEC
NOTIFYFLAG FSD       SYSLOG+EXEC
NOTIFYFLAG COMMOK    SYSLOG+EXEC
NOTIFYFLAG COMMBAD   SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN  SYSLOG+EXEC
NOTIFYFLAG REPLBATT  SYSLOG+EXEC
NOTIFYFLAG NOCOMM    SYSLOG+EXEC
NOTIFYFLAG NOPARENT  SYSLOG+EXEC
NOCOMMWARNTIME 300
FINALDELAY 0

7. Запускаем демон;

service ups start

8. Проверяем возможности UPS;

upscmd -l apces700@localhost

9. Настраиваем планировщик nut;

vim /etc/ups/upssched.conf
— добавляем
CMDSCRIPT /etc/ups/cmd.sh
PIPEFN /tmp/upspipe
LOCKFN /tmp/upslock
AT COMMBAD * EXECUTE commbad
AT COMMOK * EXECUTE commok
AT NOCOMM * EXECUTE nocomm
AT ONBATT * EXECUTE powerout
AT ONBATT * START-TIMER shutdownnow 90
AT LOWBATT * EXECUTE shutdowncritical
AT ONLINE * CANCEL-TIMER shutdownnow
AT ONLINE * EXECUTE powerup

10. Создаем скрипт поведения UPS при штатных ситуациях;

touch /etc/ups/cmd.sh
chmod 777 /etc/ups/cmd.sh
vim /etc/ups/cmd.sh
- добавляем

#!/bin/bash
case $1 in
      commbad)
      logger  "UPS communications failure"
      ;;
      commok)
      logger  "UPS communications restored"
      ;;
      nocomm)
      logger  "UPS communications cannot be established"
      ;;
      powerout)
      logger "UPS on battery. Shutdown in 90 seconds...."
      upscmd -u upsuser -p password apces700@localhost shutdown.return
      ;;
      shutdownnow)
      logger "UPS has been on battery for 90 seconds. Starting orderly shutdown"
      /etc/init.d/apps stop
      /sbin/shutdown -h now
      ;;
      shutdowncritical)
      logger "UPS battery level CRITICAL. Shutting down NOW!!!!"
      /sbin/shutdown -h now
      ;;
      powerup)
      logger "UPS on line. Shutdown aborted."
      upscmd -u upsuser -p password apces700@localhost shutdown.stop
      ;;
      *)
      logger "Unrecognized command: $1"
      ;;
esac

11. Добавляем демон в автозагрузку;

chkconfig --level 35 ups on

12. Проверяем состояние UPS.

upsc apces700@localhost

13. Запускаем скрипт проверки UPS

check_ups_status.sh

Заметки

  • Внимательно просмотрите листинги, <имя_пользователя>, <ваш_пароль>, <имя_UPS> — это абстрактное обозначение Ваших данных, так же не надо печатать угловые скобки, т.е. попытка ввода в настройки nut строчек типа: <имя_пользователя>, <имя_UPS>, <etc>... — приведет к ошибкам/некорректной работе;
  • Если схема подключения отличается от "эталонной", то при возникновении затруднений — обратиться в техподдержку;
  • Если UPS один и подключается через USB, то в настройках можно указать порт ("port") как "auto" и не вводить "bus";
  • Что бы узнать номер порта и шины UPS, можно воспользоваться утилитой lsusb (если UPS подключен через USB), другие варианты подключения (COM, Ethernet) нужно настраивать индивидуально;
  • Нужный драйвер можно посмотреть на странице проекта — http://www.networkupstools.org/ddl/, находите модель UPS и смотрите строку driver.name;
  • Все параметры настройки UPS можно посмотреть в разделе "Конфигурационные файлы" — пункт "ups.conf"
  • В зависимости от списка команд можно гибко настраивать поведение UPS, если драйвер/UPS поддерживает то или иное действие;
  • shutdown.return — данную опцию нужно проверять командой: upscmd -l <имя_UPS>@localhost
  • Драйвер для Вашего устройства или производителя устройства можно попробовать найти в файле /usr/share/driver.list, например:
    cat /usr/share/driver.list | grep -i Smart-UPS

    Вывод, в котором выведены драйвера с которыми можно попробовать интегрировать APC Smart-UPS:

    "APC"	"ups"	"1"	"Smart-UPS"	""	"apcsmart"
    "APC"	"ups"	"2"	"Smart-UPS USB"	"USB"	"usbhid-ups"
    "APC"	"ups"	"3"	"Smart-UPS RT XL"	"AP9618 SNMP monitoring card"	"snmp-ups"
    

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

Пр окончанию настройки требуется выполнить итоговую проверку работоспособности схемы:

  1. Выполните остановку биллинга во избежание потери данных
    /etc/init.d/apps stop
    
  2. По завершении остановки сервисов биллинга, убедитесь, что UPS подключен и функционирует
    # upsc -L
    apces700: Back-UPS ES 700
    
  3. Запустите мониторинг системного лога
    tail -f -n 0 /var/log/messages | grep -Ei 'ups|shut'
    
  4. Отключите UPS от сети.
    Сообщения в логе должны выглядеть приблизительно так:
    upsmon[1393]: UPS apces700@localhost on battery
    upssched[22505]: Executing command: powerout
    logger: UPS on battery. Shutdown in 90 seconds....
    upsd[1388]: Instant command: ups@127.0.0.1 did shutdown.return on apces700
    upssched[22509]: Timer daemon started
    upssched[22509]: New timer: shutdownnow (90 seconds)
    usbhid-ups[1384]: instcmd: command [shutdown.return] handled
    

    По истечении 90 секунд, сервер должен выключиться.

При успешном завершении работы, тест можно считать пройденным. При возникновении каких-либо ошибок, обратитесь в техподдержку CarbonSoft.

Источники

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

http://redhat-club.org/2011/настройка-nut-2.4.3-с-ups-eaton-env-в-rhel-centos-6

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

http://sysadminblog.sagrer.ru/stati-i-gajdy/linux/18-nastrojka-besperebojnika-na-primere-ippon-smart-powerpro-1000-v-linux.html

Дополнительная информация

Вероятное местоположение информации о типах используемых кабелей для подключения

/app/base/usr/local/lib/nut/docs/images/cables
/app/base/usr/local/lib/nut/docs/cables
/usr/share/doc/nut-2.6.5/docs/cables
/usr/share/doc/nut-2.6.5/docs/images/cables

Подбор параметров для драйвера

Чтобы подобрать правильные параметры, можно попробовать запустить драйвер без запуска NUT.

  1. Укажите параметры запуска драйвера в файле /etc/ups/ups.conf по статье выше
  2. Посмотрите возможные дополнительные опции в справке драйвера. например:
    /sbin/blazer_usb -h

    Вывод:

    Network UPS Tools - Megatec/Q1 protocol USB driver 0.09 (2.6.5)
    
    usage: blazer_usb -a <id> [OPTIONS]
      -a <id>        - autoconfig using ups.conf section <id>
                     - note: -x after -a overrides ups.conf settings
    
      -V             - print version, then exit
      -L             - print parseable list of driver variables
      -D             - raise debugging level
      -q             - raise log level threshold
      -h             - display this help
      -k             - force shutdown
      -i <int>       - poll interval
      -r <dir>       - chroot to <dir>
      -u <user>      - switch to <user> (if started as root)
      -x <var>=<val> - set driver variable <var> to <val>
                     - example: -x cable=940-0095B
    
    Acceptable values for -x or ups.conf in this driver:
    
         Serial-over-USB subdriver selection : -x subdriver=<value>
    Regular expression to match UPS Manufacturer numerical ID (4 digits hexadecimal) : -x vendorid=<value>
    Regular expression to match UPS Product numerical ID (4 digits hexadecimal) : -x productid=<value>
    Regular expression to match UPS Manufacturer string : -x vendor=<value>
    Regular expression to match UPS Product string : -x product=<value>
    Regular expression to match UPS Serial number : -x serial=<value>
    Regular expression to match USB bus name : -x bus=<value>
    Apply the language ID workaround to the krauler subdriver (0x409 or 0x4095) : -x langid_fix=<value>
          Delay before UPS startup (minutes) : -x ondelay=<value>
         Delay before UPS shutdown (seconds) : -x offdelay=<value>
     Parameters used for runtime calculation : -x runtimecal=<value>
         Nominal charge time for UPS battery : -x chargetime=<value>
    Minimum load to be used for runtime calculation : -x idleload=<value>
    Skip reading rating information from UPS : -x norating
    Skip reading vendor information from UPS : -x novendor
    Preselect communication protocol (skip autodetection) : -x protocol
    Read The Fine Manual ('man 8 blazer')
  3. Запустите драйвер указав название UPS из /etc/ups/ups.conf и включив повышенное логирование:
    /sbin/blazer_usb -a myups -DDDDDDDDDD -q

    Ниже представлен вывод в котором видно что UPS определился, драйвер отправил у нему команду, но в получил некорректный ответ по возможным протоколам:

    Network UPS Tools - Megatec/Q1 protocol USB driver 0.09 (2.6.5)
       0.000000	debug level is '10'
       0.000531	Checking device (03F0/7029) (006/002)
       0.000559	- VendorID: 03f0
       0.000564	- ProductID: 7029
       0.000567	- Manufacturer: unknown
       0.000571	- Product: unknown
       0.000574	- Serial Number: unknown
       0.000578	- Bus: 006
       0.000581	Trying to match device
       0.000604	Device does not match - skipping
       0.000611	Checking device (1D6B/0001) (006/001)
       0.000623	- VendorID: 1d6b
       0.000627	- ProductID: 0001
       0.000631	- Manufacturer: unknown
       0.000634	- Product: unknown
       0.000638	- Serial Number: unknown
       0.000641	- Bus: 006
       0.000645	Trying to match device
       0.000649	Device does not match - skipping
       0.000654	Checking device (06DA/FFFF) (005/094)
       0.013669	- VendorID: 06da
       0.013687	- ProductID: ffff
       0.013694	- Manufacturer: PPC
       0.013701	- Product: HID UPS
       0.013711	- Serial Number: BKX2BBH00482
       0.013719	- Bus: 005
       0.013725	Trying to match device
       0.013783	Device matches
       0.013806	failed to claim USB device: could not claim interface 0: Device or resource busy
       0.014461	detached kernel driver from USB device...
       0.014672	send_to_all: SETINFO ups.vendorid "06da"
       0.014685	send_to_all: SETINFO ups.productid "ffff"
       0.014699	send_to_all: SETINFO device.type "ups"
       0.014710	send_to_all: SETINFO driver.version "2.6.5"
       0.014719	send_to_all: SETINFO driver.version.internal "0.09"
       0.014731	send_to_all: SETINFO driver.name "blazer_usb"
       0.014739	Trying megatec protocol...
       0.015812	send: Q1
       1.017703	read: Connection timed out
       1.017729	blazer_status: short reply
       1.017736	Status read 1 failed
       1.019690	send: Q1
       2.021680	read: Connection timed out
       2.021711	blazer_status: short reply
       2.021720	Status read 2 failed
       2.023667	send: Q1
       3.025677	read: Connection timed out
       3.025706	blazer_status: short reply
       3.025715	Status read 3 failed
       3.025722	Trying mustek protocol...
       3.027667	send: QS
       4.029707	read: Connection timed out
       4.029727	blazer_status: short reply
       4.029733	Status read 1 failed
       4.031687	send: QS
       5.033673	read: Connection timed out
       5.033700	blazer_status: short reply
       5.033706	Status read 2 failed
       5.035721	send: QS
       6.037674	read: Connection timed out
       6.037697	blazer_status: short reply
       6.037703	Status read 3 failed
       6.037708	Trying megatec/old protocol...
       6.039662	send: D
       7.041704	read: Connection timed out
       7.041734	blazer_status: short reply
       7.041743	Status read 1 failed
       7.043672	send: D
       8.045670	read: Connection timed out
       8.045693	blazer_status: short reply
       8.045700	Status read 2 failed
       8.047666	send: D
       9.049676	read: Connection timed out
       9.049703	blazer_status: short reply
       9.049709	Status read 3 failed
       9.049714	Trying zinto protocol...
       9.051703	send: Q1
      10.053674	read: Connection timed out
      10.053699	blazer_status: short reply
      10.053705	Status read 1 failed
      10.055728	send: Q1
      11.057670	read: Connection timed out
      11.057692	blazer_status: short reply
      11.057698	Status read 2 failed
      11.059667	send: Q1
      12.061677	read: Connection timed out
      12.061701	blazer_status: short reply
      12.061707	Status read 3 failed
      12.061712	No supported UPS detected
    
  4. Попробуйте изменить данные в конфигурационном файле и повторить операцию. Если Вам удастся найти подходящий драйвер и параметры, UPS настроить возможно.

UPS INELT

Устройства INELT ранее интегрировались с драйвером megatec, в текущей версии NUT - с драйвером blazer_ser:

cat /usr/share/driver.list | grep -i inelt
"INELT"	"ups"	"2"	"Monolith 1000LT"	""	"blazer_ser"
"INELT"	"ups"	"2"	"Monolith 3000RT"	""	"blazer_ser"

UPS Ippon Smart Winner 1000

Работает только при подключении к COM-порту! USB подключение не работает.

Укажите следующие настройки драйвера:

[IpponSmartWinner1000]
	driver = blazer_ser
	port = /dev/ttyS0
	default.battery.voltage.high = 26.00 #Напряжение при полном заряде
	default.battery.voltage.low = 20.80 #Напряжение разряденной батареи
	desc = "Ippon Smart Winner"

Параметры default.battery.voltage.high и default.battery.voltage.low могут отличаться для Ваших батарей. Посмотрите параметры батареи в сопроводительной документации или опытным путем, зарядив UPS на 100% и посмотрев значение battery.voltage ниже приведенной командой:

upsc IpponSmartWinner1000@localhost | grep  'battery.voltage:'

Таким же способом можно посмотреть вольтаж разряженной батареи.
Полный набор возможных параметров драйвера Вы можете ухнать из его документации: BLAZER_SER(8)

Платформа корректно завершает работу, но сервер не выключается, а уходит в перезагрузку.

Это может возникнуть по причине того что драйвер не распознает комнаду shutdown (не путать с shutdown.return), выполняемую стандартными скриптами CentOS 6 при выключении:

Для решения проблемы найдите в скрипте /etc/init.d/halt строку с текстом "Shutdown UPS drivers" и приведите скрипт к следующему виду:

# Shutdown UPS drivers
if [ "$command" = /sbin/halt -a -f /etc/sysconfig/ups ]; then
        . /etc/sysconfig/ups
        if [ -z $POWERDOWNFLAG ]; then
                POWERDOWNFLAG=/etc/killpower
        fi
        if [ "$SERVER" = "yes" -a -f $POWERDOWNFLAG ]; then
                #/sbin/upsdrvctl shutdown
                #sleep 120
                #/sbin/reboot --force
                :
        fi
fi

UPS PowerWare 9120

При подключении по USB используется драйвер bcmxcp_usb (https://networkupstools.org/docs/man/bcmxcp_usb.html). По умолчанию в его настройках задан параметр shudown_delay в 120 сек, подающий команду на выключение UPS через 120 секунд после перехода на батареи. Этого времени может не хватить для корректного завершения работы контейнеров, поэтому необходимо добавить в файл /etc/ups/ups.conf строку

shutdown_delay = "120"

где 120 - изменяемое значение параметра в секундах.

Dummy UPS для тестов

Для отладки и экспериментирования с параметрами можно воспользоваться виртуальным UPS.
Для этог опонадобится слепок параметров реального UPS, которые можно будет динамический изменять. Таким образом, Вы сможете протестировать реакцию биллинга на изменение тех или иных параметров.
Если у Вас пока нет UPS, Вы можете использовать данные параметры:

battery.charge: 100
battery.voltage: 27.40
battery.voltage.high: 26.00
battery.voltage.low: 20.80
battery.voltage.nominal: 24.0
device.type: ups
driver.parameter.pollinterval: 2
driver.version: 2.6.5
driver.version.internal: 1.55
input.current.nominal: 4.0
input.frequency: 49.9
input.frequency.nominal: 50
input.voltage: 235.7
input.voltage.fault: 229.6
input.voltage.nominal: 220
output.voltage: 204.8
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 0
ups.status: OL
ups.temperature: 26.8
ups.type: offline / line interactive

Запишите их в файл /etc/ups/test.dev и укажите следующие параметры UPS в /etc/ups/ups.conf:

[dummy]
       driver = dummy-ups
       port = test.dev
       desc = "Dymmy ups for debugging Carbon UPS monitoring system"

Драйвер постоянно читает данные из файла test.dev, чтобы эмулировать переход на питание от сети или батарейки исправьте значение ups.status:

  • OL - питание от сети
  • OB - питание от батареи

Добавьте init скрипт, который будет переписывать статус питания виртуального UPS при старте системы:

touch /etc/init.d/upstest 
chmod a+x /etc/init.d/upstest

Листинг скрипта:

#!/bin/bash

sed 's/ups\.status.*/ups.status: OL/g' -i /etc/ups/test.dev
Физический UPS можете по-разному реагировать на параметры заданные в /etc/ups/upsmon.conf, поэтому результаты тестов не обязательно будут отражать поведение реального устройства
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.