Boas maneiras de reiniciar todos os computadores em um cluster remoto?

2

Eu tenho um cluster que eu gerencio e de tempos em tempos recebo e-mails de cada nó (e nó principal) implorando para ser reiniciado após uma atualização automática.

Atualmente, minha melhor solução até agora é um script de shell como:

 $> cat cluster_reboot.sh
 ssh [email protected] reboot
 ssh [email protected] reboot
 ssh [email protected] reboot
 ssh [email protected] reboot
 ssh [email protected] reboot
 ssh [email protected] reboot

Acabei de digitar a senha do root seis vezes, mas funciona, eu acho. Existe uma maneira melhor? Posso forçar o nó principal a reiniciar os computadores para mim?

UPDATE: Eu gostaria de evitar o uso de login sem chave para o usuário root ... mas esse é um método que definitivamente funcionaria.

UPDATE 2: Pares de chaves podem ter um uso depois de tudo. Que tal um login com chave para o nó principal, então login sem chave do nó principal para todos os nós de computação. Então algo como o seguinte:

 $> ssh root@headnode
 Enter password for 'root':
 [<headnode>]$: cat cluster_reboot.sh
 ssh [email protected] reboot
 ssh [email protected] reboot
 ssh [email protected] reboot
 ssh [email protected] reboot
 ssh [email protected] reboot
 echo "Nodes rebooted. Rebooting this computer now."
 reboot
 [<headnode>]$: sh cluster_reboot.sh
 "Nodes rebooted. Rebooting this computer now."

Acho que essa pode ser a solução segura e fácil.

    
por physicsmichael 23.03.2010 / 20:18

6 respostas

1

Talvez um sistema de verificação e visualização também funcione aqui para você também?

Supondo que você tenha algum tipo de servidor HTTP em execução no nó principal, você pode escrever um pequeno script php / perl / whatever que permita marcar quais computadores estão prontos para serem reinicializados.

Em seguida, em cada nó, coloque um trabalho cron que pesquisa o script para ver se está tudo bem reinicializar. Se o nó principal envia de volta o ok, então ele deve reiniciar. Uma vez que o headnode tenha enviado o comando ok-to-reboot, poderá limpar o sinalizador.

Eu configuraria isso usando um diretório com alguns arquivos de texto, se o script visse o nome, então envia de volta o OK para reinicializar, em seguida, apaga o arquivo. Fácil para você gerenciar, porque você só tem que tocá-los para marcar um ok. Seguro porque você não precisa passar nenhuma dessas informações diretamente para o sistema de arquivos.

Cada script nos subnós apenas verifica pelo nome do host ou algo do tipo;

link

Verificar a cada 5 minutos não deve ser muito desgastante.

    
por 23.03.2010 / 22:46
1

Configure o SSH para usar a autenticação baseada em certificado. Em seguida, use um comando como este:

$ for h in node1 node2 node3 node4 node5 headnode; do
>   ssh root@$h reboot
>   done
    
por 23.03.2010 / 20:26
1

Sugiro configurar o gerenciamento fora de banda para o cluster. Dessa forma, você pode acessar um console mesmo se a caixa cair da rede, e reiniciar remotamente as máquinas é um piscar de olhos. Você precisará gastar dinheiro para comprar uma caixa dedicada com portas seriais extras e instalar seu próprio concentrador de porta serial. Essa obviamente não é a solução mais barata, mas facilitará muito o gerenciamento remoto.

    
por 23.03.2010 / 22:02
0

Use pares de chaves ssh para que você não tenha que digitar a senha tantas vezes.

    
por 23.03.2010 / 20:22
0

Não é uma solução para este problema, mas Rocks é um "distro" de cluster baseado no CentOS que tem chaves ssh e mantém rastros de quantos nós você tem. Você acabou de executar rocks run host reboot para reinicializar todos os seus nós. O Rocks tem tudo o que você precisa para um cluster HPC completo e eu já experimentei isso em um cluster com mais de 1200 nós.

    
por 23.03.2010 / 20:41
0

Use a ferramenta de administração de cluster ansible , talvez combinada com o Comando 'at' para agendar o reboot ao seu gosto.

Você pode configurar um script ('playbook' em uma terminologia ansible), mas geralmente faço isso usando a interface de linha de comando 'ad hoc', algo assim:

ansible clusternodes -m shell -a "echo shutdown -r +15 | at 6am Monday" -sK

Onde clusternodes é um alias para um conjunto de hosts definidos no meu inventário ansible, -m shell significa 'executar isso na linha de comando', -a "blah" fornece o comando shell e -sK significa 'executar no modo sudo e perguntar a senha.

(Nota: Você vai querer configurar as chaves SSH, dando-lhe acesso sem senha aos seus nós primeiro.)

    
por 29.01.2015 / 15:06