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.
fonte
Respostas:
Há uma maneira antiga, mas comprovada: use um modem analógico antigo. Aqui está como
Agora, pesquise o modem a cada poucos segundos enviando
ATZ[Enter]
e espereOK[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:
fonte
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.
fonte
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.
fonte