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

我运行3节点多主MariaDB galera群集。 它对我来说基本上是如何工作的。 当一个节点失败时,另外两个工作就可以了。

但我想知道是否有办法让它继续在一个节点上工作? (这是真的不太可能,但我只是想知道)我知道,当没有法定人数以防止分裂大脑时,集群将失败。 我也知道,有一个节点离开集群closures。 这意味着所有的数据库连接/查询都会丢失。

我想知道是否有办法将剩下的主节点切换到单节点模式,让它工作,然后当发现失败时(停止连接到数据库的应用程序),将其他节点复位并让它们复制数据(这样没有任何东西丢失)

我知道有一种叫做虚拟法定数字的东西,但是在3个主节点的情况下这会是一个不错的select吗?

是的你可以。 当有一个节点时,它将进入只读模式,以防止脑裂。 您可以通过禁用脑分裂保护( pc.ignore_sb )来防止这种情况pc.ignore_sb 。 但是这样做意味着如果你在两个不同的服务器上存在两个节点的networking点,那么你就会冒险分裂大脑。

就我个人而言,我绝对不会这么做……这太疯狂了。 如果你不想要一个完整的堆栈的galera服务器,但是想要减less法定数量丢失的风险,只需使用garbd实现另一个节点。

简单的解决方法就是“3的规则” 。 如果你想要数据中心的可用性,你必须有三个数据中心节点相同的数量; 如果一个数据中心失败,则维护仲裁仍然意味着群集保持在线状态。 另一种想法是,如果中断可能导致超过50%的节点丢失法定人数,那么您的集群就会closures。