Um servidor, dois no-breaks APC em fontes de alimentação redundantes: como acionar o desligamento?

10

Eu tenho um servidor em rack e suas fontes de alimentação redundantes conectadas em dois APC Smart-UPS 3000 XLM. Cada no-break está conectado a duas fontes de energia diferentes.

Duas instâncias do apcupsd estão em execução, cada uma conectada ao seu próprio UPS. Eles podem detectar quando um no-break está ligado à bateria e cada no-break pode, então, disparar um desligamento no servidor.

A pergunta é: Como NÃO desligar se SOMENTE UM UPS ficar sem bateria?

Observação: o Smart-UPS 3000 XLM possui uma função "Power Sync" que é capaz de se conectar ao seu peer e detectar seu status. Mas quando eu tirei o plug de um deles, o pedido de desligamento foi enviado de qualquer maneira. Estou pensando em modificar os scripts de desligamento para verificar com "apcaccess" se os outros ups estão inativos. Qualquer experiência sobre isso seria apreciada!

    
por Falken 15.01.2011 / 10:37

2 respostas

13

Atualmente, quando um dos dois UPS morre, o evento doshutdown é acionado e executa o script padrão via apccontrol . O script doshutdown ignora o segundo no-break, pois eles não são conectados a eventos e continuam normalmente com o desligamento.

Para que os eventos doshutdown sejam um pouco conectados, as duas instâncias do apcupsd precisam de um arquivo de configuração especificamente personalizado. A diferença residirá no diretório a partir do qual os scripts de eventos devem ser executados.

Principais propriedades dos primeiros passos, em /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

E para o ups1, em /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

Cada scriptdir deve obter uma cópia dos scripts padrão.
Queremos personalizar o script doshutdown , que não desligará diretamente a máquina, mas terá que verificar se a outra UPS ainda está ligada ou se está no modo de desligamento.

No topo do script doshutdown , poderíamos adicionar algo como

para ups0

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

para o ups1

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

o status 99 tem um significado especial, que diz apccontrol para interromper a ação em andamento. As cinco linhas verificam se o outro arquivo abaixo do no-break foi criado; se não , o down-file é criado para os ups sendo desativados e sai. Se yes , o que significa que o outro no-break está inoperante, este também está diminuindo, portanto o script deve continuar e desligar a máquina.

Os arquivos /tmp/usp[01].is.down indicam se o ups [01] está desativado no momento.

Importante: o script init.d start do apcupsd deve remover esses arquivos, caso tenham sido criados em uma sessão anterior:

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

Finalmente, os diretórios criados acima, / etc / apcupsd / ups [01] devem receber acesso ao usuário apcupsd (ou a qualquer usuário relevante executando as instâncias).

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

Por favor, dê uma olhada na documentação detalhada .

edit corrigiu os nomes /tmp/ups[01].is.down , faltou o .is .

    
por 15.01.2011 / 13:34
4

Veja o NUT. Ele lida bem com isso. Defina o número de fontes de alimentação de cada no-break e o número de fontes de alimentação necessárias. O desligamento não será acionado enquanto houver fontes de alimentação suficientes que não estejam no no-break.

    
por 15.01.2011 / 22:39