Hyper-V Cluster und APC PowerChute Network Shutdown 4.3
Liebe IT-Kollegen
Wir haben 2 Hostsysteme, welche zu einem Hyper-V Cluster verbunden sind. Darauf sind ca. 20 virtuelle Maschinen (Server 2012 - 2019).
Soweit so gut.
Nun zu meiner Aufgabe:
Sicheres Herunterfahren der virtuellen Maschinen in einer vorgegebenen Reihenfolge, bevor die Hostsysteme später ebenfalls heruntergefahren werden.
Anscheinend gibt es bei Hyper-V keine Möglichkeit, die Reihenfolge beim Herunterfahren zu steuern wie dies bei VMware der Fall ist.
Im Internet gibt es zwar schöne Anleitungen zum Thema, aber wie es scheint, interessiert es niemanden, in welcher Reihenfolge sie heruntergefahren werden.
Was ich gemacht habe:
Ich habe mich natürlich ein wenig an die Sache herangetastet und mit der manuellen Ausführung nachfolgenden Codes in PowerShell begonnen (Auf dem Host 1):
Danach habe ich mir die Frage gestellt, wie ich SERVER1 herunterfahren kann, wenn ich nicht weiss auf welchem Host er gerade läuft? Bei Stromausfall ja auch nicht bekannt. Somit habe ich das hier versucht:
Durch das mitgeben beider Host-IPs, wird auf Host 1 zwar nichts gefunden (sofern Server1 auf Host 2 ist), was ein Fehler generiert, die zweite IP ist jedoch erfolgreich und fährt das System herunter.
Voller Vorfreude habe ich also alle meine VMs erfasst und einen manuellen Test durchgeführt. Perfekt. Alle VMs werden richtig heruntergefahren, egal ob sich diese gerade auf dem Host 1 oder Host 2 befinden, da ich ja jeweils beiden Hosts den Befehl gebe.
Mein Problem:
Führe ich den Shutdown Test mit der PowerChute Software durch, werden nur Server heruntergefahren, welche sich auf dem Host 1 befinden.
Zuerst dachte ich an ein Berechtigungsproblem, weswegen ich den PowerChute Service sogar als Domänen Administrator laufen liess. Leider auch ohne Erfolg.
Danach habe ich gedacht, es liegt an einer Einschränkung in PowerShell, wonach das Skript vielleicht auch mit zu wenig Rechten ausgeführt wird. Also habe ich mein CMD-File wie folgt erweitert:
Manuelle Ausführung = Funktioniert --> Server auf Host 1 UND Host 2 werden sauber heruntergefahren.
Automatische Ausführung = Nur Server auf Host 1 werden heruntergefahren.
Keine Ahnung ob ich mich auf dem totalen Holzweg befinde, aber ich weiss wirklich nicht mehr weiter und bitte um Erfahrungswerte oder Lösungen. Habe schon viel zu viel Zeit damit verbraten!
Besten Dank im Voraus!
Wir haben 2 Hostsysteme, welche zu einem Hyper-V Cluster verbunden sind. Darauf sind ca. 20 virtuelle Maschinen (Server 2012 - 2019).
Soweit so gut.
Nun zu meiner Aufgabe:
Sicheres Herunterfahren der virtuellen Maschinen in einer vorgegebenen Reihenfolge, bevor die Hostsysteme später ebenfalls heruntergefahren werden.
Anscheinend gibt es bei Hyper-V keine Möglichkeit, die Reihenfolge beim Herunterfahren zu steuern wie dies bei VMware der Fall ist.
Im Internet gibt es zwar schöne Anleitungen zum Thema, aber wie es scheint, interessiert es niemanden, in welcher Reihenfolge sie heruntergefahren werden.
Was ich gemacht habe:
- Meine Suche hat ergeben, dass man bei Hyper-V wohl mit Skripten arbeiten muss, um mein Ziel zu erreichen??!
- Nach PowerShell-Befehlen gesucht, mit denen man eine virtuelle Maschine herunterfahren kann.
- Ein CMD erstellt, welches ein PowerShell Skript starten soll, da die USV Software nur CMD oder BAT-Files umgehen kann.
Ich habe mich natürlich ein wenig an die Sache herangetastet und mit der manuellen Ausführung nachfolgenden Codes in PowerShell begonnen (Auf dem Host 1):
Stop-VM "SERVER1" -ComputerName 192.168.1.11 --> Funktioniert --> Host 1 war der OwnerNode der VM
Stop-VM "SERVER1" -ComputerName 192.168.1.12 --> Funktioniert --> Host 2 war der OwnerNode der VM
Danach habe ich mir die Frage gestellt, wie ich SERVER1 herunterfahren kann, wenn ich nicht weiss auf welchem Host er gerade läuft? Bei Stromausfall ja auch nicht bekannt. Somit habe ich das hier versucht:
Stop-VM "SERVER1" -ComputerName 192.168.1.11, 192.168.1.12 --> Funktioniert
Durch das mitgeben beider Host-IPs, wird auf Host 1 zwar nichts gefunden (sofern Server1 auf Host 2 ist), was ein Fehler generiert, die zweite IP ist jedoch erfolgreich und fährt das System herunter.
Voller Vorfreude habe ich also alle meine VMs erfasst und einen manuellen Test durchgeführt. Perfekt. Alle VMs werden richtig heruntergefahren, egal ob sich diese gerade auf dem Host 1 oder Host 2 befinden, da ich ja jeweils beiden Hosts den Befehl gebe.
Mein Problem:
Führe ich den Shutdown Test mit der PowerChute Software durch, werden nur Server heruntergefahren, welche sich auf dem Host 1 befinden.
Zuerst dachte ich an ein Berechtigungsproblem, weswegen ich den PowerChute Service sogar als Domänen Administrator laufen liess. Leider auch ohne Erfolg.
Danach habe ich gedacht, es liegt an einer Einschränkung in PowerShell, wonach das Skript vielleicht auch mit zu wenig Rechten ausgeführt wird. Also habe ich mein CMD-File wie folgt erweitert:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\Repository\Shutdown.ps1""' -Verb RunAs}"
Manuelle Ausführung = Funktioniert --> Server auf Host 1 UND Host 2 werden sauber heruntergefahren.
Automatische Ausführung = Nur Server auf Host 1 werden heruntergefahren.
Keine Ahnung ob ich mich auf dem totalen Holzweg befinde, aber ich weiss wirklich nicht mehr weiter und bitte um Erfahrungswerte oder Lösungen. Habe schon viel zu viel Zeit damit verbraten!
Besten Dank im Voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 570133
Url: https://administrator.de/contentid/570133
Ausgedruckt am: 25.11.2024 um 14:11 Uhr
16 Kommentare
Neuester Kommentar
N'Abend.
Du musst dein Cluster erstmal fragen, auf welchem Node die VM grad "lebt":
https://social.technet.microsoft.com/Forums/en-US/e60d32d9-3f8a-4bd9-928 ...
Cheers,
jsysde
Du musst dein Cluster erstmal fragen, auf welchem Node die VM grad "lebt":
https://social.technet.microsoft.com/Forums/en-US/e60d32d9-3f8a-4bd9-928 ...
$a = Get-ClusterGroup | Where-Object {$_.Name -like "server1" -and $_.State -eq 'Online'}
$b = $a.OwnerNode
Stop-VM -Name "vm1" -ComputerName $b
Cheers,
jsysde
Hi.
Erlaube die Frage, wozu Du die Maschinen herunterfahren möchtest.
Wenn die USV den Host runterfährt, suspendiert dieser (per default) die Maschinen - das funktioniert sehr gut und nach Ende des Stromausfalls machen sie automatisch nach dem Neustart des Hosts weiter, wo sie aufgehört haben. Dass dabei Dinge aus dem Tritt kommen, habe ich noch nie erlebt - Ihr hingegen schon? Wenn Du magst, sag mal an, wo's dabei denn Probleme gibt.
Erlaube die Frage, wozu Du die Maschinen herunterfahren möchtest.
Wenn die USV den Host runterfährt, suspendiert dieser (per default) die Maschinen - das funktioniert sehr gut und nach Ende des Stromausfalls machen sie automatisch nach dem Neustart des Hosts weiter, wo sie aufgehört haben. Dass dabei Dinge aus dem Tritt kommen, habe ich noch nie erlebt - Ihr hingegen schon? Wenn Du magst, sag mal an, wo's dabei denn Probleme gibt.
Ich habe nicht alles gelesen, trotzdem vermute ich, dass das Systemkonto des PCs, der die anderen runterfahren soll, nicht als dazu berechtigt eingetragen ist bei den anderen PCs. Öffne dort secpol.msc und geh zu Zuweisen von Benutzerrechten und trag runterfahrpcname$ ein unter "Herunterfahren des Systems" ein.
Du verwirrst mich nun.
Was hat Dein Domänenadminkonto, welches Du für die manuelle Ausführung nutzt, welche erfolgreich läuft, damit zu tun?
Du kannst diesen Befehl entweder als Nutzer von remote absetzen, oder als Systemkonto, ebenso von remote.
Auf dem Zielsystem (ja, auf der VM), muss dann eben dieses Konto das Recht zum Runterfahren haben und ich kann dir garantieren, dass es auch funktioniert - wir machen es so.
Wo startest Du denn das Skript?
Was hat Dein Domänenadminkonto, welches Du für die manuelle Ausführung nutzt, welche erfolgreich läuft, damit zu tun?
Du kannst diesen Befehl entweder als Nutzer von remote absetzen, oder als Systemkonto, ebenso von remote.
Auf dem Zielsystem (ja, auf der VM), muss dann eben dieses Konto das Recht zum Runterfahren haben und ich kann dir garantieren, dass es auch funktioniert - wir machen es so.
Wo startest Du denn das Skript?
Hallo!
Es reicht völlig per Powershut die Hosts sauber herunter zu fahren. Ändere die Einstellungen der VM's, wenn Du diese ebenfalls sauber herunterfahren möchtest. Letzeres bevorzuge ich ebenfalls, da es mir bereits passiert ist, dass in Umgebungen mit Exchange der Exchange nach wieder hochfahren nicht sauber funktionierte.
Daher
get-vm | Set-VM -AutomaticStopAction Shutdown
und alle Maschinen stehen auf herunterfahren.
Gruß Freili
Es reicht völlig per Powershut die Hosts sauber herunter zu fahren. Ändere die Einstellungen der VM's, wenn Du diese ebenfalls sauber herunterfahren möchtest. Letzeres bevorzuge ich ebenfalls, da es mir bereits passiert ist, dass in Umgebungen mit Exchange der Exchange nach wieder hochfahren nicht sauber funktionierte.
Daher
get-vm | Set-VM -AutomaticStopAction Shutdown
und alle Maschinen stehen auf herunterfahren.
Gruß Freili