3

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

负载平衡器用于确定哪个服务器将处理传入请求,该请求可以是四个服务器中的任何一个。

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

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

想象一下,负载均衡器开始将请求转发到两个数据中心,并且在两个数据中心中都发生了插入,这可能会在连接恢复时导致 PK 重复问题。

在此处输入图像描述

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

4

1 回答 1

6

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

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

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

对于应用程序,看起来整个集群都已关闭。

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

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

于 2015-01-06T07:23:19.770 回答