USV mit ESXi Server nutzen

Der Albtraum schlechthin bei einem VM-Server ist natürlich ein Stromausfall. Bumms, alle Maschinen schmieren ab. Und das nicht mal mit „normalen“ Platten, die man vielleicht noch an einem anderen System verwenden könnte, nein, alles in diesen blöden Container-Dateien.

Also ist eine USV ein MUSS.

Da meine alte USV APC Smart-UPS-1000 nach dem Akkutausch vor zwei Jahren immer noch gut läuft, und ich definitiv keine drei USVs für die beiden Server und den IPCOP-Router-PC haben will, muß das irgendwie mit einem System realisiert werden.

Dummerweise bieten die freien ESXi keine USV-Unterstützung an, also ist etwas Trickserei gefragt.

Hier nun meine Lösung, die ich nach vielen Recherchen im Netz als eine der einfachsten erachte, da sie ohne Patchen des ESXi auskommt und auch sonst keine komplexen Probleme mit sich bringt.

Die Lösung

Eingesetzt wird das Ganze auf einer VM, die nur für diese USV da ist. An diese VM habe ich den COM-Port des Servers durchgeleitet, jaja, meine USV kommuniziert noch seriell per RS232 und nicht über USB. Mit USB sollte das Ganze aber genauso funktionieren.

Okay, in der Windows XP Maschine habe ich die USV-Software von APC installiert, die gibt es auf der Website von APC zum Download.

Ich benutze die PowerChute Business Edition ohne irgendwelche kostenpflichtigen Upgrades.

Diese Software wird ganz normal im Windows installiert und kommuniziert mit der USV. Soweit also kein Problem.

Und beim Eintreten des Ereignisses „PowerLost“ wird ein kleines Script ausgeführt, das zuerst alle VMs (bis auf die USV-VM natürlich) und den IPCOP-Router und dann nach einer Pause die beiden ESXi-Server herunterfährt.

Auf der USV-VM sind die VMWare-Tools installiert (wie auch auf allen anderen VMs), so daß beim Herunterfahren des ESXi auch diese Maschine heruntergefahren wird. Theoretisch sollte das natürlich auch mit allen anderen VMs klappen, es würde also eigentlich reichen, nur die beiden ESXi und den IPCOP herunterzufahren.

Ich habe es aber lieber sicher, deshalb fahre ich zuerst die VMs herunter. Doppelt hält besser 🙂

Der Ordner, in dem das Script und die benötigten Tools liegen, ist bei mir unter C:\Programme\APC\PowerChute Business Edition\agent\cmdfiles zu finden, auf anderen Windows-System kann dieser Ordner einen etwas anderen Pfad haben.

Das Script, das beim PowerLost Ereignis ausgeführt wird, heißt bei mir shutdown.cmd und hat diesen Inhalt:

@echo off
@start „“ „C:\Programme\APC\PowerChute Business Edition\agent\cmdfiles\network_shutdown.cmd“ Alles

Ich rufe also hierin ein weiteres Script auf. Umständlich, aber geht leider nicht anders. Aus irgendwelchen depperten Gründen kann man nämlich aus dem Original-Script keine Hilfsprogramme zuverlässig starten. Da habe ich alle möglichen Aufrufversionen ausprobiert, geht schlicht nicht.

Ich rufe also das Script network_shutdown.cmd auf und übergebe den Parameter Alles. Mit den Parametern kann ich steuern, welche Systeme heruntergefahren werden sollen, und mit Alles werden alle Rechner angesprochen, die an der USV hängen.

Und noch einige wichtige Hinweise

  • IP steht immer für die IP des jeweiligen PC
  • XXX steht immer für das entsprechende Passwort
  • plink.exe (aus den Putty-Tools) wird für die Linux-PCs gebraucht
  • psshutdown.exe (von Sysinternals) wird für die Windows-PCs gebraucht
  • Das Programm wait.exe macht nix anderes, als eine bestimmte Zeit Däumchen zu drehen, mit dem Parameter J genau 30 Sekunden
  • Auf den ESXi-Servern muß der SSH-Zugang aktiviert sein
  • Alle eingesetzten Tools müssen im gleichen Ordner liegen
  • Ich habe das Script etwas gekürzt, bei mir protokolliert er den Shutdown noch in einem Logfile, deshalb sind da manchmal auch jetzt überflüssige Gotos drin.
  • Bevor das Ganze automatisch funktioniert, muß man es manuell laufen lassen, damit plink.exe die SSH-Keys der Linux-PCs abfragen und man diese mit y speichern kann.

(Jetzt muß ich etwas aufpassen, daß ich auch alle Passwörter erwische 🙂 )

@echo off
REM In’s Arbeitsverzeichnis wechseln
cd „C:\Programme\APC\PowerChute Business Edition\agent\cmdfiles“

REM Parameter auswerten
set Parameter=%1

if „%Parameter%„==““ goto doku
if „%Parameter%“==“Alles“ goto Alles
if „%Parameter%“==“Server1“ goto Server1
if „%Parameter%“==“Server2“ goto Server2
goto ende
:Alles
rem *****************************************************
rem Einzelsysteme herunterfahren
rem *****************************************************
REM IPCOP herunterfahren, das geht per SSL auf Port 222
start „“ „plink.exe“ IP -l root -pw XXX -P 222 shutdown -h now

:Server1
rem *****************************************************
rem VMs Server1 herunterfahren
rem *****************************************************
REM Windows-PC herunterfahren
start „“ „psshutdown.exe“ \\IP -c -f -s -t 10

REM Linux-PC herunterfahren
start „“ „plink.exe“ IP -l root -pw XXX shutdown -h now

REM hier weitere VMs von Server1 eintragen
if „%Parameter%“==“Server1“ goto server

:Server2
rem *****************************************************
rem VMs Server2 herunterfahren
rem *****************************************************
REM Windows-PC herunterfahren
start „“ „psshutdown.exe“ \\IP -c -f -s -t 10

REM Linux-PC herunterfahren
start „“ „plink.exe“ IP -l root -pw XXX shutdown -h now

REM hier weitere VMs von Server2 eintragen
if „%Parameter%“==“Server2“ goto server

Einstellungen der USV

Einstellungen der USV

:server
rem *****************************************************
rem VM-Server herunterfahren
rem *****************************************************
REM insgesamt 60 Sekunden warten, bis alle VMs heruntergefahren sind
wait J

wait J

if „%Parameter%“==“Server1“ goto server-1
if „%Parameter%“==“Server2“ goto server-2
:server-1
REM Und so kann ein ESXi heruntergefahren werden
start „“ „plink.exe“ IP -l root -pw XXX /sbin/poweroff

if „%Parameter%“==“Server1“ goto ende
:server-2
REM Und so kann ein ESXi heruntergefahren werden
start „“ „plink.exe“ IP -l root -pw XXX /sbin/poweroff

if „%Parameter%“==“Server2“ goto ende
goto ende

:doku
REM Anzeige bei Aufruf ohne Parameter
echo Parameter angeben [Server1|Server2|Alles]

goto final
:ende
:final

Einstellungen der USV

Einstellungen der USV

Alle an die USV angeschlossenen PCs sind so eingestellt, daß sie wieder starten, sobald der Strom wieder da ist.

Die USV ist so eingestellt, daß sie bei Stromausfall fünf Minuten nichts tut, falls der Strom wiederkommt. Dann startet sie das Script und gibt dem Script zwei Minuten für die Ausführung. Danach wartet sie noch drei Minuten, bis sie den Strom abschaltet.
Da diese Zeiten in der USV gespeichert sind, funktioniert das auch, wenn die USV-VM und der zugehörige ESXi-Server schon runtergefahren sind.

Hier sollte man auf jeden Fall mit den Zeiten etwas experimentieren, bis es für das eigene Netzwerk passt.

Ach ja, seit ich die USV vor etwa 8 Jahren gekauft habe, hatte ich genau drei Mal einen Stromausfall. Zwei davon lagen an mir 🙂

 

 

Und hier kann man das Ganze auch als kurzes Video ansehen:

Dieser Beitrag wurde unter IT-Technik abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar