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

标签 database database-replication mariadb galera

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

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

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

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

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

enter image description here

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

最佳答案

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

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

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

对于应用程序来说,整个集群似乎都宕机了。

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

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

关于database - 两个数据中心之间的 Galera 集群复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27777134/

相关文章:

sql - 理解复杂 SQL 语句的最佳方式?

java - Derby 数据库如何工作?

php - 将主数据库复制到不同的从数据库

java - 如何解决无法创建/写入文件 '/var/tmp/#sql_85b_0.MAI'错误?

mysql - 如何获取订单数子查询

php - 我想使用 PDO 将数据更新到数据库,但数据库中没有任何变化

database - 如何更改特定于一个 SID 的 Oracle 数据库中的时区,系统配置了许多 DB SID

java - 使用 Java 的 PostgreSql 复制配置

Android - Couchbase lite - 用过滤器拉 - Replication.setFilter

mysql - 单列索引与多列索引