DRBD 配置可自动解决任何脑裂问题

eag*_*agr 4 drbd

我正在运行 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;
Run Code Online (Sandbox Code Playgroud)

on-suspended-primary-outdated force-secondary一些其他组合。

但我总是发现集群进入不良状态并且无法从裂脑中恢复的情况。通常我会进入StandAlone节点并force-io-failures辅助节点(因此,在主节点再次发生故障后,即使已连接,该辅助节点也将无法工作)。

考虑到我高度重视服务正常运行时间而不是避免数据丢失,我还能做些什么来提高此设置的稳健性吗?

Str*_*ils 5

过去,我曾多次尝试设置类似的集群。直到我了解到 DRBD 的设计已被破坏,并以“裂脑”作为它的第二个名字。在 DRBD9 中,情况有所好转(仅与噩梦般的 8.xx 相比),但它仍然无法在生产中使用。我只看到一种解决方案 - 节省您的时间并迁移到更可靠的解决方案。例如,头孢。

  • 即使有见证人,Ceph 也不会做 2 个节点。您至少需要 3 个节点,而生产集群建议使用 4 个节点。除了我完全同意之外,放弃 DRBD 转而使用 Ceph 似乎比尝试修复损坏的 DRBD 设置更有效。 (3认同)