我们在两个数据中心有4台服务器。直接线连接两个数据中心。我们计划从MariaDB切换到MariaBD Gallera,因为循环复制很痛苦。
负载均衡器用于确定哪个服务器将处理传入请求,该请求可以是四个服务器中的任何一个。
我关注的是当数据中心之间的连接断开时会发生什么? 在连接恢复之前,每两个中心是否会形成一个小型集群,然后他们会再次将自己重组为一个4节点集群?
当两个数据中心之间的连接失败时,Galera如何防止可能发生的主要密钥重复问题?
想象一下,负载均衡器开始将请求转发到两个数据中心,并且插入都发生在这两个数据中心,这可能会在连接恢复时导致PK重复问题。
我曾尝试使用vmware工作站来模拟不同的情况但是我不知道如何复制这种情况。我设法创建了一个4节点复制集群,并设法取出并将节点带入集群。但是我不知道如何模拟数据中心。
答案 0 :(得分:4)
模拟您的情况的最简单方法是同时在一个数据中心中杀死2个节点。另一种可能性是同时启动防火墙规则......
Galera Cluster是一个悲观的集群。这意味着最高优先级具有数据完整性和不可用性(与M / M复制相反,后者是一个乐观集群:优先级具有可用性而非数据完整性)。
在您的情况下,Galera节点检测到缺少其他一些节点。作为下一步,您的Galera集群的每一方都会尝试查找法定人数(大多数,超过一半的成员)。这将失败,因为2个数据中心之间的链接已关闭。法定人数默认定义为“超过一半”,在您的情况下为3.无法获得法定人数(2 <3)。 然后Galera将陷入裂脑状态(非主要)并拒绝所有查询(SHOW和SET除外)。
对于应用程序,它看起来整个群集都已关闭。
由于具有2个位置或节点的此概念,因此无法拥有可靠且可用的群集。我们需要总是和奇数个节点或数据中心。
当链接回来时,Galera经常能够检测到并恢复自身。或者你必须手动将一侧用于裂脑。