MariaDB 如何处理多主集群中的 2/3 节点故障。

MariaDB 如何处理多主集群中的 2/3 节点故障。

我运行 3 节点多主 MariaDB galera 集群。它对我来说基本上是按原样工作的。当一个节点发生故障时,其他两个节点可以正常工作。

但我想知道是否有办法让它继续在一个节点上工作?(这确实不太可能,但我只是想知道)我知道当没有法定人数来防止分裂脑时,集群将失败。我还知道如果只剩下一个节点,集群就会关闭。这意味着所有到数据库的连接/查询都会丢失。

我想知道是否有办法将剩下的主节点切换为单节点模式,让其工作,然后在发现故障时(停止连接到数据库的应用程序),带回其他集群节点并让它们复制数据(这样就不会丢失任何内容)

我知道有一种叫做虚拟仲裁的东西,但在 3 个主节点的情况下这是一个好的选择吗?

答案1

是的,你可以。当有一个节点时,它会进入只读状态以防止裂脑。你可以通过禁用裂脑保护 ( pc.ignore_sb) 来防止这种情况;但这样做意味着如果你有两个节点的网络故障,你就有可能在两个不同的服务器上发生裂脑。

就我个人而言,我永远不会这么做……这太疯狂了。如果你不想要一个全栈 galera 服务器,但又想降低失去仲裁的风险,那么只需实现另一个节点即可garbd

解决这个问题的简单方法是“3 法则”。如果您想要数据中心可用性,您必须拥有三个具有相同数量节点的数据中心;如果一个数据中心发生故障,您仍可维持法定人数,这意味着集群保持在线。另一种思考方式是,如果中断可能导致超过 50% 的节点失去法定人数,那么您的集群就会瘫痪。

相关内容