Gute Möglichkeiten, alle Computer in einem Remote-Cluster neu zu starten?

4557
physicsmichael

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 rootBenutzer 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.

2
Energie zum Gebäude zyklisieren? Phoshi vor 14 Jahren 4

6 Antworten auf die Frage

1
Mox

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 
1
Fred

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.

Gute Lösung. Aber nicht in meinem Budget von $ 0! physicsmichael vor 14 Jahren 0
1
Sam

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.

0
Chris S

Verwenden Sie ssh-Schlüsselpaare, damit Sie das Kennwort nicht so oft eingeben müssen.

0
Jimmy Hedman

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 rebootalle 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.

ordinarily i'd suggest posting something like this as a comment, but i think this is a fair answer. it's possible (maybe even likely) that the clustering distro the OP uses has a similar command. of course *what* command depends on the particulars of what the OP is using. thanks for bringing this up. quack quixote vor 14 Jahren 0
Das war nützlich. Ich setze mit CentOS einen anderen Cluster zusammen, und jetzt schaue ich mir Rocks für diesen an. physicsmichael vor 14 Jahren 0
0
TimStaley

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 clusternodesist ein Alias ​​für eine Gruppe von Hosts, die in meinem ansehnlichen Inventar definiert ist, -m shellbedeutet "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.)