Konfigurieren Sie SSH für die Verwendung der zertifikatbasierten Authentifizierung. Dann benutze einen Befehl wie diesen:
$ for h in node1 node2 node3 node4 node5 headnode; do > ssh root@$h reboot > done
Ich verwende einen Cluster, den ich verwalte, und von Zeit zu Zeit erhalte ich E-Mails von jedem Knoten (und Kopfknoten), die nach einem automatischen Upgrade neu gestartet werden sollen.
Derzeit ist meine beste Lösung bisher ein Shell-Skript wie:
$> 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
Am Ende tippe ich nur sechsmal das root-Passwort ein, aber es funktioniert, denke ich. Gibt es einen besseren Weg? Kann ich den Kopfknoten zwingen, die Computer für mich neu zu starten?
UPDATE: Ich möchte das schlüssellose Login für den root
Benutzer nicht verwenden ... aber das ist eine Methode, die definitiv funktionieren würde.
UPDATE 2: Schlüsselpaare können doch eine Verwendung haben. Wie wäre es mit einem Key-Login am Kopfknoten und dann mit Keyless-Login vom Kopfknoten zu allen Rechenknoten. Dann etwas wie das Folgende:
$> 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."
Ich denke, das könnte die sichere + einfache Lösung sein.
Konfigurieren Sie SSH für die Verwendung der zertifikatbasierten Authentifizierung. Dann benutze einen Befehl wie diesen:
$ for h in node1 node2 node3 node4 node5 headnode; do > ssh root@$h reboot > done
Ich würde vorschlagen, ein Out-of-Band-Management für den Cluster einzurichten. Auf diese Weise können Sie eine Konsole auch dann erreichen, wenn die Box aus dem Netzwerk fällt und ein Neustart der Maschinen aus der Ferne ein Kinderspiel ist. Sie müssen Geld ausgeben, um entweder eine dedizierte Box mit zusätzlichen seriellen Anschlüssen zu erwerben und eigene zu rollen, oder einen speziell dafür gebauten Konzentrator für serielle Anschlüsse. Dies ist offensichtlich nicht die billigste Lösung, aber die Remote-Verwaltung wird dadurch wesentlich einfacher.
Vielleicht funktioniert ein Check-and-See-System auch für Sie?
Angenommen, Sie haben eine Art HTTP-Server, der auf dem Kopfknoten ausgeführt wird, könnten Sie ein kleines Skript schreiben, in dem Sie angeben können, welche Computer für den Neustart geeignet sind.
Setzen Sie dann auf jedem Knoten einen cron-Job, der das Skript abfragt, um zu sehen, ob ein Neustart in Ordnung ist. Wenn der Kopfknoten das OK zurücksendet, sollte er neu gestartet werden. Sobald der Headnode den Befehl ok-to-reboot gesendet hat, kann er das Flag löschen.
Ich würde dies mit einem Verzeichnis einrichten, in dem sich einige Textdateien befinden. Wenn das Skript den Namen sieht, sendet es das OK zurück, um einen Neustart durchzuführen, und löscht die Datei. Einfach für Sie zu verwalten, da Sie sie nur berühren müssen, um ein OK zu kennzeichnen. Sicher, weil Sie diese Informationen niemals direkt an das Dateisystem weiterleiten müssen.
Jedes Skript auf den Unterknoten würde nur den Hostnamen oder etwas anderes prüfen.
http: // headnode / reboot? name = subnode1
Das Überprüfen alle 5 Minuten sollte nicht zu anstrengend sein.
Keine Lösung für dieses Problem, aber Rocks ist ein auf CentOS basierender Cluster "distro", der ssh-Schlüssel enthält und verfolgt, wie viele Knoten Sie haben. Sie starten einfach rocks run host reboot
alle Knoten neu. Rocks hat alles, was Sie für einen vollwertigen HPC-Cluster benötigen, und ich habe es persönlich an einem Cluster mit über 1200 Knoten getestet.
Verwenden Sie das Ansible Cluster-Verwaltungstool, möglicherweise kombiniert mit dem Befehl 'at', um den Neustart nach Ihren Wünschen zu planen.
Sie könnten ein Skript einrichten ("Playbook" in ansprechbarer Terminologie), aber im Allgemeinen mache ich es einfach mit der "Ad-hoc" -Befehlszeilenschnittstelle.
ansible clusternodes -m shell -a "echo shutdown -r +15 | at 6am Monday" -sK
Wo clusternodes
ist ein Alias für eine Gruppe von Hosts, die in meinem ansehnlichen Inventar definiert ist, -m shell
bedeutet "run this in the command line", -a "blah"
gibt den Shell-Befehl und -sK
"run" im sudo-Modus und fragt mich nach dem Passwort.
(Hinweis: Sie müssen zunächst SSH-Schlüssel einrichten, die Ihnen den Zugriff ohne Kennwort ohne Kennwort auf Ihre Knoten ermöglichen.)