我有个问题。
目前,此操作系统为 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 合作伙伴节点,因此它假定出现问题并且不会启动存储池来保护它并避免数据损坏。
有几种方法可以解决这个问题:
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
这当然可以完成,但需要对 PowerShell 进行一些修改。您可以从下面的讨论线程中获得一些好的起点。
https://stackoverflow.com/questions/27599287/powershell-disable-and-enable-a-driver
https://www.starwindsoftware.com/starwind-virtual-san-free
https://docs.microsoft.com/en-us/azure-stack/hci/overview