为什么 WinDRBD 变成无盘/独立(两个节点)

为什么 WinDRBD 变成无盘/独立(两个节点)

我有个问题。

目前,此操作系统是 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

在此先感谢您的帮助。

答案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 使用的 NIC 的 NDIS 微端口上放置 windrbd 驱动程序的启动依赖项。

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:驱动器是您的后备设备,则此设置是正确的。

如果问题仍然存在,请告诉我。

相关内容