VMware vSphere HA isolation Events

Vor kurzen hatte ich die Anforderung alle VMware ESXi Hosts mit Ausfällen, egal ob PSOD oder anderer Grund, der letzten Monate zu Reporten. Dabei musste ich feststellen, dass das gar nicht so einfach war die vSphere HA isolation Events sauber nachträglich zu erfassen und den Hosts zuzuordnen. Nur mit dem vCenter, ohne weitere Hilfsmittel ist das ein enormer Aufwand.

Was ist ein vSphere HA isolation Event

In dem Fall den ich hier erfassen möchte geht es genauer um zwei Host Situation: Isolated und Failed. Diese zwei Situation bedeuten immer irgendetwas Größeres ist vorgefallen, entweder eine teilweiser oder voller Ausfall des Hosts hat stattgefunden. Dazu kommt die besondere Situation Partitioned, welche ich leider erst einmal außen vor lassen muss, da ich sie momentan nicht simulieren kann.

Isolated

Ganz kurz und oberflächlich gesagt tritt diese Situation ein, wenn der HA Master Agent in einem vSphere Cluster keine HA Informationen mehr von einem Slave Agent erhält. Um für den Master Agent einen Totalausfall des betroffenen Hosts auszuschließen, kommt zusätzlich der Datastore Heartbeat ins Spiel.

Im fdm.log des Masters ist als erstes zu sehen, dass der Netzwerk Heartbeat eines Hosts ausbleibt:

[ClusterSlave::LiveCheck] Heartbeat still pending for slave @ host-1208

Dann prüft der Master Agent auf Datastore Hearbeats des betroffenen Hosts:

[ClusterSlave::StartCheckingDatastoreHeartbeats] Starting datastore heartbeat checking for slave host-1208

Falls auch diese nicht identifiziert werden können, sind folgende Einträge im fdm.log zu finden:

[ClusterSlave::LiveCheck] Heartbeat still pending for slave @ host-1208
[ClusterSlave::LiveCheck] Timeout for slave @ host-1208

Aber nicht nur der HA Master Agent identifiziert den betroffenen Host als isoliert. Auch der Host selbst, falls nicht komplett ausgefallen, erkennt seinen Isolationszustand. Dies passiert, wenn der Host nicht mehr mit dem Master in Kontakt ist und wird dann über ICMP Ping zu den Isolationsadressen verifiziert. Der Ping zu den Isolationsadressen führt er aus, nachdem er sich selbst mangels Erreichbarkeit anderer Hosts zum Master gewählt hat.

Failed

Wenn der HA Master Agent von dem betroffenen Host weder einen Datastore noch Netzwerk Heartbeat identifizieren kann und er final auch nicht per ICMP Ping erreichbar ist gilt der Host als Dead.

Im fdm.log des Master Agent sind dann folgende Einträge zu finden:

[ClusterSlave::UnreachableCheck] Beginning ICMP pings every 1000000 microseconds to host-1208
[HostStateChange::SaveToInventory] host host-1208 changed state: Dead

Partitioned

Bei einer Partitionierung eines HA Clusters in zwei oder mehr Teile können mindestens noch zwei Hosts in jedem Segment über das Management Netzwerk kommunizieren und so je einen neuen HA Master Agent wählen. Jedes Segment hat somit seinen eigenen HA Master Agenten bis zur Bereinigung der Situation.

 

Um tiefer in das Thema vSphere HA einzusteigen kann ich nur wärmstens das kostenlose Buch von Duncan Epping empfehlen: VMware vSphere 6.0 Update 2 HA Deepdive
Zur weiteren Erläuterung der drei aufgeführten Situationen sind die Tabelle und das Diagramm im Abschnitt Fundamental Concepts sehr hilfreich. Für mehr Details zum Neustart der VMs und der eigenen Isolationserkennung ist das Kapitel Restarting Virtual Machines perfekt.

vSphere HA isolation Events auswerten

Welche Möglichkeit hab ich nun aus administrativer Sicht diese Events nachträglich noch einmal zu Reporten? VMware bietet, wie fast immer, auch zu diesem Thema einen passenden KB an: Determining if your VMware vSphere HA cluster has experienced a host failure

Für einen Report über einen längeren Zeitraum sind die ESXi und vCenter Logs im Originalzustand allerdings sehr impraktikabel. Es werden also weitere Hilfsmittel benötigt.

vRealize Operations Manager

Der VMware vRealize Operations Manager ist dafür erst einmal das naheliebendste Werkzeug, denn er führt einerseits die vSphere HA isolation Event als Warnung für den jeweiligen Host.

vRealize Operations Manager - Warnungen - vSphere HA isolation Events

Und bietet in den Ereignissen auch alle relevanten Vorkommnisse im Zeitstrahl.

vRealize Operations Manager - Ereignisse - vSphere HA isolation Events

Ich habe hier die vSphere World als Fokusobjekt gewählt und in der Ansicht alle Nachfolgeereignisse der Kategorie Hostsystem eingeblendet. Warnungstyp ist Verfügbarkeit, die Priorität Kritisch und der Ereignistyp Datenverfügbarkeit.

vRealize Log Insight

Mit vRealize Log Insight wiederum lassen sich rasend schnell alle FDM Logs der ESXi Hosts durchsuchen und so vSphere HA isolation Events bzw. eine spezielle Situation im HA Ablauf eindeutig identifizieren:

If a master host is unable to communicate directly with the agent on a slave host, the slave host does not respond to ICMP pings, and the agent is not issuing heartbeats it is considered to have failed. You see output similar to:

vRealize Log Insight - FDM - vSphere HA isolation Events

Der Host ist vom HA Master Agent als Failed identifiziert.

Ein anderer Weg zu den gleichen vSphere HA isolation Events führt über das VPXD Log des vCenter Servers.

vRealize Log Insight - VPXD- vSphere HA isolation Events

Da diese Events immer vom HA Master Agent oder dem vCenter geschrieben werden, lässt die Quelle der Logs nicht direkt auf den ausgefallenen Host schließen. Hierzu muss man die MoRef (oder in vRealize Log Insight: vmw_vc_managed_host_id) nutzen. Am einfachsten gelingt die Identifizierung über das Event „[ClusterManagerImpl::LogState] hostId=host-1234“ im FDM Log der ESXi Hosts, die Quelle dieser Events ist auch der korrekte Host.

vSphere HA isolation Events - HostID match

Die MoRef kann man aber natürlich auch per PowerCLI auflösen:

Get-VMHost | where {$_.ExtensionData.MoRef -match "71|73|67"} | select Name, @{N="MoRef";E={$_.ExtensionData.MoRef}}

PowerCLI - MoRef

VMware PowerCLI

Mit der VMware PowerCLI und dem Get-VIEventPlus Modul von Luc Dekens hat man die Möglichkeit sehr schnell, viele vCenter Events nach dem Event Typ „HA.DasHostFailedEvent“ durchsuchen und eine sauberen Report zu generieren.

$VMHost = Get-VMHost 
Get-VIEventPlus -Entity $VMHost -Start (Get-Date).AddDays(-90)-EventType "com.vmware.vc.HA.DasHostFailedEvent" | `
select CreatedTime, ObjectName, ObjectId, EventTypeId, FullFormattedMessage | ft -AutoSize

PowerCLI - vSphere HA isolation Events

Leave a Reply