Один сервер, два ИБП APC на резервных источниках питания: как выполнить отключение?

У меня установлен сервер, а его резервные источники питания подключены к двум APC Smart-UPS 3000 XLM. Каждый ИБП подключен к двум различным источникам питания.

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

Вопрос: как НЕ выключить, если только один ИБП разряжается?

Примечание. Smart-UPS 3000 XLM имеет функцию "Синхронизация питания", которая может подключаться к одноранговому узлу и определять его состояние. Но когда я вытащил вилку из одного из них, приказ об отключении все равно был отправлен. Я думаю об изменении сценариев выключения, чтобы проверить с помощью "apcaccess", если другие ups не работают. Любой опыт по этому вопросу будет оценен!

2 ответа

Решение

В настоящее время, когда один из двух ИБП умирает, запускается событие doshutdown и выполняется скрипт по умолчанию через apccontrol. Сценарий doshutdown игнорирует вторые ИБП, так как они не связаны с событиями, и обычно выполняет отключение.

Чтобы несколько связать события doshutdown, два экземпляра apcupsd нуждаются в специально настроенном файле конфигурации. Разница будет находиться в каталоге, из которого должны быть выполнены сценарии событий.

Основные свойства первых взлетов, в /etc/apcupsd/apcupsd.ups0.conf

SCRIPTDIR /etc/apcupsd/ups0
UPSNAME ups0
DEVICE /dev/ups0
PWRFAILDIR /etc/apcupsd/ups0
NOLOGINDIR /etc/apcupsd/ups0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.0.events

И для ups1, в /etc/apcupsd/apcupsd.ups1.conf

SCRIPTDIR /etc/apcupsd/ups1
UPSNAME ups1
DEVICE /dev/ups1
PWRFAILDIR /etc/apcupsd/ups1
NOLOGINDIR /etc/apcupsd/ups1
NISPORT 3552
EVENTSFILE /var/log/apcupsd.1.events

Каждый scriptdir должен получить копию скриптов по умолчанию.
Мы хотим настроить скрипт doshutdown, который не будет напрямую выключать аппарат, но должен проверять, включен ли другой ИБП или находится в режиме выключения.

В верхней части скрипта doshutdown мы можем добавить что-то вроде

для ups0

if [ ! -f /tmp/ups1.is.down ]
then
  touch /tmp/ups0.is.down
  exit 99
fi

для ups1

if [ ! -f /tmp/ups0.is.down ]
then
  touch /tmp/ups1.is.down
  exit 99
fi

статус 99 имеет особое значение, которое сообщает apccontrol прекратить действие в процессе. Пять строк проверяют, был ли создан другой файл UPS-down-down; если нет, файл down создается для того, чтобы ups были сброшены, и завершается. Если да, это означает, что другой ИБП не работает, этот также отключается, поэтому сценарий должен продолжиться и выключить машину.

Файлы /tmp/usp[01].is.down указать, что в данный момент ups[01] не работает.

Важно: стартовый скрипт init.d программы apcupsd должен удалить эти файлы, если они были созданы в предыдущем сеансе:

rm -f /tmp/usp[01].is.down

Наконец, каталоги, созданные выше, /etc/apcupsd/ups[01] должны получить доступ к пользователю apcupsd (или любому соответствующему пользователю, выполняющему экземпляры).

chown -R apcupsd /etc/apcupsd/ups[01]

Пожалуйста, ознакомьтесь с подробной документацией.

редактировать исправил /tmp/ups[01].is.down имена, .is скучал.

Посмотри на ОРЕХ. Это хорошо с этим справляется. Определите количество источников питания от каждого ИБП и количество необходимых источников питания. Отключение не будет запускаться, если на ИБП не хватает питания.

Другие вопросы по тегам