Aktionen

VMware:Herunterfahren VMs bei Stromausfall

Aus znilwiki

Wie verhalten bei Stromausfall? Natürlich sollten alle Server, das SAN und natürlich die auch die Switche (Netzwerk- und SAN-Switche) an eine Unterbrechungsfreie Stromversorgung (USV) angeschlossen werden.

Sie wollen das, auch wenn der Strom ausgefallen war, alles von alleine wieder hochkommt? Dann machen Sie doch einfach - Nichts!
Der Strom fällt aus ... die USV läuft so lange sie kann - und geht auch aus.
Alle Server / Systeme etc sind somit auch auf einen Schlag ausgeschaltet.
Der Strom kommt wieder - die Server starten wieder von allein (Typisches Verhalten), SAN und Switche kommen wieder hoch.
Nachdem der erste ESX Server wieder hochgekommen ist, stellt VMware HA die Situation fest und was passiert ist - und startet alle VM's gemäß Plan wieder. 15 bis 30 Minuten nachdem der Strom wieder da ist, läuft alles wieder wie vorher.

Zu unsicher? Ok, dann fangen wir den Stromausfall ab und fahren alles geordnet herunter! Aber dann müssen wir auch von hand alles wieder hochfahren!

Herunterfahren aller VM's per Script

Voraussetzung:

  1. Einen Rechner/Server mit Installierten USV Shutdown-Programm welches unser Script ausführt (Bare-Metall oder VM)
  2. Installierte VMware Remote CLI (z.B. VMware-vSphere-CLI-4.1.0-254719.exe)
  3. geänderte Script Dateien aus der VMware Remote CLI Datei:Vmwareshutdown.zip


Die Dateien aus dem .ZIP am besten in ein Verzeichnis enpacken in dem ihr auch das restliche Script packt:

REM VMware Shutdown Script
REM 2011 by Bernhard Linz / Bernhard@znil.de

set IP_ESX1=192.168.0.101
set IP_ESX2=192.168.0.102
set IP_ESX3=192.168.0.102
 
set USER=root
set PASSWORD=test1234

C:\Scripte\windowsvm2.pl --server %IP_ESX1% --username %USER% --password %PASSWORD% >C:\Scripte\ESX1_vm.txt
C:\Scripte\linuxvm2.pl --server %IP_ESX1% --username %USER% --password %PASSWORD% >>C:\Scripte\ESX1_vm.txt
C:\Scripte\windowsvm2.pl --server %IP_ESX2% --username %USER% --password %PASSWORD% >C:\Scripte\ESX2_vm.txt
C:\Scripte\linuxvm2.pl --server %IP_ESX2% --username %USER% --password %PASSWORD% >>C:\Scripte\ESX2_vm.txt
C:\Scripte\windowsvm2.pl --server %IP_ESX3% --username %USER% --password %PASSWORD% >C:\Scripte\ESX3_vm.txt
C:\Scripte\linuxvm2.pl --server %IP_ESX3% --username %USER% --password %PASSWORD% >>C:\Scripte\ESX3_vm.txt

del C:\Scripte\shutdown_ESX1.txt
del C:\Scripte\shutdown_ESX2.txt
del C:\Scripte\shutdown_ESX3.txt

for /F "eol=#" %%i in (ESX1_vm.txt) do call :SHUTDOWN_VM "%%i" %IP_ESX1% C:\Scripte\shutdown_ESX1.txt
for /F "eol=#" %%i in (ESX2_vm.txt) do call :SHUTDOWN_VM "%%i" %IP_ESX2% C:\Scripte\shutdown_ESX2.txt
for /F "eol=#" %%i in (ESX3_vm.txt) do call :SHUTDOWN_VM "%%i" %IP_ESX3% C:\Scripte\shutdown_ESX3.txt
 
goto Ende
 
 
:SHUTDOWN_VM
REM eigene Maschine überspringen!
if %1=="DieserServer" goto :eof
 
powerops.pl --operation shutdown --vmname %1 --username %USER% --password %PASSWORD% --server %2 >C:\Scripte\shutdown.tmp
find "is poweredOff" C:\Scripte\shutdown.tmp
if %ERRORLEVEL%==1 echo %1 >> %3
goto :EOF

:Ende

Sie müssen / sollten die windowsvm2.pl, linuxvm2.pl' aus dem Zip Archiv nehmen - diese habe ich so angepasst das die Ausgabe formatierter erfolgt - wir wollen nur den Anzeigename. Zudem die powerops.pl damit dei Abfrage der Ausgabe passt.

Das wir am Anfang die IP Adressen der Server eintragen und verwenden - nun ich wollte mich nicht auf DNS Server verlassen müssen.

Wir ermitteln zunächst alle Windows und Linux VM's auf den einzelnen Servern und speichern das Ergebiss in Textdateien. Dann rufen wir für jeden Server einmal eine Schleife auf und befehlen den VM's herunterzufahren. Das klappt aber nur wenn innerhalb der VM's die VMware Tools installiert sind.

Kleiner Bonus: wir merken und welche VM wir erfolgreich herunterfahren konnten - das sind dann die die auch eingeschaltet waren - und könnten das wiederverwenden:

Mit diesem Script könnten wir im Anschluss alles wieder hochfahren:

set IP_ESX1=192.168.0.101
set IP_ESX2=192.168.0.102
set IP_ESX3=192.168.0.103

set USER_ESX=root
set PASSWORD_ESX=test1234

for /F "eol=#" %%i in (shutdown_ESX1.txt) do call :STARTUP_VM %%i %IP_ESX1%
for /F "eol=#" %%i in (shutdown_ESX2.txt) do call :STARTUP_VM %%i %IP_ESX2%
for /F "eol=#" %%i in (shutdown_ESX3.txt) do call :STARTUP_VM %%i %IP_ESX3%

goto Ende 

:STARTUP_VM
powerops.pl --operation poweron --vmname %1 --username %USER_ESX% --password %PASSWORD_ESX% --server %2
goto :EOF

:Ende

Ich rate aber dringend davon ab, das irgendwie automatisch zu machen - auch wenn manche USV'en das bieten - die Wirklichkeit ist anders und nicht ideal. Denken wir nur ein ein schönes "Strom weg" ... "Strom wieder da" ... "Strom wieder weg" ... "Strom wieder da" ... ich denke da an wundervolle Szenarien wo 2 Scripte sich gegenseitig bekriegen und die VM's gerade rauf- unter runterfahren.

Loading comments...