struan
Goto Top

VMware vCenter und Powerchute Network Shutdown Migration der virtuellen Maschinen vor Shutdown

Hallo,

ich möchten gerne in unserem vorhanden ESXi / vCenter Cluster mit SAN und HA Powerchute Networkshutdown intigrieren.
Es sind zwei Sites vorhanden, in jeder Site sind jeweils 4 ESXi Server vorhanden und diese sind jeweils an eine USV angeschlossen, also:

Site 1: SIte 2:
4x ESXi-Server 4x ESXi-Server
1x USV 1x USV

Die Konfiguration der USV bzw. NMC (Network Management Cards) ist erfolgt, bei Stromausfall werden nun die virtuellen Maschinen und danach die ESXi-Server in der jeweiligen Site Heruntergefahren.

Ich würde gerne eine Sache Ändern: Bevor die ESXi Server in der jeweiligen Site Heruntergefahren werden, sollen die virtuellen Maschinen in die jeweils andere Site (mit Strom) migriert werden.


Kann mir jemannd dabei weiterhelfen oder ist das so nicht möglich?


mfg

Content-ID: 163172

Url: https://administrator.de/contentid/163172

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

Bommel08
Bommel08 23.03.2011 um 19:36:00 Uhr
Goto Top
Hmm scheint ja so, als wenn relativ wenig Leute sich damit auseinandersetzen.
Mich würde die Thematik aber auch interessieren.
So wie ich dich verstanden habe, hast du ein vCenter Server und dort drin 2 Cluster mit jeweils 4 ESXi-Servern.

Mein Ansatz wäre folgender:
Wenn du 2 USVs mit 2 Mgmt-Karten hast, besteht ja die Möglichkeit, dass die USV beim Stromausfall eine BAtchdatei zum Beispiel ausführt. Diese wiederum könnte zum Beispiel eine CMDlet über die VMware PowerCLI ausführen und dabei wird der Status der VMs auf den Host abgefragt und dann natürlich auch ins zweite Cluster migriert.
Setzt natürlich voraus, dass deine Lizenz vMotion unterstützt. Was ich jetzt so auf die schnelle nicht weiß ist, ob man über 2 Cluster hinaus vMotion einzelner VMs nutzen kann. Aber das prüfe ich morgen mal @work.
Struan
Struan 24.03.2011 um 10:29:33 Uhr
Goto Top
Hallo,

im vCenter sind alle 8 ESX-Server als ein Cluster konfiguriert (vMotion wird unterstützt).
An PowerCLI habe ich auch schon gedacht, in Verbindung mit dem vMA. Leider bin ich nicht wirklich fit was PowerCLI Scripte angeht.
Bommel08
Bommel08 24.03.2011 um 21:14:39 Uhr
Goto Top
Also auf der PowerCLI reicht

Get-VM -Name <NAME VM> | Move-VM -Destination (Get-VMHost <x.x.x.x>)

Also sollte man ein Script auf Kommando der Managementkarte ausführen lassen, welches wiederrum ein PowerShell-Script startes welches sich zum vCenter Server connectet und dort das Cmdlet startet. Ist etwas tricky, weil man über einen selbst erstellten Taskjob die .ps1-Datei aufrufen muss.
Struan
Struan 24.03.2011 um 21:50:59 Uhr
Goto Top
Dann braucht man die folgenden beiden Zeilen im PowerCLI script:

Get-VIServer -Server -User -Password
get-vmhost ESX1 | get-vm NAMEVM | move-vm –destination (get-vmhost ESX2)


Powerchute kann ja leider keine Powershell-Scripte aufrufen. Folgendes soll klappen:

Eine .CMD mit dem Inhalt

64 bit System: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" "& "C:\Scripts\PowerOffAll.ps1"
32Bit System: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" "& "C:\Scripts\PowerOffAll.ps1"


Wird morgen gleich einmal getestet.
Bommel08
Bommel08 24.03.2011 um 23:46:33 Uhr
Goto Top
Ja teste mal. Bin ich ja gespannt auf das Ergebnis.
Struan
Struan 25.03.2011 um 16:45:50 Uhr
Goto Top
Den Aufruf aus Powerchute habe ich leider noch nicht hinbekommen.

Ich habe folgendes in die CMD geschrieben:

@start " ""C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" "& "C:\Scripts\PowerOffAll.ps1"

Das PowerCLI Script muss wie folgt aussehen:

connect-viserver vCenter -user -password
get-vmhost ESX1.meinedomain.de | get-vm "VM Name1, "VM Name 2" | move-vm –destination ESX2.meinedomaine.de

(Mit Anführungzeichen bei VMs mit Leerzeichen im Namen)

Wie gesagt der Aufruf der CMD funktioniert...nur Powerchute kann die CMD nicht ausführen, ka wie man das hinbekommt.
Bommel08
Bommel08 25.03.2011 um 21:07:42 Uhr
Goto Top
Also versuch mal die Lösung.
Damit sollte es klappen.

1. Im Windows Taskplaner (Start → Verwaltung → Aufgabenplanung) den Taskjob move-vm.xml importieren und die Authentifizierungs-Angaben anpassen.

move-vm.xml
<?xml version="1.0" encoding="UTF-16"?>  
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  
  <RegistrationInfo>
    <Date>2011-03-25T11:24:26.1658685</Date>
    <Author>Bommel08</Author>
    <Description>Task zum Ausführen des Move-Script durch APC PowerChute Networkshutdown</Description>
  </RegistrationInfo>
  <Triggers />
  <Principals>
    <Principal id="Author">  
      <UserId>DUMMY\administrator</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <IdleSettings>
      <Duration>PT10M</Duration>
      <WaitTimeout>PT1H</WaitTimeout>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">  
    <Exec>
      <Command>%SystemRoot%\system32\windowspowershell\v1.0\powershell.exe</Command>
      <Arguments>-ImportSystemModules C:\VI_Scripts\move-vms.ps1</Arguments>
    </Exec>
  </Actions>
</Task>

2. Erstelle eine .bat-Datei "apc-move.bat" , die du dann von der Managementkarte bei Stromausfall oder Akkubetrieb ausführen lässt.
apc-move.bat
@ECHO OFF
schtasks /Run /TN move-vm
ECHO %date%, %time:~0,8% - Networkshutdown-move wurde ausgeführt... >> log.txt
exit

3. Erstellung "move-vms.ps1"

connect-viserver vCenter -user -password
get-vmhost ESX1.meinedomain.de | get-vm "VM Name1, "VM Name 2" | move-vm –destination ESX2.meinedomaine.de  


Funktionsweise sieht dann wie folgt aus.
Die Managementkarte ruft auf das Ereignis hin die "apc-move.bat" auf. Diese bat-Datei startet wiederum den Taskjob "move-vm". Der Vorteil des Taskjob ist die systemnahe Ausführung des ps-Scriptes "move-vms.ps1", wo die Befehle für das Verschieben der VMs drin stehen.
Struan
Struan 25.03.2011 um 21:46:06 Uhr
Goto Top
Muss ich mal Montag testen.
Wo hast du das Script gefunden? oder hast du dir das selber ausgedacht?
Bommel08
Bommel08 26.03.2011 um 09:28:31 Uhr
Goto Top
Ich arbeite in einem IT-Systemhaus als Systemadministrator. Wir machen relativ viel mit VMware und für Shutdown-Szenarien in virtualisierten Umgebungen haben wir im Kollegenkreis das Script mal erarbeitet.
Struan
Struan 29.03.2011 um 11:11:44 Uhr
Goto Top
Hallo,

funktioniert super! Bis auf das Powerchute die .bat nicht ausführt. Kannst du mir einmal sagen wie der Pfad in Powerchute angegeben werden muss.
Bommel08
Bommel08 29.03.2011 um 20:12:49 Uhr
Goto Top
Also ich hab auf dem vCenter Server APC PowerChute Network Shutdown installiert und dort unter "CONFIGURE EVENTS" zum Beispiel bei "Communication: Lost while on Battery" das Script hinterlegt: C:\VI_Scripts\move.bat
Das liegt also lokal auf dem vCenter Server bzw. der Server auf dem PowerChute Network Shutdown installiert ist.
Struan
Struan 29.03.2011 um 20:35:12 Uhr
Goto Top
Das habe ich auch so hinterlegt. Komisch das es nicht ausgeführt wird.