SymmetricDS 多节点组复制

Posted

技术标签:

【中文标题】SymmetricDS 多节点组复制【英文标题】:SymetricDS Multi-NodeGroup Replication 【发布时间】:2020-12-01 01:01:42 【问题描述】:

在 SymmetricDS 中,多年来我们一直在成功地从主节点复制到子节点,从子节点到主节点。我们现在需要从主服务器复制到主服务器(镜像),其中后一个主服务器是一个镜像报告数据库。请记住,主/子关系之间的某些表是异步的。当我们为 master 构建 SymmetricDS 配置时,我们会看到成功的初始加载。我们还看到 master --> mirror 之间的成功复制。我们无法解决的是 child --> master --> mirror 之间的复制。像往常一样,发生在子节点上的任何更改都会复制到主节点,但不会移动到镜像中。如果更改直接发生在主服务器上,则更新镜像。我们两者都需要。

【问题讨论】:

对称服务器 3.7.2,mysql 5.7.21 由于某种原因,SymmetricDS 中的 sym_node 表包含一个 node_group_id 列。由于 sym_node 列是唯一的,因此这要求一个节点只能分配给一个节点组。从表面上看,这似乎非常有限,例如,一个节点应该能够包含在多个节点组(主子/主镜像)中。 【参考方案1】:

按照双向同步https://www.jumpmind.com/downloads/symmetricds/doc/3.10/html/user-guide.html#_bi_directional_synchronization一章中的说明配置传入批次的同步

【讨论】:

我不相信双向是答案。如果 master 从 child_1 接收数据,则需要复制到其 master 镜像(一种方式),而不是复制回 child_1。我不希望 child_1 接收它自己的数据,也不希望 child_2、3、4 等接收 child_1 数据。除了主镜像不接收 child_x 数据之外,这可以完美地工作。 双向同步不包括要转发到的数据源。来自所有子节点的正确路由数据将仅同步到镜像。需要帮助来创建这样的路由表达式?【参考方案2】:

我相信我找到了解决方法。在 sym_data 中记录了 node_id 以防止循环。该值表示一个子节点。镜像主节点与子节点没有联系或关系,因此当主触发器触发时,它会记录子节点,因此主镜像忽略它。如果我修改触发器以硬编码结果中的主节点而不是子节点,则主镜像然后处理结果。同样,我认为 SymmetricDS 在 sym_node 表方面存在限制,因为它不应该需要 node_group_id(应该允许一个节点加入许多 node_groups)。

【讨论】:

以上是关于SymmetricDS 多节点组复制的主要内容,如果未能解决你的问题,请参考以下文章

MySQL手记20 -- MySQL Group Replication(MGR组复制)

MySQL 多站点集群中如何选择数据节点 - 它是不是基于节点组中数据节点的地理邻近性

Lamp架构——mysql集群及组复制

mysql主从之多线程复制

多主复制的适用场景-多IDC

在多焦点 d3 力布局中重新定位节点