VM Ware ESX 3.5 – Shutdown aller an der Maschine registrierten VM´s per Script

Okt 19th, 2009

Warum sollte so etwas wie “Herunterfahren aller registrierten VMs auf einem VMWare Server” sinnvoll sein.

Gehen wir mal davon aus das die VM Ware Server in einem Räumlich getrennten Cluster laufen.
Nun fällt in einem der Serverräume der Strom aus! Sagen im Serverraum 1.
Betroffen sind also nur die Maschinen die im Serverraum 1 laufen.
Im Normalfall hat man in diesem Fall noch ca. 8-10 Minuten Zeit in dem die Notfallbatterien die Systeme am leben halten. Bei mehren Servern in unterschiedlichen Räumen weiß man natürlich nie welcher der VMs auf welcher Maschine läuft, es würde also schon einige Zeit vergehen bis eine Person im VM Ware Center die entsprechenden VMs alle manuell heruntergefahren hat. Zudem was passiert wenn das ganze Nachts passiert und der Admin nicht direkt vor dem Monitor sitzt?

Für den VM Ware Server gibt es hier noch eine einfach Lösung. APC bietet für ca. 100€ ihren Power Shutdown Agent auch für ESX 3.5 an. Die Installation einfach und ist hier auch sehr gut beschrieben. Diese Lösung fährt aber nur nach einer bestimmten Zeit den Server selbst herunter und alle VMs werden “Hard” gestoppt! Hierbei kann es gerade bei Datenbankdiensten zu schweren Datenverlusten oder Inkonsistenzen kommen. Es wäre also wesentlich geschickter die Maschinen geordnet vorher herunter zu fahren. Mit der APC Lösung kann ich hierzu nicht nur die Maschine herunterfahren sondern auch zu einem früheren Zeitpunkt ein Script starten lassen.

Das Script muss also folgendes Kriterium Erfüllen:
“Eine Virtuelle Maschine darf nur heruntergefahren werden wenn sie auch auf der betroffen Hardware läuft”

Ich habe das so gelöst:
#!/bin/bash
######################################################################
#
# Shout Down Script für Powershutdown auf ESX Serverumgebungen
# Version: 1.000
# jn / 19102009
#
######################################################################

# Data File zum Temporären zwischenspeichern
datafile=/root/serverlist.txt

# Aktuell registrierte Server in Datafile schreiben
vmware-cmd -l >>$datafile

# Datafile auslesen und mit VM-Ware Shutdown Befehl verbinden
n=1
while read line ; do
eval “line$n=\”$line\”"
vmware-cmd $line stop;
n=`expr $n + 1`
done <$datafile

# Löschen des Datafiles
rm $datafile

Alle Registrierten VMs werden in eine Textfile aufgelistet, danach arbeitet eine kleine Schleife die einzelnen Zeilen ab und schreibt so für jede VM die auf dieser Hardware läuft den VM Ware Konsolen Shutdown Befehl.

Nun müssen nur noch die Batterien das Zeitfenster zum herunterfahren lange genug offen halten. ;-)

Download Script:

  ShutdownScriptforESX (552 bytes, 0 hits)

  1. Rolette System
    Nov 13th, 2009 at 23:01
    Reply | Quote | #1

    An sich n cooler post, aber kannst beim nächsten mal n bisschen detailierter sein?