两个数据中心之间的 Galera 集群复制

Galera cluster replication between two data centers

我们有 4 台服务器位于两个数据中心。一条直线连接两个数据中心。我们正计划从 MariaDB 切换到 MariaBD Gallera,因为循环复制很麻烦。

A load-balancer 用于确定哪个服务器将处理传入请求,该请求可以是四个服务器中的任何一个。

我担心的是当数据中心之间的连接中断时会发生什么情况? 是否每两个中心组成一个迷你集群,直到连接恢复,然后它们重新组织成一个 4 节点集群?

Galera如何防止两个数据中心之间连接失败时可能出现的主键重复问题?

假设 load-balancer 开始将请求转发到两个数据中心,并且在两个数据中心都发生插入,这可能会导致连接恢复时出现 PK 重复问题。

我尝试使用 vmware station 模拟不同的情况,但是我不知道如何复制这种情况。我设法创建了一个 4 节点复制集群,并设法取出节点并将节点带入集群。但是我不知道如何模拟数据中心。

模拟您的情况的最简单方法是同时杀死一个数据中心中的 2 个节点。另一种可能性是同时启动防火墙规则...

Galera Cluster 是一个悲观的集群。这意味着最高优先级具有数据完整性而不是可用性(与 M/M 复制相反,这是一个乐观的集群:优先级具有可用性而不是数据完整性)。

在您的情况下,Galera 节点检测到缺少其他一些节点。作为下一步,你的 Galera 集群的每一方都试图找到一个法定人数(多数,超过一半的成员)。这将失败,因为 2 个数据中心之间的 link 已关闭。 Quorum 默认定义为 "more than half",在您的情况下为 3。任何一方都无法达到 Quorum (2 < 3)。 然后 Galera 将陷入裂脑状态(非主要)并拒绝所有查询(SHOW 和 SET 除外)。

对于应用程序来说,整个集群似乎都已关闭。

由于这个具有 2 个位置或节点的概念,不可能有一个可靠且可用的集群。我们总是需要奇数个节点或数据中心。

当 link 回来时,Galera 通常能够检测到这一点并自行恢复。或者您必须手动将一侧从裂脑中取出。