WSFC 群集中的 Windows Server 2016 來賓因為丟棄偵測訊號路由而隨機隔離

WSFC 群集中的 Windows Server 2016 來賓因為丟棄偵測訊號路由而隨機隔離

有 2 個由 Hyper-V Server 2016 託管的來賓 Windows Server 2016 作業系統。

我還有 Windows Server 2012R2 叢集。它們由相同的 Hyper-V 主機託管,沒有任何問題。這意味著我在 2012R2 和 2016 之間擁有相同的網路和 Hyper-V 基礎設施。

2016 主機的進一步配置:

  1. 在網路連線中,所有適配器的 TCP/IPv6 均未選取。我知道這實際上不會禁用叢集的 IPv6因為它使用 NetFT 的隱藏網路適配器,並將 IPv6 封裝在 IPv4 中以用於心跳。我在好的 2012R2 主機上有相同的配置。
  2. 儘管 2012R2 叢集在沒有 Witness 的情況下按照我想要的方式工作,但我最初對 2016 進行了相同的配置。為了解決這些問題,我將文件共享見證添加到 2016 集群中 - 沒有任何變化。
  3. 網路驗證報告成功完成

我知道什麼發生了,但不知道為什麼。這什麼

  1. 叢集透過連接埠 3343 上兩個節點之間的多個介面與心跳 UDP 封包打乒乓球。每一秒。
  2. 突然,1 個節點停止打乒乓球並且沒有回應。一個節點仍然嘗試傳遞心跳。
  3. 好吧,我閱讀叢集日誌檔案發現節點刪除了路由資訊知識:
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>

現在是為什麼部分...為什麼要這樣做?我不知道。請注意,它提前一分鐘抱怨:Failed to retrieve the results of overlapped I/O。但我仍然可以看到正在發送/接收的 UDP 資料包

Wireshark

直到該路由在 10:59:06 被刪除,並且只有 1 個節點 ping,但沒有 pong。在wireshark中可以看到,來源列中沒有IP 10.0.0.19和10.250.2.10。

線鯊2

約 35 秒後會重新新增路由,但這並沒有幫助 - 該節點已被隔離 3 小時。

我在這裡缺少什麼?

答案1

我剛剛在 Windows Server 2019 故障轉移叢集(適用於 Hyper-V 2019)上遇到了相同的問題。我通常也會在我的伺服器上停用 IPv6,這導致了問題。即使檔案共享見證也已就位並正在工作(?!),叢集仍會引發大量嚴重錯誤,有時會進行硬故障轉移。

我在事件日誌中觀察到的錯誤和警告是:

故障轉移叢集事件 ID:

  • 1135(叢集節點「....」已從活動故障轉移叢集成員資格中刪除)
  • 1146(叢集資源託管子系統(RHS)進程已終止並將重新啟動)
  • 1673(叢集節點「....」已進入隔離狀態。)
  • 1681(節點「...」上的虛擬機器已進入不受監控的狀態。)

服務控制管理員事件 ID:

  • 7024(不存在形成集群的集群節點法定數量。)
  • 7031(群集服務服務意外終止。)

故障轉移叢集客戶端

  • 81(擴展RPC錯誤訊息)

感謝您的研究,我得到了一個重要線索:隱藏的適配器仍然使用 IPv6。由於您連結的文章說不建議或主流在隱藏適配器上停用 IPv6,但支援並測試了在所有其他適配器上停用 IPv6,我想知道是什麼阻止了他工作。

使用以下命令我提取了集群日誌(也感謝您的提示!我不知道這個有用的命令):

# -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

不幸的是,我有與您已經發布的相同的日誌條目。

我在所有適配器上重新啟用了 IPv6,並使用以下命令恢復了與隧道相關的適配器/配置:

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

但這並沒有解決問題...進一步看,我注意到我也總是禁用“那些不需要的”IPv6 相關防火牆規則...這似乎是真正重要的更改!這些規則似乎也會影響隱形適配器。

事情似乎是這樣的:IPv6 不使用 ARP 來尋找其通訊夥伴的 MAC 位址。它使用鄰居發現協議。如果停用關聯的防火牆規則,此協定將不起作用。您可以使用下列指令檢查 IPv4 ARP 條目:

arp -a

這不會顯示 IPv6 位址的 MAC 位址。對於那些你可以使用:

netsh interface ipv6 show neighbors level=verbose

如果需要,您可以將輸出過濾到 IPv6 適配器位址,如下所示:

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

這樣做我發現,這些條目似乎壽命很短。群集夥伴的 Microsoft「故障轉移群集虛擬適配器」連結本機位址的項目狀態始終在「可存取」和「偵測」之間切換。雖然我沒有看到它「無法存取」的那一刻,但在重新啟用 IPv6 規則後,問題就消失了:

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

不知何故,這個 MAC 位址似乎在叢集夥伴之間以另一種方式交換(可能是因為它是「虛擬遠端」位址而不是真實位址?)。因此它不斷重新出現,導致那些瘋狂的故障轉移/隔離/隔離狀態。

也許在不可見適配器上停用 IPv6 也會有所幫助,但由於不建議這樣做,所以我現在決定完全停止停用與 IPv6 相關的內容。無論如何,這就是未來:-)

希望這對其他 IPv6 禁用者有所幫助!

相關內容