feroom

Настройка корректного завершения работы операционной системы с применением Network UPS Tools

1 сообщение в этой теме

      Настройка корректного завершения работы операционной системы с применением Network UPS Tools

      на примере ИБП Delta GES102N200035

 

Определение типа драйвера:
[root@testserver-* src]# cat /usr/share/driver.list | grep Delta
"Delta" "ups"   "1"     "GES602N"       ""      "belkin"

[root@testserver-* src]# cd /etc/ups

Основные конфигурационные файлы:
  - nut.conf: Режим работы системы.
  - ups.conf: Настройки NUT для работы с ИБП (драйвер/порт/наименование).
  - upsd.conf: Настройка основного демона upsd Network UPS Tools.
  - upsd.users: Контроль доступа к ИБП демону (профили пользователей).
  - upsmon.conf: Настройка текущего клиентского агента.

[root@testserver-* src]# nano nut.conf
################################################################################
MODE=netserver
################################################################################
Значения MODE:
  - none: NUT не настроен, для использовать комплексного управления питанием.
        Таким образом, ничто не должно быть запущено.

  - standalone: Этот режим для решения автономной конфигурации, только с одним ИБП.

  - netserver: Такой же, как для автономной конфигурации, но существует необходимость
              контроля доступа из несколько сетей и вызывает необходимость указывать
              конкретные директивы разрешений в upsd.conf.
              Поскольку этот режим работы с сетью, особое внимание должно быть обращено
              на безопасность.

  - netclient: Этот режим требует только upsmon (клиент, подключаемый по сети).

[root@testserver-* src]# nano ups.conf
#####################################
[DELTA]
  driver = belkin
  port = /dev/cuau0
  override.battery.charge.low = 70
  desc = "Delta GES102N200035"
#####################################################
  - [ups_name]: Это имя используется как адрес вашего ИБП.
              Можно его изменить на любое произвольное имя.
              В нашем случае, на пример "DELTA".

  - driver: Драйвер, используемый для работы с ИБП.

  - port: Порт, на котором висит ИБП (для подключения через USB указываете значение "auto").
          Для snmp-ups: имя хоста SNMP агента.

  - desc: Описание устройства.

  - sdorder: Необязательный элемент.
            При наличии нескольких ИБП, подключенных к этому серверу можно выключать их в определенном порядке.

  - nolock: Необязательный элемент.
            Он служит для отключения блокировки порта при пользовании утилитой.

  - maxstartdelay: Необязательный элемент.
                Может быть, заданна как глобальная переменная выше вашего первого ИБП.
                Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера.
                Данная возможность предоставляет   стабильность в работе.
                Значение по умолчанию равно 45 секундам.

  - cable: Если драйвер ИБП требует дополнительных параметров, можно указать их здесь.
          Это индекс вашего кабеля и вы можете посмотреть его
          "/usr/share/doc/nut-2.6.4/docs/cables.txt".
          Неуказывается это значение, если подключение к UPS стандартно.

  - default.<variable>: Необязательный элемент.
                      Устанавливается значение по умолчанию для <variable>,
                      которое используется в случае, если ИБП не обеспечивает этого значения,
                      но будут перезаписаны, если значение доступно от ИБП:

                          default.input.voltage.nominal = 230

                      Устанавливается номинальное входное напряжение будет 230,
                      если UPS имеет другие предустановленные значения.

  - override.<variable>: Необязательный элемент.
                        Устанавливается значение для <value>,
                        которое перекрывает любые значения, которые могут быть считаны с ИБП.
                        Используется для переопределения значения от ИБП,
                        которые явно не верны (некоторые устройства сообщают неправильные
                        значения напряжения батареи например):

                           override.battery.voltage.nominal = 12

  - ignorelb: Необязательный элемент.
            При указании этого, driver игнорирует флаги низкого состояния батареи и сообщает ИБП
            (некоторые устройства будут отключаться почти сразу же после установки этого флага
            или сообщать, что установка не удалась).
            Вместо этого driver будет использовать одно из следующих определённых условий,
            когда батарея разряжена:

                battery.charge < battery.charge.low
                battery.runtime < battery.runtime.low

            Идея состоит в том, чтобы установить battery.charge.low и/или battery.runtime.low уровни
            в ups.conf значение, которое дает достаточно времени для коректного выключение системы.

[root@testserver-* src]# nano upsd.conf
################################################################################
LISTEN 127.0.0.1 3493
LISTEN 10.XX.20.3 3493
################################################################################
Значения:
  - MAXAGE <seconds>: По умолчанию 15 секунд.
                    Это частота обновления данных клиентов после остановки драйвера ИБП.
                    Следует использовать только в том случае, если у вас трудности с обновлением данных.

  - LISTEN <address> [<port>]: Здесь указывается адрес и порт 3493 (по умолчанию)
                              для прослушивания подключений.

  - MAXCONN <connections>: По умолчанию используется 1024 подключений.
                         Каждый ИБП, каждого LISTEN адреса и каждого клиента считается как одно подключение.
                         Если на сервере заполнятся  количество подключений, он больше не будет принимать
                         новых входящих клиентских подключений.

[root@testserver-* src]# nano upsd.users
################################################################################
[admin]
  password = pass
  actions = SET
  instcmds = ALL

[monmaster]
  password = pass
  allowfrom = localhost
  upsmon master

[monslave]
  password = pass
  allowfrom = 10.XX.20.2
  upsmon slave
################################################################################
Значения:
  - [NAME]: Имя пользователя

  - password: Пароль пользователя

  - actions: Возможность настройки см ниже.

  - instcmds: Выполняемые команды см ниже.

  - upsmon: Вид подключения клиентов см ниже.

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

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

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

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

  instcmds - разрешения пользователю на инициирование конкретных команд.
              Применяя "ALL" вы разрешаете использовать все команды.
              Существует множество команд выполните "upscmd -l" чтобы увидеть,
              что ваше оборудование поддерживает. Вот, к примеру, несколько команд:
                  test.panel.start - старт теста передней панели
                  test.battery.start - старт теста батареи
                  test.battery.stop - остановка теста батареи
                  calibrate.start - запуск калибровки батареи
                  calibrate.stop - остановка калибровки батареи

[root@testserver-* src]# nano upsmon.conf
################################################################################
MONITOR DELTA@localhost 1 monmaster pass master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -P now"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYFLAG ONLINE       SYSLOG+WALL
NOTIFYFLAG ONBATT       SYSLOG+WALL
NOTIFYFLAG LOWBATT      SYSLOG+WALL
NOTIFYFLAG SHUTDOWN     SYSLOG+WALL
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
################################################################################
Значения:
  - MINSUPPLIES: Указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной.
                Большинство систем имеют один БП.
                Но дорогие сервера, например HP NetServer LH4 могут работать с 2 из 4 БП и ему нужно ставить 2.

  - SHUTDOWNCMD: upsmon выполняет эту команду, когда системе необходимо выключить.

  - POLLFREQ: Опрос мониторами с частотой (измеряется в секундах) для обычной деятельности.
            Вы можете отрегулировать это частоту опроса, чтобы upsmon не “зашумлял” вашу сеть,
            но не вносите слишком большие значения тк. оно может пропустить отключение питания.

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

  - HOSTSYNC: Как долго upsmon будет ждать перед переходом к следующему upsmon.
            master upsmon использует это число при ожидании slaves чтобы отключиться после того,
            как он установил флаг принудительное завершение работы (FSD).
            И если slaves не отключаться после этого тайм аута, то выключение продолжится без них.

  - DEADTIME: Интервал ожидания перед объявлением статуса UPS как «мертвый» upsmon требует,
            чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT).
            Если статус загрузки, UPS помечен fails. И если оно остается fails более чем DEADTIME секунд, то UPS помечается «мертвый».

  - POWERDOWNFLAG: Флаг файла для форсирования завершения работы UPS в master системе.

  - NOTIFYMSG: Изменение сообщения, отправленные upsmon при возникновении определенных событий.

  - NOTIFYCMD: upsmon отправляет сообщение при происшествиях.

  - NOTIFYFLAG: Изменение поведения upsmon при возникновении событий NOTIFY.

  - RBWARNTIME: Предупреждение замены аккумулятора в секундах.

  - NOCOMMWARNTIME: Предупреждение по времени при не общении к ИБП в секундах.

  - FINALDELAY: Через сколько выполнить SHUTDOWNCMD.

Тестирование правильности выбора драйвера для ИБП:
[root@testserver-* ups]# upsdrvctl start
  Network UPS Tools - UPS driver controller 2.6.4
  Network UPS Tools - Belkin Smart protocol driver 0.24 (2.6.4)

[root@testserver-* ups]# ps axw | grep DELTA
  65643 ?        Ss     0:00 /sbin/belkin -a DELTA

[root@testserver-* ups]# upsdrvctl stop
  Network UPS Tools - UPS driver controller 2.6.4

Запуск:
[root@testserver-* ups]# service ups start
  Starting UPS driver controller:                            [  OK  ]
  Starting upsd:                                             [  OK  ]
  Starting UPS monitor (master):                             [  OK  ]

Проверка работоспособности системы в целом:
[root@testserver-* ups]# netstat -nltp | grep ups
  tcp        0      0 127.0.0.1:3493              0.0.0.0:*                   LISTEN      66124/upsd
  tcp        0      0 10.XX.20.3:3493             0.0.0.0:*                   LISTEN      66124/upsd

[root@testserver-* ups]# upsc DELTA@localhost ups.status
  OL

[root@testserver-* ups]# upsc DELTA@localhost
  battery.charge: 100
  battery.charge.low: 70
  battery.temperature: 30
  battery.voltage: 40.7
  device.mfr: BELKIN
  device.model: GES102N200035
  device.type: ups
  driver.name: belkin
  driver.parameter.pollinterval: 2
  driver.parameter.port: /dev/ttyS0
  driver.version: 2.6.4
  driver.version.internal: 0.24
  input.frequency: 50.0
  input.transfer.high: 246
  input.transfer.low: 91
  input.voltage: 238.3
  output.frequency: 50.0
  output.voltage: 230.1
  ups.beeper.status: enabled
  ups.firmware: 07
  ups.load: 0
  ups.mfr: BELKIN
  ups.model: GES102N200035
  ups.status: OL
  ups.temperature: 30
  ups.test.result: Passed

Cимуляция только ответа от драйвера без выполнения команды на выключение:
  upsdrvctl -t shutdown
Симуляция всего ивента, соответственно с завершением работы операционной системы:
  upsmon -c fsd

Пробуем (только первую команду, т.к. сервер в реальной работе):
[root@testserver-* ups]# upsdrvctl -t shutdown
  Network UPS Tools - UPS driver controller 2.6.4
  *** Testing mode: not calling exec/kill
     0.000000
  If you're not a NUT core developer, chances are that you're told to enable debugging
  to see why a driver isn't working for you. We're sorry for the confusion, but this is
  the 'upsdrvctl' wrapper, not the driver you're interested in.

  Below you'll find one or more lines starting with 'exec:' followed by an absolute
  path to the driver binary and some command line option. This is what the driver
  starts and you need to copy and paste that line and append the debug flags to that
  line (less the 'exec:' prefix).

    0.000127     Shutdown UPS: DELTA
    0.000134     exec:  /sbin/belkin -a DELTA -k

Всё готово и проверено!

Добавляем в атозагрузку:
[root@testserver-sevastopol ups]# chkconfig ups on

Ну и правило Firewall для подключения сетевого клиента:
[root@testserver-* ups]# nano /etc/sysconfig/iptables
##################################################################
...
:OUTPUT ACCEPT [0:0]
...
-A INPUT -s 10.xx.20.2 -m state --state NEW -m tcp -p tcp --dport 3493 -j ACCEPT
...
COMMIT
#########################################################################
[root@testserver-* src]# service iptables restart
 

 

 

 

Автор статьи: Zaa

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах