Drbd

為什麼 WinDRBD 變成 Diskless/StandAlone(兩個節點)

  • October 25, 2021

我有個問題。

目前,此作業系統為 Windows Server 2019。卷配置為 Raid-5。兩台伺服器通過心跳網路連接 兩個節點都使用 WinDRBD 進行鏡像。兩個節點具有相同的配置。我留下了未格式化的 G: 並將 D: 設置為對主節點可見。

我的資源在下面

include "global_common.conf";

resource "foo" {
   protocol    A;

   net {
       use-rle no;
   }
   on node1 {
       address     XXX.XXX.XXX.XXX:7600;
       node-id 1;
       volume 1 {
           disk        "G:";
           device      minor 1;
           meta-disk   internal;
       }
   }
   on node2 {
       address     XXX.XXX.XXX.XXX:7600;
       node-id 2;
       volume 1 {
           disk            "G:";
           device      minor 1;
           meta-disk   internal;
       }
   }
}

兩個節點都正常工作。測試是通過轉換角色來完成的。(初級→次級/次級→初級)

但是,問題出現在啟動後。

啟動後,狀態顯示如下。(兩個節點)

foo role:Secondary
 volume:1 disk:Diskless
 node2 connection:StandAlone

我想了很多,搜尋了很多,但找不到答案。

有幾件事我很懷疑。

我想知道是不是因為我在將 G: 字母分配給驅動器之前嘗試過。如果我的想法是正確的,是否有解決方法?

如果是現在我的看法,但是上面的問題還是繼續出現,那是什麼原因呢?

一旦通過以下方式解決。但我想找到原因並準確修復它。

drbdadm down foo
drbdadm up foo

在此先感謝您的幫助。

WinDRBD 失去心跳,導致您看到的問題。切斷 h/b 的電線,您將輕鬆重現該問題。寫在牆上:至少現在不要在生產中使用 WinDRBD。很脆弱。

@BaronSamedi1958 實際上有一點:WinDRBD 不是原生 Windows 解決方案,它是在模擬 Linux 核心 API 的包裝器的幫助下公然從 Linux 移植到 Windows 的。

https://linbit.com/windrbd-replicated-disk-drives-for-windows/

“從技術上講,WinDRBD Windows 驅動程序包含一個薄的 Linux 兼容層,它模擬 Windows 平台的 DRBD 驅動程序使用的 Linux 核心 API。在這一層內,原始 DRBD 引擎(帶有一些特定於編譯器的更新檔)正在工作。 “

結果,WinDRBD 對它在做什麼以及正在發生什麼一無所知。在初始化時,它嘗試建立與夥伴節點的網路連接並失敗,因為…在 Windows 核心生態系統中,儲存堆棧在網路堆棧完全啟動並執行之前啟動!WinDRBD 無法 ping 合作夥伴節點,因此它假定出現問題並且不會啟動儲存池來保護它並避免數據損壞。

有幾種方法可以解決這個問題:

  1. 將 windrbd 驅動程序的啟動依賴項放在控制 WinDRBD 使用的 NIC 的 NDIS 微型埠上。

https://docs.microsoft.com/en-us/windows-hardware/drivers/install/specifying-driver-load-order

實際上,這是一種不穩定的方式,因為更改網路適配器會破壞配置。+ NDIS 微型埠上方有一大堆驅動程序,例如 NDIS 過濾器(防火牆?)、NDIS 協議驅動程序(TCP/IP?)等,您不太了解,您將不得不使用您可能會使用的特殊工具進行遍歷不熟悉。

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/ndis-driver-stack

  1. 避免自動啟動 WinDRBD 並使用一些與登錄相關的腳本來偽自動啟動它。在登錄過程中,所有核心組件都準備好了,在最壞的情況下,您可以將不成功的驅動程序啟動問題記錄到一些日誌文件中,對其進行分析,腳本重試等等。

這當然可以完成,但需要對 PowerShell 進行一些修改。您可以從下面的討論執行緒中獲得一些好的起點。

https://stackoverflow.com/questions/27599287/powershell-disable-and-enable-a-driver

  1. 從頭開始使用為 Windows 設計的東西,例如 fe StarWind vSAN Free 或 Microsoft 自己的內置 SDS,比如 AzS HCI。

https://www.starwindsoftware.com/starwind-virtual-san-free

https://docs.microsoft.com/en-us/azure-stack/hci/overview

引用自:https://serverfault.com/questions/1076494