Настройте SSH для использования аутентификации на основе сертификатов. Затем используйте команду как это:
$ for h in node1 node2 node3 node4 node5 headnode; do > ssh root@$h reboot > done
У меня есть кластер, которым я управляю, и время от времени я получаю электронные письма от каждого узла (и головного узла), требующие перезапуска после автоматического обновления.
В настоящее время моим лучшим решением на данный момент является сценарий оболочки, такой как:
$> 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."
Я думаю, что это может быть безопасным и простым решением.
Настройте SSH для использования аутентификации на основе сертификатов. Затем используйте команду как это:
$ for h in node1 node2 node3 node4 node5 headnode; do > ssh root@$h reboot > done
Я бы предложил настроить внешнее управление кластером. Таким образом, вы можете получить доступ к консоли, даже если устройство не подключено к сети, а удаленная перезагрузка машины - совсем несложно. Вам нужно будет потратить деньги, чтобы купить либо выделенную коробку с дополнительными последовательными портами, а также свой собственный, либо специально созданный концентратор последовательных портов. Это, очевидно, не самое дешевое решение, но оно значительно облегчит удаленное управление.
Возможно, система проверки и просмотра может работать здесь и для вас?
Предполагая, что у вас есть какой-то HTTP-сервер, работающий на головном узле, вы можете написать небольшой скрипт php / perl / любой другой, который позволит вам пометить, какие компьютеры можно перезагрузить.
Затем на каждом узле поместите задание cron, которое опрашивает этот сценарий, чтобы увидеть, можно ли перезагрузиться. Если головной узел отправляет обратно ok, он должен перезагрузиться. Как только головной узел отправит команду ok-to-reboot, он может сбросить флаг.
Я бы настроил это, используя каталог с некоторыми текстовыми файлами в нем, если скрипт видит имя, затем отправляет обратно ok для перезагрузки, а затем удаляет файл. Вам легко управлять, потому что вы просто должны прикоснуться к ним, чтобы пометить ОК. Безопасность, потому что вам никогда не придется передавать какую-либо эту информацию непосредственно в файловую систему.
Каждый скрипт в подузлах просто проверял по имени хоста или что-то еще;
HTTP: // headnode / перезагрузка имя = subnode1
Проверка каждые 5 минут или около того не должна быть слишком сложной.
Не решение этой проблемы, но Rocks - это кластерный «дистрибутив», построенный на CentOS, который имеет ssh-ключи и отслеживает, сколько у вас узлов. Вы просто запускаете, rocks run host reboot
чтобы перезагрузить все ваши узлы. В Rocks есть все, что нужно для полноценного кластера HPC, и я лично попробовал его на кластере с более чем 1200 узлами.
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.)