Хорошие способы перезагрузить все компьютеры в удаленном кластере?

4248
physicsmichael

У меня есть кластер, которым я управляю, и время от времени я получаю электронные письма от каждого узла (и головного узла), требующие перезапуска после автоматического обновления.

В настоящее время моим лучшим решением на данный момент является сценарий оболочки, такой как:

 $> cat cluster_reboot.sh ssh root@node1.host.edu reboot ssh root@node2.host.edu reboot ssh root@node3.host.edu reboot ssh root@node4.host.edu reboot ssh root@node5.host.edu reboot ssh root@headnode.host.edu reboot 

В итоге я просто набираю пароль root шесть раз, но, думаю, это работает. Есть ли способ лучше? Могу ли я заставить главный узел перезагрузить компьютеры для меня?

ОБНОВЛЕНИЕ: я хотел бы уклониться от использования входа без ключа для rootпользователя ... но это - метод, который определенно работал бы.

ОБНОВЛЕНИЕ 2: Пары ключей могут быть использованы в конце концов. А как насчет входа с помощью ключа в головной узел, а затем вход без ключа от головного узла ко всем вычислительным узлам. Тогда что-то вроде следующего:

 $> ssh root@headnode Enter password for 'root': [<headnode>]$: cat cluster_reboot.sh ssh root@node1.host.edu reboot ssh root@node2.host.edu reboot ssh root@node3.host.edu reboot ssh root@node4.host.edu reboot ssh root@node5.host.edu reboot echo "Nodes rebooted. Rebooting this computer now." reboot [<headnode>]$: sh cluster_reboot.sh "Nodes rebooted. Rebooting this computer now." 

Я думаю, что это может быть безопасным и простым решением.

2
Цикл питания в здание? Phoshi 14 лет назад 4

6 ответов на вопрос

1
Mox

Настройте SSH для использования аутентификации на основе сертификатов. Затем используйте команду как это:

$ for h in node1 node2 node3 node4 node5 headnode; do > ssh root@$h reboot > done 
1
Fred

Я бы предложил настроить внешнее управление кластером. Таким образом, вы можете получить доступ к консоли, даже если устройство не подключено к сети, а удаленная перезагрузка машины - совсем несложно. Вам нужно будет потратить деньги, чтобы купить либо выделенную коробку с дополнительными последовательными портами, а также свой собственный, либо специально созданный концентратор последовательных портов. Это, очевидно, не самое дешевое решение, но оно значительно облегчит удаленное управление.

Хорошее решение Но не в моем бюджете $ 0! physicsmichael 14 лет назад 0
1
Sam

Возможно, система проверки и просмотра может работать здесь и для вас?

Предполагая, что у вас есть какой-то HTTP-сервер, работающий на головном узле, вы можете написать небольшой скрипт php / perl / любой другой, который позволит вам пометить, какие компьютеры можно перезагрузить.

Затем на каждом узле поместите задание cron, которое опрашивает этот сценарий, чтобы увидеть, можно ли перезагрузиться. Если головной узел отправляет обратно ok, он должен перезагрузиться. Как только головной узел отправит команду ok-to-reboot, он может сбросить флаг.

Я бы настроил это, используя каталог с некоторыми текстовыми файлами в нем, если скрипт видит имя, затем отправляет обратно ok для перезагрузки, а затем удаляет файл. Вам легко управлять, потому что вы просто должны прикоснуться к ним, чтобы пометить ОК. Безопасность, потому что вам никогда не придется передавать какую-либо эту информацию непосредственно в файловую систему.

Каждый скрипт в подузлах просто проверял по имени хоста или что-то еще;

HTTP: // headnode / перезагрузка имя = subnode1

Проверка каждые 5 минут или около того не должна быть слишком сложной.

0
Chris S

Используйте пары ключей ssh, чтобы вам не приходилось вводить пароль много раз.

0
Jimmy Hedman

Не решение этой проблемы, но Rocks - это кластерный «дистрибутив», построенный на CentOS, который имеет ssh-ключи и отслеживает, сколько у вас узлов. Вы просто запускаете, rocks run host rebootчтобы перезагрузить все ваши узлы. В Rocks есть все, что нужно для полноценного кластера HPC, и я лично попробовал его на кластере с более чем 1200 узлами.

Обычно я бы предложил опубликовать что-то вроде этого в качестве комментария, но я думаю, что это справедливый ответ. возможно (возможно даже вероятно), что кластерный дистрибутив, который использует OP, имеет подобную команду. Конечно, команда * what * зависит от того, что использует OP. спасибо, что поднял это. quack quixote 14 лет назад 0
Это было полезно. Я собираю другой кластер с CentOS, и теперь я буду искать Rocks для этого. physicsmichael 14 лет назад 0
0
TimStaley

Use the ansible cluster administration tool, perhaps combined with the 'at' command to schedule the reboot to your liking.

You could set up a script ('playbook' in ansible terminology), but I generally just do it using the 'ad hoc' command line interface, something like this:

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

Where clusternodes is an alias to a set of hosts defined in my ansible inventory, -m shell means 'run this on the command line', -a "blah" gives the shell command, and -sK means 'run in sudo mode and ask me for the password.

(Note: You will want to set up SSH keys giving you password-less access to your nodes first.)