Detectando quando um servidor está funcionando com bateria UPS


24

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

O servidor é alimentado por um pequeno no-break de 255 watts porque preciso suportar pequenas flutuações de energia sem cair. Isso é muito importante porque um desligamento repentino e imundo (causado por queda de energia ou blecaute) pode danificar o array RAID, o que já aconteceu em uma ocasião.

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

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

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

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


15
Você não deve executar ping em um site externo, mas em executar ping no IP do modem DSL.
21420 Lawrence-C

1
@ultrasawblade ... parece uma resposta, cheira a uma resposta ... é uma resposta!
Pureferret

1
Como o @ultrasawblade menciona, NUNCA confie em fontes externas para uma configuração interna. Por exemplo, se sua Internet falhar repentinamente, você perde a conectividade e seu servidor fica inoperante. Se o Google.com decidir mudar o nome por qualquer motivo, seu servidor será desativado. Se você fizer ping neles usando IP e esse farm de servidores específico ficar inativo, o servidor também ficará inoperante. este é o caso de qualquer fonte externa. A menos que você tenha 100% de certeza de que seu servidor DEVE SOMENTE estar ligado quando esse outro servidor estiver disponível, você não deseja confiar nesse outro servidor por qualquer motivo.
Nzall #

Nenhuma dessas respostas funciona para você?
Dave

Respostas:


34

Há 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 à linha telefônica do modem

Agora, pesquise o modem a cada poucos segundos enviando ATZ[Enter]e espere OK[Enter]- se o modem não atender, você poderá presumir que não tem energia, o que significa que o no-break está com bateria.

Editar

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

Editar 2

Dos comentários:

  • Claro que você deve manter algum estado de uma verificação para a próxima, apenas desligando após a falha de N verificações. 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 vai acontecer: Você não quer ser incomodado com "Login desativado, servidor no USV", se você reiniciar um interruptor ou reconfigure uma VLAN. Na minha experiência, a linha serial é o mais robusta possível.

1
Boa resposta, mas eu sugiro adicionar uma segurança onde ele verifica algumas vezes antes de realmente desligar. (para que você não precise desligar durante uma interrupção de energia de 5 minutos) E acho que fazer ping em um swich também seria suficiente (apenas nada fora da sua rede).
precisa saber é o seguinte

@HTDutchy Veja minha edição!
Eugen Rieck

Eu sei, mas como ele pode não ter uma conexão serial ou um modem antigo pendurado no hardware doméstico, seria a próxima melhor coisa. e se o switch parar de funcionar, o servidor aparecerá desativado de qualquer maneira.
precisa saber é o seguinte

22

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

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


Acabei de verificar meu no-break e, infelizmente, ele não tem nada parecido. Ele possui apenas 8 plugues (4 com bateria e 4 sem) e tomadas de entrada e saída de linha para cabos telefônicos.
Will Kraft

27
Em seguida, adquira um no-break que possa se comunicar com o computador.
Ramhound

@ Ramhound Isso pode não ser uma opção, os no-breaks podem ser bastante caros e existem maneiras mais baratas.
Validade

Eu discordo existem outras maneiras de detectar que você está executando em uma bateria de um ups você não pode detectar até mesmo no nível está
Ramhound

1

Se você estiver usando o Debian, tente usar o NUT (ferramentas UPS de rede). Uso o NUT para fazer exatamente o que você descreve no meu Synology NAS (que executa o busybox) e em um servidor Web doméstico executando o Ubuntu 12.04 LTS. Tenho o NAS conectado via USB ao no-break pelo mesmo motivo que você, perda potencial de todos os meus arquivos.

Acredito que o daemon da nut consulta 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 aguardar X minutos primeiro etc. etc. Você também pode ter vários clientes configurados para serem conectados ao daemon nut executado no servidor. Assim, seu servidor também pode solicitar que vários PCs da sua rede desliguem normalmente. Para a execução do desligamento, você pode fornecer seu próprio script para serviços de desligamento de uma maneira específica, ou pode usar o script interno que apenas chama shutdown -h, se bem me lembro.

Site da NUT

Havia sites melhores para encontrar informações, mas não consigo me lembrar deles agora. A configuração pode ser uma dor, mas se você está falando sobre a possibilidade de perder seu RAID, confira! Dependendo das suas necessidades, talvez você não precise de todo o pacote NUT, talvez seja capaz de sobreviver apenas com a parte UPSMON. Eu acho que você pode obter isso no pacote Ubuntu "nut-client".

Também existe um cliente NUT para Windows, mas no Windows você pode usar melhor algo como PowerChute ou algo semelhante.


Como dito anteriormente, parece que o no-break do OP não tem como se comunicar com o computador, sem USB nem rede.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.