Подсистема контроля 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 wget -y
cd /tmp
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/nut-2.6.5-2.el6.x86_64.rpm
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/nut-client-2.6.5-2.el6.x86_64.rpm

3. установить данные пакеты, соглашаемся с установкой зависимостей;

yum localinstall nut-2.6.5-2.el6.x86_64.rpm nut-client-2.6.5-2.el6.x86_64.rpm

4. настройка 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

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

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

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

useradd <имя_пользователя>
passwd <имя пользователя>
запоминаем/записываем и вводм password

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

vim /etc/ups/upsd.users
— добавляем строки
[<имя_пользователя>]
   password = <ваш_пароль>
   actions = SET
   instcmds = ALL
   upsmon master

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

vim /etc/ups/upsmon.conf
— добавляем строки
MONITOR <имя_UPS>@localhost 1 <имя_пользователя> <ваш_пароль> master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /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 <имя_UPS>@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 <имя_пользователя> -p <ваш_пароль> <имя_UPS>@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 <имя пользователя> -p <ваш пароль> <имя_UPS>@localhost shutdown.stop
      ;;
      *)
      logger "Unrecognized command: $1"
      ;;
esac

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

chkconfig --level 35 ups on

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

upsc <имя_UPS>@localhost
13. Запускаем скрипт проверки UPS для выключения безопасного режима БД
check_ups_status.sh

Заметки:

0. внимательно смотрите листинги, <имя_пользователя>, <ваш_пароль>, <имя_UPS> — это абстрактное обозначение Ваших данных, так же не надо печатать угловые скобки, т.е. попытка ввода в настройки nut строчек типа: <имя_пользователя>, <имя_UPS>, <etc>... — приведет к ошибкам/некорректной работе;

1. если схема подключения отличается от "эталонной", то при возникновении затруднений — обратиться в техподдержку;

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

2. что бы узнать номер порта и шины UPS, можно воспользоваться утилитой lsusb (если UPS подключен через USB), другие варианты подключения (COM, Ethernet) нужно настраивать индивидуально;

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

2. все параметры настройки UPS можно посмотреть в разделе "Конфигурационные файлы" — пункт "ups.conf"

8. в зависимости от списка команд можно гибко настраивать поведение UPS, если драйвер/UPS поддерживает то или иное действие;

10. shutdown.return — данную опцию нужно проверять командой: upscmd -l <имя_UPS>@localhost

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

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

  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 от сети.
    При этом, в мониторинге лога Вы должны увидеть сообщение следующего содержания:
    UPS on battery. Shutdown in 90 seconds....
    

    По истечении 90 секунд, произойдет завершение работы сервера, в логе должно отобразиться сообщение

    UPS has been on battery for 90 seconds. Starting orderly shutdown
    

    При успешном завершении работы, тест можно считать пройденным. При возникновении каких-либо ошибок, обратитесь в техподдержку 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


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

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

/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

Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.