Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel hilft, das Problem zu lösen, bei dem die Hyper-V-Replikation unterbrochen wird, wenn der primäre Server oder der Replikat-Server heruntergefahren wird.
Die Hyper-V-Replikation wird ausgesetzt, wenn der Primärserver oder der Replikaserver heruntergefahren wird. Darüber hinaus zeichnet der Hyper-V Virtual Machine Management Service (VMMS) eine Reihe von Ereignisprotokollen mit Ereignis-IDs 32086 und 32022 auf.
Ereignis-ID 32086
Log Name: Microsoft-Windows-Hyper-V-VMMS/Admin Source: Hyper-V-VMMS Event ID: 32086 Level: Error Description: Hyper-V suspended replication for virtual machine <VM Name> due to a non-recoverable failure. Resume replication after correcting the failure. (Virtual machine ID <VM GUID>)
Ereignis-ID 32022
Log Name: Microsoft-Windows-Hyper-V-VMMS/Admin Source: Hyper-V-VMMS Event ID: 32022 Level: Error Description: Hyper-V could not replicate changes for virtual machine <VM Name>: The operation has been canceled (0x80004004). (Virtual Machine ID <VM GUID>)
Hinweis
Die Beschreibung kann auch die Meldung "Vorgang wurde unterbrochen (0x80004004)" enthalten.
Dieses Problem tritt in Windows Server 2012 Standard, Windows Server 2012 Datacenter und Windows Server 2012 R2 Standard auf. Das Problem wurde in KB4088889 in Windows Server 2016 behoben.
Ursache: Hyper-V VMMS beendet die Ausgabe neuer Prozesse
Dieses Problem tritt auf, da Hyper-V VMMS keine neuen Prozesse mehr ausgibt. Wenn die primären und die Replikatserver heruntergefahren werden, beendet der Hyper-V VMMS die Ausgabe neuer Prozesse (Aufgaben). Wenn die unterschiedlichen Daten des Hyper-V-Replikaservers zu diesem Zeitpunkt eintreffen oder übertragen werden, kann der Übertragungs- oder Empfangsprozess nicht durchgeführt werden, und die Replikation kann ausgesetzt werden.
Problemumgehung 1: Replikation manuell neu starten
Sie können die virtuelle Maschine im Hyper-V Manager auswählen und gedrückt halten (oder mit der rechten Maustaste darauf klicken) und dann Replikation>fortsetzen, um die Replikation manuell fortzusetzen.
Umgehungslösung 2: Replikation automatisch mit einem Skript neu starten
Sie können auch ein Skript zum automatischen Neustart der Replikation im Aufgabenplaner festlegen, um die Replikation beim Systemstart automatisch neu zu starten.
Das Skript startet automatisch die Replikation neu, die zum Zeitpunkt des Systemneustarts oder Herunterfahrens angehalten wurde, und setzt die Replikation automatisch fort, wenn sie sich in einem angehaltenen Zustand befindet.
Führen Sie die folgenden Schritte sowohl auf dem primären Server als auch auf dem Replikatserver aus:
Kopieren Sie das Skript für den automatischen Neustart der Replikation, und speichern Sie es in einem beliebigen Ordner (z. B. C:\Scripts) mit dem Dateinamen restartReplication.ps1.
Starten Sie PowerShell, und führen Sie das folgende Cmdlet aus:
PS > Set-ExecutionPolicy RemoteSigned
Hinweis
- Sie müssen das Cmdlet nicht auf einem System ausführen, das es bereits ausgeführt hat.
- PowerShell kann standardmäßig nicht auf einem System gestartet werden, das noch nie PowerShell ausgeführt hat.
Drücken Sie die Windows-Logo-Taste + X, um das Menü unten links auf dem Bildschirm anzuzeigen, und wählen Sie Computerverwaltung.
Erweitern Sie den Aufgabenplaner im linken Bereich. Wählen Sie Taskplaner-Bibliothek aus und halten Sie gedrückt (oder klicken Sie mit der rechten Maustaste), und wählen Sie dann Task erstellen aus. Das Fenster zur Erstellung von Aufgaben wird angezeigt.
Setzen Sie die folgenden Optionen auf der Registerkarte Allgemein:
- Name: Geben Sie einen Vorgangsnamen an (z. B. Hyper-V Replikat-AutoResume-Aufgabe)
- Wenn Sie die Aufgabe ausführen, verwenden Sie das folgende Benutzerkonto: Geben Sie ein Benutzerkonto mit Administratorrechten an (zum Beispiel, <Domänenname>\Administrator).
- Run only when user is logged on: Deaktivieren Sie die Option
- Unabhängig davon, ob der Benutzer angemeldet ist oder nicht ausführen: Option überprüfen
- Run with highest privileges: Option auswählen
Wählen Sie die Registerkarte Auslöser und dann Neu.
Legen Sie die folgenden Optionen fest und wählen Sie dann OK:
- Begin the task: Wählen Sie Beim Start
- Erweiterte Einstellungen>Aktiviert: Option überprüfen
Hinweis
Die anderen Optionen sind nicht ausgewählt.
Wählen Sie die Aktionen-Registerkarte und dann Neu aus.
Legen Sie die folgenden Optionen fest und wählen Sie dann OK:
- Aktion: Auswählen Ein Programm starten
- Programm/Skript: powershell.exe eingeben
- Add arguments (optional): Geben Sie den vollständigen Pfad des Auto-Restart-Skripts an (zum Beispiel C:\Scripts\restartReplication.ps1)
- Start in (optional): Lassen Sie den Wert leer
Lassen Sie die Standardeinstellungen auf den Registerkarten Bedingungen und Einstellungen unverändert und wählen Sie dann OK, um die Einstellungen abzuschließen.
Wenn die Authentifizierung auffordert, geben Sie das Administrator-Passwort ein.
Testen Sie den Betriebsstatus des Skripts
Nachdem Sie die Einstellungen für das Skript abgeschlossen haben, können Sie die folgenden Schritte ausführen, um den Betriebsstatus des Skripts auf dem primären Server zu testen.
Wählen Sie die virtuelle Maschine aus, für die die Replikation im Hyper-V-Manager des primären Servers konfiguriert ist. Wählen Sie es aus und halten Sie es gedrückt (oder klicken Sie mit der rechten Maustaste darauf), und wählen Sie dann Replikation>Replikation anhalten, um es absichtlich zu unterbrechen.
Wählen Sie die angehaltene virtuelle Maschine im Hyper-V Manager aus und dann die Registerkarte Replikation unten auf dem Bildschirm. Stellen Sie sicher, dass der ReplikationsstatusAngehalten ist.
Starten Sie den primären Server neu. Wenn er nicht neu gestartet werden kann, starten Sie den Aufgabenplaner auf dem primären Server. Wählen Sie die oben erstellte Aufgabe aus und halten Sie sie gedrückt (oder führen Sie einen Rechtsklick aus), und wählen Sie dann Run.
Das Skript wird ausgeführt, wenn das System gestartet wird oder eine manuelle Aufgabe ausgeführt wird. Um zu überprüfen, ob die Replikation automatisch neu gestartet wird, wählen Sie die angehaltene virtuelle Maschine aus dem Hyper-V-Manager auf dem primären Server aus und wählen Sie dann unten auf dem Bildschirm die Registerkarte Replikation aus. Wenn der Replikationsstatus auf Replikation aktiviert steht, hat die Replikation ihren normalen Betrieb wieder aufgenommen.
Sie können auch die Systemereignisprotokolle überprüfen, um den Betriebsstatus des Skripts zu bestätigen.
Ereignis zum Starten des Skripts
Log Name: System Source: Hyper-V Replica script Event ID: 0 Level: Information Description: Starting script to restart replication.
Ereignis zur Wiederaufnahme der Replikation
Log Name: System Source: Hyper-V Replica script Event ID: 4 Level: Information Description: Replication for <VM Name> on <Primary Server Name> was in suspended and resumed successfully.
Wenn ein Fehler wie ein Neustartfehler auftritt, wird der Fehlerinhalt im Systemereignisprotokoll mit einer Ereignisquelle namens "Hyper-V Replica-Skript" aufgezeichnet.
Skript zum automatischen Neustart der Replikation
Dies ist das Skript für den automatischen Neustart der Replikation:
$EventSource = "Hyper-V Replica script" ### Event source name recorded in system log.
$StartUpTimeout = 60 ### Startup timeout value for replication service in second.
If ([System.Diagnostics.EventLog]::SourceExists($EventSource) -eq $false)
{
New-EventLog -LogName System -Source $EventSource
}
Write-EventLog -LogName System -Source $EventSource -EntryType Information -EventID 0 -Message "Starting script to restart replication."
### Wait until VMMS starts up.
(Get-Service "vmms").WaitForStatus("Running") ### No timeout.
### Wait until replication service in VMMS gets active.
$Count = 0
While((Get-VMReplication).count -eq 0)
{
Start-Sleep -s 1
$Count++
If ($Count -eq $StartUpTimeout)
{
Write-EventLog -LogName System -Source $EventSource -EntryType Error -EventID 1 -Message "VMMS did not complete initialization after VMMS service started up. Exiting..."
Exit(1)
}
}
$Message = "Replication service in VMMS was started successfully. It took " + $Count + " seconds after VMMS started."
Write-EventLog -LogName System -Source $EventSource -EntryType Information -EventID 2 -Message $Message
###
### MAIN
###
$LocalVMs = Get-VMReplication ### Get local VMs with replication enabled.
Foreach($LocalVM in $LocalVMs)
{
$PrimaryServer = $LocalVM.PrimaryServer
$VMName = $LocalVM.Name
### Get-VMReplication will access remote primary server if this VM is RecoveryVM.
$VM = Get-VMReplication -ComputerName $PrimaryServer | Where-Object { $_.Name -eq $VMName}
If ($VM -eq $null -or $VM.count -eq 0)
{
$Message = "Get-VMReplication has failed." + $Error[0].Exception + "(VM: " + $VMName + " Server: " + $PrimaryServer + ")"
Write-EventLog -LogName System -Source $EventSource -EntryType Error -EventID 3 -Message $Message
Exit(1)
}
### If the VM is normal, move to next VM.
If ($VM.State -ne "Suspended" -and $VM.State -ne "Error") { continue }
### Resuming replication here.
$Err = Resume-VMReplication -VMName $VMName -ComputerName $PrimaryServer 2>&1
### Wait status update for 1 sec.
Start-Sleep -s 1
### Checking the replication status after resuming the replication
$CurrentVM = Get-VMReplication -ComputerName $PrimaryServer | Where-Object { $_.Name -eq $VMName}
### If the replication state is still in suspended or error, it logs to event service.
If ($CurrentVM.State -eq "Suspended" -or $VM.State -eq "Error")
{
$Message = "Failed to resume replication for " + $VMName + " on " + $PrimaryServer + ". Please check replication status manually." + $Err.Exception
Write-EventLog -LogName System -Source $EventSource -EntryType Error -EventID 3 -Message $Message
}
Else
{
$Message = "Replication for " + $VMName + " on " + $PrimaryServer + " was in suspended and resumed successfully."
Write-EventLog -LogName System -Source $EventSource -EntryType Information -EventID 4 -Message $Message
}
}