Too Cool for Internet Explorer

multiple ssh


Heute wollte ich mal den "slave status" unserer 5 Datenbank Server bei Pixelio ansehen. Natürlich ist es schrecklich umständlich sich auf allen Servern einzeln anzumelden um immer und immer wieder den gleichen Befehl auszuführen. Hierfür gibt es Tools, die ein Kommando auf mehreren Servern ausführen können (sollen). Ausprobiert habe ich pssh und dsh. Jedoch, mit beiden bin ich nicht klar gekommen. Da ich wie gesagt nur eben schnell mal einen Befehl auf den Slaves ausführen wollte, habe ich auch keine Lust gehabt, mich intensiv mit den Tools zu beschäftigen:

pssh ist python basiert, schon der erste Minuspunkt -- aber gut, da OSX eh python mitbringt, hab ich's halt installiert und konfiguriert. Allerdings wollte pssh keine Ausgabe zurück liefern und nach dem Ausführen hatte ich plötzlich jede menge SSH prozesse laufen, die ich manuell killen musste.

dsh hat imo eine mehr als rudimentäre Dokumentation. Nach Ausgiebigem googeln wusste ich dann auch, dass man offenbar eine Liste der Server benötigt, mit denen man sich Verbinden will und ausserdem noch Servergruppen anlegen kann. Klingt gut. Allerdings kann dsh offenbar meine "~/.ssh/config" nicht lesen und kennt daher auch meine hosts nicht. Da ich auf die Schnelle nicht in Erfahrung bringen konnte, wie ich in der Serverliste den Port spezifiziere (mit ":" ging es jedenfalls nicht), habe ich das also auch sein lassen.

In der Zwischenzeit hätte ich sicherlich auch 5x manuell den slave status ausführen können -- aber gut, man ist ja faul. Nachdem ich also pssh und dsh von meiner festplatte verbannt hatte, habe ich mir dann in ca. 1 Minute selbst ein kleines Shell-Script zusammengezimmert, das zwar bei weitem nicht die Features von pssh und dsh bietet, aber dafür für meine Zwecke problemlos funktioniert:

#!/usr/bin/env sh
SERVERS=`cat ~/.dsh/$1`

for i in $SERVERS
do
        echo $i
        ssh $i $2
done

Das Script habe ich unter "/usr/local/bin/dsh" abgelegt und ist damit in meinem Pfad erreichbar. In der Datei "~/.dsh/dbslaves" habe ich mir eine Liste meiner Slaves angelegt:

slave-1
slave-2
slave-3
slave-4
slave-5

Diese Hosts habe ich ohnehin schon in meiner "~/.ssh/config" drin. Ausserdem sind auf den Servern meine Keys für passwortloses Login installiert. Nun kann ich über:

dsh dbslaves "mysql -uroot -p... -e 'SHOW SLAVE STATUS\G'"

bequem meinen Slave Status abfragen oder andere Kommandos ausführen.



Trackbacks

Keine Trackbacks

Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

Noch keine Kommentare

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA