![为什么 WinDRBD 变成无盘/独立(两个节点)](https://linux22.com/image/770138/%E4%B8%BA%E4%BB%80%E4%B9%88%20WinDRBD%20%E5%8F%98%E6%88%90%E6%97%A0%E7%9B%98%2F%E7%8B%AC%E7%AB%8B%EF%BC%88%E4%B8%A4%E4%B8%AA%E8%8A%82%E7%82%B9%EF%BC%89.png)
我有个问题。
目前,此操作系统是 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 合作伙伴节点,因此它认为出了问题,并且不会启动存储池来保存它并避免数据损坏。
有几种方法可以解决这个问题:
- 在控制 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
- 避免 WinDRBD 自动启动,并使用一些登录相关脚本伪自动启动它。在登录过程中,所有内核组件都已准备就绪,在最坏的情况下,您可以将不成功的驱动程序启动问题记录到某个日志文件中,对其进行分析,脚本重试等。
当然可以做到这一点,但需要对 PowerShell 进行一些调整。您可以从下面的讨论主题中获得一些很好的起点。
https://stackoverflow.com/questions/27599287/powershell-disable-and-enable-a-driver
- 使用从头开始为 Windows 设计的东西,例如 StarWind vSAN Free 或 Microsoft 自己的内置 SDS(例如 AzS HCI)。
答案3
您可能需要升级 WinDRBD 版本。您使用的版本仍是候选版本(根据您发帖的日期猜测,大概是 1.0.0-rc14)。请升级到较新的 WinDRBD。您可以在以下位置找到预编译的安装程序:
https://linbit.com/linbit-software-download-page-for-linstor-and-drbd-linux-driver/
截至撰写本文时,最新版本是 1.1.10。
如果 G:驱动器是您的后备设备,则此设置是正确的。
如果问题仍然存在,请告诉我。