Desligamento dos nodes pelos nobreaks
Introdução
Os nobreaks podem ser gerenciados por um computador, conectado-se ao nobreake pela porta serial do computador. O programa utilizado para monitorar os nobreaks pode executar tarefas em situações específicas, como por exemplo, quando faltar energia por um certo tempo. A tarefa que nos interessa é o desligamento da máquina que está conectada ao nobreak quando restar uma certa quantidade limite de energia nas baterias do nobreak. Mais ainda, o desligamento dos nodes alimentados por este nobreake.
Nodes gerenciadores
Para cada nobreak será instalado o programa para seu gerenciamento em um node alimentado por este nobreak.
Os procedimentos para esta instalação estão muito bem descritos
neste documento.
Script de desligamento
Depois de instalado o
apcupsd,
precisamos modificar os script de desligamento, para desligar todos os nodes alimentados pelo nobreak.
Quando restar 3 minutos de alimentação nos nobreaks, o apcupsd irá rodar o
doshutdown dentro do
apccontrol, que contem as tarefas para cada situação. O tempo restante, assim como outros parâmetros podem ser modificados editando o arquivo apcupsd.conf. Ambos, apccontrol e apcupsd.conf encontran-se em "
/etc/apcupsd/' .
O gancho que queremos é
doshutdown, em apccontrol. É ele que temos de modifica para desligar os outros nodes.
Existem alguns métodos que poderiam ser utilizados para desligar os nodes pelo nó de monitoramento, e eu escolhi o via ssh. Basicamente, o que o node de gerenciamento faz é logar nos outros nodes que estão conectados no mesmo nobreake que ele, e executa poweroff.
Para saber quais são os nodes que devem serdesligados, o script modificado faz uma busca no arquivo "
/raid0/apcupsdSPRACEconf/hosts" e procura pelo nobreak em que está conectado, procurando pelo seu nome e extraindo terceira coluna, coma identificação do nobreake. O
NXX indica o nobreak em que o node de gerenciamento está conectado. Depois, com este mesmo arquivo, o script de desligamento modificado gera uma lista dos nodes que devem ser desligado. Note que qualquer node pode gerenciar o nobreak, não sendo necessária qualquer ordem.
Eis aqui o a linha original:
${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
e a nova "linha"
for NODE in `cat /raid0/apcupsdSPRACEconf/hosts |grep $(cat /raid0/apcupsdSPRACEconf/hosts |grep $(hostname) | cut -d " " -f3) | cut -d " " -f2`; do if [ " $(echo "$NODE" | cut -d " " -f2)" != " $(cat /raid0/apcupsdSPRACEconf/hosts |grep $(hostname) | cut -d " " -f2)" ]; then echo "Desligando o $NODE"| ${WALL}; ssh -i /root/.ssh/apcupsd_dsa $NODE poweroff; fi;done
echo "Desligando o $(hostname)"
poweroff
Então, para cada nó alimentado pelo mesmo nobreak, o novo script loga via ssh no nó e executa poweroff. Depois de todos os outros nodes desligados, o novo script desliga o node de monitoramento.
Note, pelo novo script, que não é necessário criar um script específico para cada nobreak relacionando os nodes alimentados por ele. O script independe do node em que está sendo executado. Isso é muito útil visto que o arquivo apccontrol pode ser copiado para todos os nodes de monitoramento.
O arquivo "/raid0/apcupsdSPRACEconf/hosts" é o mesmo arquivo utilizado pelo script wakeupfarm, que se encontra na osg-ce, utilizado para iniciar a farm quando a energia estiver restabelecida.
Note mais uma vez que para desligar ou ligar, apenas um arquivo deve receber atenção periódica, que é o arquivo
hosts. Ele fica em
"/etc/WakeFarm/" na osg-ce, e deve ser copiado manualmente para
"/raid0/apcupsdSPRACEconf/", que é a pasta que vai ser exportada para todos os nodes. Ele precisa ser copiado pois não conseguir pensar numa maneira de "linká-lo".