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


10

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

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

Вопрос заключается в следующем: как НЕ отключить питание, если разряжается ТОЛЬКО ОДИН ИБП?

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

Ответы:


13

В настоящее время, когда один из двух ИБП умирает, запускается событие 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пропал без вести.


1
и обычные пользователи могут остановить ваш сервер с помощью касания /tmp/ups1.is.down; коснитесь /tmp/ups0.is.down: D Так что было бы лучше, например, использовать / var / run. Btw. если кто-то вырезает и вставляет решение, rm -f /tmp/usp[01].is.down является опечаткой. И, кстати, вы должны удалить /tmp/ups[01].is.down из случая apccontrol offbattery, когда питание вернется.
Harka Gyozo

1
Я бы посоветовал прикоснуться к вашему собственному файлу is.down ПЕРЕД проверкой другого - таким, каким он является сейчас, я думаю, что есть небольшое окно состояния гонки, если оба взлета выходят в одно и то же время.
Майкл Кохне

4

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.