Detectar quando um servidor está sendo executado na bateria do no-break

24

Eu tenho um servidor doméstico (HP Proliant ML310 G4) que comprei do meu empregador há um mês ou mais. O servidor executa o Debian Linux e eu o uso para praticamente tudo. Eu posso fazer isso porque minhas necessidades não são tão exigentes, então o servidor raramente está sob cargas pesadas em um determinado momento. Esse servidor tem um array RAID1 de 2 TB (com um hot spare) gerenciado pelo mdadm que eu uso para compartilhamento de arquivos na minha rede via Samba. Estou executando o sistema operacional de um disco rígido menor que não faz parte do array.

Eu tenho o servidor alimentado através de um pequeno no-break de 255 watts porque eu preciso suportar pequenas flutuações de energia sem cair. Isso é muito importante porque um desligamento repentino e sujo (causado por uma queda de energia ou blackout) pode estragar a matriz RAID, o que já aconteceu em uma ocasião.

No caso de uma falha de energia, eu estou estimando que o no-break tem apenas 10-15 minutos de energia nele. Pode haver mais, mas não quero assumir automaticamente que existe. Isso é suficiente para superar os apagões que duram alguns minutos ou menos. No entanto, se a energia ficar inativa por várias horas, preciso que o servidor desligue-se automaticamente antes que a energia do no-break falhe. Esperamos que isso evite que a integridade do RAID seja tratada nessas situações.

Esse tipo de coisa é fácil em um laptop b / c tem sensores embutidos para determinar quando está funcionando com bateria, mas esse servidor não (até onde eu sei). Eu tenho uma configuração de rede incomum onde meu modem DSL é separado do meu roteador. O roteador também está no no-break, o que me permite acessar o SSH através do meu laptop e desligar o servidor em caso de falha de energia. Infelizmente, isso só funciona se eu estiver lá na hora de fazer isso. Eu preciso de uma solução que sempre funcione se eu estiver lá para intervir ou não.

Como meu modem DSL não está no no-break, ele ficaria com tudo o mais se a energia falhar. Eu configurei isso deliberadamente porque eu tenho uma idéia sobre como resolver esse problema: eu estava pensando em escrever um script que pingasse google.com ou algum outro site de alto tráfego / alta disponibilidade. Se o ping for concluído com sucesso, o servidor continuará em execução. Se o ping falhar (porque o modem está desligado), o script pensaria que a energia está desligada e diria ao servidor para desligar. Eu adicionaria o script ao Cron e o executaria a cada 5 minutos. Espero que dê ao servidor tempo suficiente para desligar antes que a UPS fique sem energia.

Antes de me dar ao trabalho de escrever o roteiro, gostaria de saber se existe uma maneira melhor de fazer o que preciso. Agradecemos antecipadamente por qualquer ajuda.

    
por Will Kraft 06.04.2014 / 23:19

3 respostas

33

Existe uma maneira antiga mas comprovada: use um modem analógico antigo. Aqui está como

  • Conecte o modem ao servidor via porta serial (por exemplo, ttyS0)
  • Conecte a fonte de alimentação do modem não no no-break, mas diretamente na rede elétrica
  • NÃO conecte nada na linha telefônica do modem

Agora faça poll do modem a cada poucos segundos enviando ATZ[Enter] e espere OK[Enter] - se o modem não atender, você pode supor que ele não tem energia, ou seja, o no-break está na bateria.

Editar

O ponto principal é que, se a conexão com a Internet cair por algum outro motivo, o servidor não será desativado , como deveria ser.

Editar 2

Dos comentários:

  • É claro que você deve manter algum estado de uma verificação para a próxima, apenas desligando depois que N cheques falharem. Eu não mencionei isso, pois é válido para todas as verificações possíveis, não apenas para o modem
  • A diferença entre usar o modem e usar qualquer coisa que tenha a ver com a rede é que a perda transitória de conectividade de rede ocorrerá: Você não quer se incomodar com "Login desabilitado, servidor em USV ", se você reinicializar um switch ou reconfigurar uma VLAN. Na minha experiência, a linha serial é tão robusta quanto possível.
por 07.04.2014 / 00:22
22

A ups geralmente vem com um conector USB ou COM1. Quando você conecta isso ao seu servidor, você pode começar a monitorar o no-break.

Em um ambiente Windows, sem instalar o software, as mensagens já estão registradas e desligará o servidor para você. Eu não sei como isso funciona no linux, mas aposto que existem alguns pacotes de software disponíveis para fazer interface com o seu no-break.

    
por 06.04.2014 / 23:26
1

Se você estiver usando o Debian, tente usar o NUT (network UPS tools). Eu uso o NUT para fazer exatamente o que você descreve no meu Synology NAS (que roda o busybox) e em um servidor da Web em casa executando o Ubuntu 12.04 LTS. Eu tenho o NAS plugado via USB para o no-break pela mesma razão que você, perda potencial de todos os meus arquivos.

Acredito que o nut daemon consulte o no-break a cada segundo para determinar o status. Quando o no-break está no modo de bateria, ele pode ser configurado para desligar normalmente ou esperar por X minutos primeiro, etc. Você também pode ter vários clientes configurados para serem conectados ao daemon porca que você executa em seu servidor. Assim, o seu servidor pode dizer a vários PCs em sua rede para desligarem normalmente. Para a execução do desligamento, você pode fornecer seu próprio script para desligar os serviços de uma maneira específica, ou você pode usar o script embutido que apenas chama shutdown -h, se bem me lembro.

site do NUT

Havia sites melhores para encontrar informações, mas não me lembro deles agora. A configuração pode ser uma dor, mas se você está falando sobre potencialmente perder seu RAID, confira! Dependendo de suas necessidades, você pode não precisar de toda a suíte NUT, você pode conseguir com apenas a parte UPSMON. Eu acho que você pode obter isso no pacote do Ubuntu "nut-client".

Existe também um cliente NUT para Windows, mas no Windows é melhor usar algo como PowerChute ou algo semelhante.

    
por 08.04.2014 / 00:11