2

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

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

 $> 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."

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

6 ответов6

1

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

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

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

1

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

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

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

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

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

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

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

0

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

0

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

0

Используйте инструмент администрирования ansible кластера, возможно, в сочетании с командой «at», чтобы запланировать перезагрузку по своему вкусу.

Вы можете установить скрипт («playbook» в терминологии ANSIBLE), но я обычно делаю это, используя интерфейс командной строки «ad hoc», что-то вроде этого:

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

Где clusternodes является псевдонимом для набора хостов , определенных в моем анзибле инвентаря, -m shell означает "запустить это в командной строке", -a "blah" дает команду оболочки и -sK означает «работать в режиме SUDO и спросить мне за пароль.

(Примечание. Сначала вы захотите настроить SSH-ключи, которые позволят вам получить доступ к вашим узлам без пароля.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .