Blackout-Time (VM Live Migration): Unterschied zwischen den Versionen
Aus Wiki-WebPerfect
Admin (Diskussion | Beiträge) K |
Admin (Diskussion | Beiträge) |
||
Zeile 44: | Zeile 44: | ||
Function Get-LiveMigrationBlackoutTime { | Function Get-LiveMigrationBlackoutTime { | ||
[CmdletBinding()] | [CmdletBinding()] | ||
− | + | ||
param( | param( | ||
[Parameter(Position=0,mandatory=$true)][string] $Cluster, | [Parameter(Position=0,mandatory=$true)][string] $Cluster, | ||
[Parameter(Position=1,mandatory=$true)][int] $EventlogAge | [Parameter(Position=1,mandatory=$true)][int] $EventlogAge | ||
) | ) | ||
− | + | ||
process{ | process{ | ||
$ErrorActionPreference = "SilentlyContinue" | $ErrorActionPreference = "SilentlyContinue" | ||
− | + | ||
− | $ | + | $eventsnormal = (Get-ClusterNode -Cluster $Cluster).Name | foreach {Get-WinEvent -ComputerName $_ -FilterHashtable @{LogName = 'Microsoft-Windows-Hyper-V-VMMS-Admin'; ID = 20415}} | ? {$_.TimeCreated -ge ((get-date).AddDays($EventlogAge))} | select TimeCreated, Id, Message, MachineName |
+ | $eventscritical = (Get-ClusterNode -Cluster $Cluster).Name | foreach {Get-WinEvent -ComputerName $_ -FilterHashtable @{LogName = 'Microsoft-Windows-Hyper-V-VMMS-Admin'; ID = 20417}} | ? {$_.TimeCreated -ge ((get-date).AddDays($EventlogAge))} | select TimeCreated, Id, Message, MachineName | ||
$HyperVNode = $events.MachineName | $HyperVNode = $events.MachineName | ||
− | + | ||
$table = New-Object system.Data.DataTable “$TableName” | $table = New-Object system.Data.DataTable “$TableName” | ||
− | + | ||
$spalte1 = New-Object system.Data.DataColumn VM,([string]) | $spalte1 = New-Object system.Data.DataColumn VM,([string]) | ||
$spalte2 = New-Object system.Data.DataColumn BlackoutTime,([double]) | $spalte2 = New-Object system.Data.DataColumn BlackoutTime,([double]) | ||
Zeile 64: | Zeile 65: | ||
$spalte4 = New-Object System.Data.DataColumn HyperVNode,([string]) | $spalte4 = New-Object System.Data.DataColumn HyperVNode,([string]) | ||
$spalte5 = New-Object System.Data.DataColumn TimeCreated,([string]) | $spalte5 = New-Object System.Data.DataColumn TimeCreated,([string]) | ||
− | + | ||
$table.columns.add($spalte1) | $table.columns.add($spalte1) | ||
$table.columns.add($spalte2) | $table.columns.add($spalte2) | ||
Zeile 70: | Zeile 71: | ||
$table.columns.add($spalte4) | $table.columns.add($spalte4) | ||
$table.columns.add($spalte5) | $table.columns.add($spalte5) | ||
− | + | ||
− | + | ||
− | foreach ($event in $ | + | foreach ($event in $eventsnormal) { |
$EventMessageVM = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$1' | $EventMessageVM = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$1' | ||
$EventMessageBlackoutTime = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$2' | $EventMessageBlackoutTime = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$2' | ||
Zeile 78: | Zeile 79: | ||
$HyperVNode = $event.MachineName | $HyperVNode = $event.MachineName | ||
$TimeCreated = $event.TimeCreated | $TimeCreated = $event.TimeCreated | ||
− | + | ||
+ | $row = $table.NewRow() | ||
+ | $row.VM = $EventMessageVM | ||
+ | $row.BlackoutTime = $EventMessageBlackoutTime | ||
+ | $row.VMID = $EventMessageVMID | ||
+ | $row.HyperVNode = $HyperVNode | ||
+ | $row.TimeCreated = $TimeCreated | ||
+ | $table.Rows.Add($row) | ||
+ | } | ||
+ | |||
+ | foreach ($event in $eventscritical) { | ||
+ | $EventMessageVM = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$1' | ||
+ | $EventMessageBlackoutTime = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$2' | ||
+ | $EventMessageVMID = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$3' | ||
+ | $HyperVNode = $event.MachineName | ||
+ | $TimeCreated = $event.TimeCreated | ||
+ | |||
$row = $table.NewRow() | $row = $table.NewRow() | ||
$row.VM = $EventMessageVM | $row.VM = $EventMessageVM |
Version vom 20. April 2018, 14:59 Uhr
Inhaltsverzeichnis
[Verbergen]Beschreibung
Live Migration
Folgende Punkte sind die chronilogische Abfolge einer Live Migration:
- Establish connection between source and target computer
- Transfer VM configuration and device information
- Transfer VM memory
- Suspend source VM and transfer state
- Resume target VM
Das Ziel ist es kein TCP/IP Timeout zu bekommen.
Blackout-Time
Die Blackout-Time ist die Zeit zwischen der, der Hyper-V Host die Source-VM stoppt, den State transferiert und die Target-VM "startet". (Siehe Bild auf der rechten seite.) Die Blackout-Time einer VM entsteht bei einer Live Migration und ist im EventLog des Hyper-V Nodes unter dem Provider Microsoft-Windows-Hyper-V-VMMS-Admin ersichtlich.
Blackout-Time per PowerShell-Skript abfragen
<# .SYNOPSIS Für Troubleshooting-Zwecke von Blackout-Zeiten während Live-Migrationen .DESCRIPTION Mit diesem Skript kann man alle Blackout-Zeiten während Live-Migrationen innerhalb eines Cluster filtern. .NOTES Author: Robin Hermann .LINK http://wiki.webperfect.ch .EXAMPLE Get-LiveMigrationBlackoutTime -Cluster <ClusterName> -EventLogAge -7 Dieses Beispiel zeigt alle Blackout-Zeiten während Live-Migrationen der letzten 7 Tage an. #> Function Get-LiveMigrationBlackoutTime { [CmdletBinding()] param( [Parameter(Position=0,mandatory=$true)][string] $Cluster, [Parameter(Position=1,mandatory=$true)][int] $EventlogAge ) process{ $ErrorActionPreference = "SilentlyContinue" $eventsnormal = (Get-ClusterNode -Cluster $Cluster).Name | foreach {Get-WinEvent -ComputerName $_ -FilterHashtable @{LogName = 'Microsoft-Windows-Hyper-V-VMMS-Admin'; ID = 20415}} | ? {$_.TimeCreated -ge ((get-date).AddDays($EventlogAge))} | select TimeCreated, Id, Message, MachineName $eventscritical = (Get-ClusterNode -Cluster $Cluster).Name | foreach {Get-WinEvent -ComputerName $_ -FilterHashtable @{LogName = 'Microsoft-Windows-Hyper-V-VMMS-Admin'; ID = 20417}} | ? {$_.TimeCreated -ge ((get-date).AddDays($EventlogAge))} | select TimeCreated, Id, Message, MachineName $HyperVNode = $events.MachineName $table = New-Object system.Data.DataTable “$TableName” $spalte1 = New-Object system.Data.DataColumn VM,([string]) $spalte2 = New-Object system.Data.DataColumn BlackoutTime,([double]) $spalte3 = New-Object system.Data.DataColumn VMID,([string]) $spalte4 = New-Object System.Data.DataColumn HyperVNode,([string]) $spalte5 = New-Object System.Data.DataColumn TimeCreated,([string]) $table.columns.add($spalte1) $table.columns.add($spalte2) $table.columns.add($spalte3) $table.columns.add($spalte4) $table.columns.add($spalte5) foreach ($event in $eventsnormal) { $EventMessageVM = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$1' $EventMessageBlackoutTime = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$2' $EventMessageVMID = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$3' $HyperVNode = $event.MachineName $TimeCreated = $event.TimeCreated $row = $table.NewRow() $row.VM = $EventMessageVM $row.BlackoutTime = $EventMessageBlackoutTime $row.VMID = $EventMessageVMID $row.HyperVNode = $HyperVNode $row.TimeCreated = $TimeCreated $table.Rows.Add($row) } foreach ($event in $eventscritical) { $EventMessageVM = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$1' $EventMessageBlackoutTime = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$2' $EventMessageVMID = $event.message -replace ".*\'(.*)\'.*blackout time of (.+) seconds \(VMID (.*)\).", '$3' $HyperVNode = $event.MachineName $TimeCreated = $event.TimeCreated $row = $table.NewRow() $row.VM = $EventMessageVM $row.BlackoutTime = $EventMessageBlackoutTime $row.VMID = $EventMessageVMID $row.HyperVNode = $HyperVNode $row.TimeCreated = $TimeCreated $table.Rows.Add($row) } $table | sort BlackoutTime -Descending | format-table -AutoSize } }