我正在运行 2 节点集群,其中 DRBD(主动/被动)由 drbd systemd 服务管理,并且有一个小脚本,每当资源成为主资源时就会挂载卷。
我希望以这样的方式配置 DRBD,使得它始终能够解决任何裂脑,并且始终至少有一个主节点,只要两台机器都没有宕机,它就能够在任何情况下提供服务。
我尝试了以下配置(其中pri-lost-after-sb
是 "reboot"
)
after-sb-0pri discard-younger-primary;
after-sb-1pri discard-secondary;
after-sb-2pri call-pri-lost-after-sb;
以及on-suspended-primary-outdated force-secondary
其他一些组合。
但我总是发现集群进入不良状态并且无法从裂脑中恢复的情况。通常我会进入StandAlone
节点和辅助force-io-failures
节点(因此在主节点再次发生故障后,即使连接了辅助节点,该节点也无法工作)。
考虑到我高度重视服务正常运行时间而不是避免数据丢失,我还能做些什么来提高此设置的稳健性?
答案1
过去,我曾多次尝试设置类似的集群。直到我了解到 DRBD 在设计上存在缺陷,并以“裂脑”作为其第二个名称。在 DRBD9 中,情况有所好转(仅与 8.xx 相比,后者是一场噩梦),但它仍然无法用于生产。我只看到一个解决方案 - 节省您的时间并迁移到更可靠的系统。例如,Ceph。