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

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

我有個問題。

目前,該作業系統是 Windows Server 2019。兩台伺服器透過心跳網路連線 兩個節點均使用 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

在此先感謝您的幫忙。

答案1

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

答案2

@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 設計的東西,例如 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

答案3

您可能想要升級 WinDRBD 版本。您使用的版本仍然是候選版本(1.0.0-rc14 左右,從您發布的日期猜測)。請升級到較新的 WinDRBD。您可以在以下位置找到預編譯的安裝程式:

https://linbit.com/linbit-software-download-page-for-linstor-and-drbd-linux-driver/

截至撰寫本文時,最新版本是 1.1.10。

如果 G: 驅動器是您的後備設備,則此設定是正確的。

如果問題仍然存在,請告訴我。

相關內容