Windows Server 2016-Gäste im WSFC-Cluster werden aufgrund verlorener Heartbeat-Routen zufällig unter Quarantäne gestellt

Windows Server 2016-Gäste im WSFC-Cluster werden aufgrund verlorener Heartbeat-Routen zufällig unter Quarantäne gestellt

Ich verfüge über zwei Windows Server 2016-Gastbetriebssysteme, die von Hyper-V Server 2016 gehostet werden. Der Gastbetriebssystemcluster ist sehr unzuverlässig und einer der Knoten wird ständig unter Quarantäne gestellt (mehrmals täglich).

Ich habe auch einen Windows Server 2012R2-Cluster. Diese werden von denselben Hyper-V-Hosts gehostet und haben keinerlei Probleme. Das bedeutet, dass ich zwischen 2012R2 und 2016 dieselbe Netzwerk- und Hyper-V-Infrastruktur habe.

Weitere Konfiguration für 2016-Hosts:

  1. Unter „Netzwerkverbindungen“ ist TCP/IPv6 für alle Adapter deaktiviert.Mir ist bewusst, dass dadurch IPv6 für Cluster nicht deaktiviert wird.da es einen versteckten Netzwerkadapter von NetFT verwendet und dort IPv6 in IPv4 für Heartbeats kapselt. Ich habe die gleiche Konfiguration auf guten 2012R2-Hosts.
  2. Obwohl der 2012R2-Cluster ohne Witness wie gewünscht funktionierte, hatte ich 2016 zunächst genauso konfiguriert. Um diese Probleme zu beheben, habe ich File Share Witness zum 2016-Cluster hinzugefügt – keine Änderung.
  3. Netzwerkvalidierungsbericht erfolgreich abgeschlossen

Ich weißWASpassiert, aber ich weiß nichtWARUM. DerWAS:

  1. Der Cluster spielt Ping-Pong mit Heartbeat-UDP-Paketen über mehrere Schnittstellen zwischen beiden Knoten auf Port 3343. Pakete werden ungefähr jede Sekunde gesendet.
  2. Plötzlich hört ein Knoten auf, Ping-Pong zu spielen und antwortet nicht. Ein Knoten versucht immer noch, einen Heartbeat zu liefern.
  3. Nun, ich habe die Cluster-Protokolldatei gelesen und festgestellt, dass der Knoten das Wissen über Routinginformationen entfernt hat:
000026d0.000028b0::2019/06/20-10:58:06.832 ERR   [CHANNEL fe80::7902:e234:93bd:db76%6:~3343~]/recv: Failed to retrieve the results of overlapped I/O: 10060
000026d0.000028b0::2019/06/20-10:58:06.909 ERR   [NODE] Node 1: Connection to Node 2 is broken. Reason (10060)' because of 'channel to remote endpoint fe80::7902:e234:93bd:db76%6:~3343~ has failed with status 10060'
...
000026d0.000028b0::2019/06/20-10:58:06.909 WARN  [NODE] Node 1: Initiating reconnect with n2.
000026d0.000028b0::2019/06/20-10:58:06.909 INFO  [MQ-...SQL2] Pausing
000026d0.000028b0::2019/06/20-10:58:06.910 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 00.000 so far.
000026d0.00000900::2019/06/20-10:58:08.910 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 02.000 so far.
000026d0.00002210::2019/06/20-10:58:10.910 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 04.000 so far.
000026d0.00002fc0::2019/06/20-10:58:12.910 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 06.000 so far.
...
000026d0.00001c54::2019/06/20-10:59:06.911 INFO  [Reconnector-...SQL2] Reconnector from epoch 1 to epoch 2 waited 1:00.000 so far.
000026d0.00001c54::2019/06/20-10:59:06.911 WARN  [Reconnector-...SQL2] Timed out, issuing failure report.
...
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO  [RouteDb] Cleaning all routes for route (virtual) local fe80::e087:77ce:57b4:e56c:~0~ to remote fe80::7902:e234:93bd:db76:~0~
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO    <realLocal>10.250.2.10:~3343~</realLocal>
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO    <realRemote>10.250.2.11:~3343~</realRemote>
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO    <virtualLocal>fe80::e087:77ce:57b4:e56c:~0~</virtualLocal>
000026d0.00001aa4::2019/06/20-10:59:06.939 INFO    <virtualRemote>fe80::7902:e234:93bd:db76:~0~</virtualRemote>

Nun zum WARUM-Teil... Warum macht es das? Ich weiß es nicht. Beachten Sie, dass es sich eine Minute zuvor beschwert: Failed to retrieve the results of overlapped I/O. Aber ich kann immer noch sehen, dass UDP-Pakete gesendet/empfangen werden

Wireshark

bis die Route um 10:59:06 entfernt wurde und nur 1 Knoten pingt, aber keine Pongs hat. Wie in Wireshark zu sehen ist, gibt es in der Quellspalte keine IP 10.0.0.19 und 10.250.2.10.

Wireshark 2

Die Route wird nach etwa 35 Sekunden erneut hinzugefügt, aber das hilft nicht – der Knoten steht bereits seit 3 ​​Stunden unter Quarantäne.

Was übersehe ich hier?

Antwort1

Ich hatte gerade das gleiche Problem mit einem Windows Server 2019-Failovercluster (für Hyper-V 2019). Normalerweise deaktiviere ich auch IPv6 auf meinen Servern und das hat die Probleme verursacht. Der Cluster hat viele kritische Fehler ausgegeben und manchmal ein hartes Failover durchgeführt, obwohl auch ein File Share Witness vorhanden und funktionsfähig war(?!).

Die folgenden Fehler und Warnungen habe ich im Ereignisprotokoll beobachtet:

FailoverClustering-Ereignis-IDs:

  • 1135 (Clusterknoten „…“ wurde aus der aktiven Failovercluster-Mitgliedschaft entfernt)
  • 1146 (Der Cluster Resource Hosting Subsystem (RHS)-Prozess wurde beendet und wird neu gestartet)
  • 1673 (Clusterknoten „…“ hat den isolierten Zustand erreicht.)
  • 1681 (Virtuelle Maschinen auf Knoten „…“ sind in einen nicht überwachten Zustand gewechselt.)

Service Control Manager-Ereignis-IDs:

  • 7024 (Es war kein Quorum an Clusterknoten vorhanden, um einen Cluster zu bilden.)
  • 7031 (Der Clusterdienst wurde unerwartet beendet.)

FailoverClustering-Client

  • 81 (Erweiterte RPC-Fehlerinformationen)

Dank Ihrer Recherche habe ich einen wichtigen Hinweis erhalten: Der versteckte Adapter verwendet immer noch IPv6. Da in dem von Ihnen verlinkten Artikel stand, dass es weder empfohlen noch gängige Praxis sei, IPv6 auf dem versteckten Adapter zu deaktivieren, die Deaktivierung auf allen anderen Adaptern jedoch unterstützt und getestet wurde, habe ich mich gefragt, warum er nicht funktioniert.

Mit dem folgenden Befehl habe ich die Cluster-Protokolle abgerufen (danke auch für den Hinweis! Ich kannte diesen nützlichen Befehl nicht):

# -Destination (Folder) in my case changed to be not on the "C:\" SATADOM (this thing is slow and has few write cycles)
# -TimeSpan (in minutes) limited to one of the Failovers because these logs get HUGE otherwise.
Get-ClusterLog -Destination "E:\" -TimeSpan 5

Leider hatte ich die gleichen Protokolleinträge, die Sie bereits gepostet haben.

Ich habe IPv6 auf allen Adaptern wieder aktiviert und meine tunnelbezogenen Adapter/Konfigurationen mit Folgendem zurückgesetzt:

Set-Net6to4Configuration -State Default
Set-NetTeredoConfiguration -Type Default
Set-NetIsatapConfiguration -State Default

Das hat aber nicht geholfen... Bei näherem Hinsehen fiel mir auf, dass ich auch immer „diese nicht benötigten“ IPv6-bezogenen Firewall-Regeln deaktiviere... Und das schien die wirklich wichtige Änderung zu sein! Diese Regeln scheinen auch den unsichtbaren Adapter zu betreffen.

Der Punkt scheint zu sein: IPv6 verwendet kein ARP, um die MAC-Adressen seiner Kommunikationspartner zu finden. Es verwendet das Neighbor Discovery Protocol. Und dieses Protokoll funktioniert nicht, wenn Sie die zugehörigen Firewall-Regeln deaktivieren. Sie können die ARP-Einträge von IPv4 jedoch mit folgendem überprüfen:

arp -a

Hier werden Ihnen die MAC-Adressen für IPv6-Adressen nicht angezeigt. Für diese können Sie Folgendes verwenden:

netsh interface ipv6 show neighbors level=verbose

Wenn Sie möchten, können Sie die Ausgabe auf Ihre IPv6-Adapteradressen wie folgt filtern:

netsh interface ipv6 show neighbors level=verbose | sls ".*fe80::1337:1337:1234:4321.*" -Context 4 |%{$_.Line,$_.Context.PostContext,""}

Dabei stellte ich fest, dass diese Einträge anscheinend nur von kurzer Dauer waren. Der Status des Eintrags für die lokale Linkadresse des Microsoft "Failover Cluster Virtual Adapter" des Clusterpartners wechselte immer zwischen "Erreichbar" und "Probe". Den Moment, in dem er "Nicht erreichbar" war, habe ich allerdings nicht mitbekommen, aber nach erneuter Aktivierung der IPv6-Regeln war das Problem behoben:

Get-NetFirewallRule -ID "CoreNet-ICMP6-*" | Enable-NetFirewallRule

Irgendwie scheint diese MAC-Adresse auf andere Weise zwischen den Clusterpartnern ausgetauscht zu werden (wahrscheinlich, weil es sich um die „virtuelle Remote“-Adresse und nicht um eine echte handelt?). Sie taucht also immer wieder auf, was zu diesen wilden Failover-/Quarantäne-/Isolierungszuständen führt.

Wahrscheinlich hätte es auch geholfen, IPv6 auf dem unsichtbaren Adapter zu deaktivieren, aber da dies nicht empfohlen wird, habe ich mich nun dazu entschlossen, IPv6-bezogene Dinge überhaupt nicht mehr zu deaktivieren. Das ist sowieso die Zukunft :-)

Hoffe, dies hilft einem anderen IPv6-Deaktivierer!

verwandte Informationen