Blackout-Time (VM Live Migration): Unterschied zwischen den Versionen

Aus Wiki-WebPerfect
Wechseln zu: Navigation, Suche
K
Zeile 63: Zeile 63:
 
   
 
   
 
         foreach ($event in $eventsnormal) {
 
         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'

Version vom 12. Juni 2018, 14:00 Uhr

VM-Blackout-Time.png

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 (V4)

<#
 
.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,
        [ValidateSet("VMName", "BlackoutTime","TimeCreated")]
	    [String]$Sortby = "BlackoutTime"
    )
 
    process{
        $ErrorActionPreference = "SilentlyContinue"
 
        $eventsnormal = (Get-ClusterNode -Cluster $Cluster).Name | foreach {Get-WinEvent -ComputerName $_ -FilterHashtable @{LogName = 'Microsoft-Windows-Hyper-V-VMMS-Admin'; ID = 20415; StartTime = ((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; StartTime = ((Get-Date).AddDays($EventlogAge))}} | select TimeCreated, Id, Message, MachineName
 
        $HyperVNode = $events.MachineName
 
        $BOReport = @()
 
        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
            $Level = "Normal"
 
            $obj = New-Object -TypeName PSObject
            $obj | Add-Member -MemberType NoteProperty -Name VMName -Value $EventMessageVM
            $obj | Add-Member -MemberType NoteProperty -Name BlackoutTime -Value $EventMessageBlackoutTime
            $obj | Add-Member -MemberType NoteProperty -Name VMID -Value $EventMessageVMID
            $obj | Add-Member -MemberType NoteProperty -Name HyperVNode -Value $HyperVNode
            $obj | Add-Member -MemberType NoteProperty -Name TimeCreated -Value $TimeCreated
            $obj | Add-Member -MemberType NoteProperty -Name Level -Value $Level
            $BOReport += $obj
        }
 
         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
            $Level = "Critical"
 
            $obj = New-Object -TypeName PSObject
            $obj | Add-Member -MemberType NoteProperty -Name VMName -Value $EventMessageVM
            $obj | Add-Member -MemberType NoteProperty -Name BlackoutTime -Value $EventMessageBlackoutTime
            $obj | Add-Member -MemberType NoteProperty -Name VMID -Value $EventMessageVMID
            $obj | Add-Member -MemberType NoteProperty -Name HyperVNode -Value $HyperVNode
            $obj | Add-Member -MemberType NoteProperty -Name TimeCreated -Value $TimeCreated
            $obj | Add-Member -MemberType NoteProperty -Name Level -Value $Level
            $BOReport += $obj
        }
 
        $BOReport | Sort-Object -Descending $Sortby | Format-Table
    }
}