数据库迁移 | DBMotion v23.04 支持异地多活

news2025/1/18 10:52:44

Squids DBMotion新版本支持异地多中心双活同步了。异地多活支持业务在多个数据中心同时操作数据库,能极大地提升高可用性、容错性和用户体验。其中最关键的技术,无疑是数据同步、同步防环和数据冲突解决。Squids DBMotion通过复制数据打标和预置冲突策略,解决了异地多活的数据同步关键问题。

假设你是一个MySQL DBA,你们公司有三个机房:北京、广州和上海。领导要求你提供一个解决方案:让每个地区的客户都就近访问本地的数据库,华北的客户数据存储在北京的数据库,华东的客户数据存储在上海的数据库,华南的客户数据存储在广州的数据库上。这些数据库的数据需要能相互同步,保证数据一致,以便华北的用户出差到上海以后可以就近访问上海数据库上的数据(这些数据是华北这个客户的数据从北京同步到上海的),在上海出差产生的数据同样应该同步回北京。这样客户出差回北京以后,他可以继续访问和更新“最新”的数据。

对应的,你就需要搭建一个异地多活架构来实现数据的就近访问和同步。简单的示意图如下:

这里有两个关键技术问题需要解决:

  • 业务在多个中心产生的变更相互同步,会产生循环复制,如何同步防环

  • 在多个中心更新数据会有数据冲突,怎么检测冲突和解决冲突

接下来,将用以上案例来分析一下问题所在,介绍以DBMotion作为第三方工具的解决方案

01 同步防环

如前所述,华北、华东和华南三中心关键的就是要实现双向同步,保证业务在一个中心写的数据可以复制到另外一个中心

数据库原生提供的复制,有些是可以搭建双向复制的,但是这种方式只能做到实例级别同步(无法支持表级别过滤或者做对象名映射)、无法定制化修改(需要有内核修改能力并且修改后必须暂停业务以升级数据库),监控和管理不直观(命令行式,操作不便)。一般使用专业的双向同步工具或者其他第三方工具来实现,以保证易用性、易维护性,提供定制化修改和监控管理功能。

DBMotion实现了MySQL和openGauss的双向同步,它不依赖于数据库原生的复制,采用独立的cdc解析模块从源库中获取重做日志并解析,通过sink模块将源库中的变更并行应用到目标库

如下图所示,如果不做特殊处理,将会出现循环复制的问题。

还是以MySQL为例,上图中两个MySQL实例分别位于华东中心和华南中心,如果通过DBMotion做双向同步,那么在华东中心插入一行数据,通过DBMotion在华南回放,也会插入一行数据;但是反向的DBMotion解析到这条insert的数据,又会将它同步回华东中心。也就产生了循环复制,如果是无主键表,insert不产生唯一约束冲突,这个insert将在华东和华南永续循环复制下去。

DBMotion采用的是类似于server-id打标的方式,对写入华南中心的时候对日志进行标记, 保证DBMotion写入的数据,在DBMotion日志解析的时候能够被认出来,避免数据被复制回华东中心

扩展到多中心后,DBMotion会做额外的处理。在华东中心把从华北中心复制过来的数据和业务所请求的数据统一标记成region1。那么,在华南中心复制过来的业务数据没有标记,而从华东中心复制过来的数据都有标记,就可以将打标的更新成功过滤。

当然,这种同步还是避免不了用户故意搭建的环形复制链路产生循环复制,所以DBMotion支持的异地多活,目前只能支持树形复制,类似于下图的结构。在region-id=6的数据库上插入一笔数据,通过DBMotion同步到region-id=2的节点时,会将2标记为同步到region-id为1和5的节点,并且从1和5同步回来时会自动被过滤掉,之后会依次被同步到3,4;7;8。

总之,“同步防环”可以解决一条更新在多个中心上循环复制的问题,异地双活的关键技术难点“循环复制”,可以通过打标忽略的方式解决

02 冲突检测和解决

异地多活又称为单元化,前提是业务可以单元化,让客户同时只在一个单元上操作。

如前文中提到的,北京的用户无论是在北京还是在上海,只会在不同的时间点更新自己的数据,不会出现在多个中心同时更新同一笔数据的情况。如果需要在同时在同一个时间点更新同一个数据,如北京和上海的用户同时汇款给广州的客户,就可能同时对广州的客户账户有两个增加余额的操作。

这种同时在多中心操作同一笔数据的方式,需要在业务上严格避免,或在业务架构上使用集中式架构,在同一个中心应对所有单元的更新请求;或对业务进行单元化分拆

另外,复制延迟也有可能导致冲突,例如北京的客户出差到了上海来更新自己的数据,此时在北京的部分更新还没有同步到上海,那么也会出现类似于两边同时写同一份数据的冲突。

上述数据冲突的问题,都必须在业务或者说在数据库的上层解决。通过数据同步将数据已经写入到数据库后,数据冲突在“下层”是无法解决的,只能检测冲突,提醒客户有冲突发生,并提供相关的冲突解决策略去辅助客户解决这个问题。

DBMotion通过匹配前镜像和后镜像更新报错来发现冲突,目前提供两种机制来处理冲突

  1. 复制链路可以指定冲突错误忽略列表,用户可以指定对部分冲突报错直接忽略报错,类似于MySQL的replica_skip_errors错误。例如:用户需要对Duplicate Key报错进行忽略,可以直接在冲突错误忽略列表中增加1062错误。

  2. 复制检测到冲突后,可以按照复制冲突策略来自动处理冲突

DBMotion复制检测到冲突,目前有三种冲突解决策略可以指定:

  • 报错:DBMotion在检测到冲突以后会报错停止,配合短信和邮件报警。用户收到报错后可以查看并手工解决冲突,点“继续”会让DBMotion断点续传从上次报错的位置继续同步。

  • 忽略:DBMotion在检测到冲突后,只会在日志中记录冲突,忽略错误并继续同步。

  • 覆盖:DBMotion会直接以主键或者唯一键对目标库进行覆盖,保证目标库和源库一致,继续同步。

综上,冲突检测和解决是异地多活面临的通用问题,需要在业务架构上尽量避免。DBMotion在数据库同步的时候提供了两种机制,三种策略来辅助客户检测冲突和设置冲突解决策略

03 总结

DBMotion作为第三方工具采用统一的方案解决了循环复制和冲突检测的问题,为MySQL和openGauss在异地多活场景下提供了较完整的数据库同步解决方案

目前DBMotion已经在Squids上线,开始为客户提供异地、跨云的数据库多活业务访问,能帮助客户进一步保证业务的就近访问、降低可用性成本、提升用户体验。

全新的功能,想先人一步使用吗?

赶紧上Squids体验吧!

SaaS产品,永久免费使用:squids.cn/product/dbmotion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/470449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生产凭证补传操作步骤

凭证包文件包含:身份证正面、身份证背面、拍照图片、身份证头像图片、联网核查文件、签名文件、签名轨迹文本、凭证json文件。 一、证件信息重复或者模糊。 1.提供业务流水号、证件信息。 2.将证件信息通过安全U盘导入生产机。 3.根据业务流水号前8位设备号及业务流…

电信及互联网行业数据安全内控审计建设实践 | 盾见

文|龚磊 伴随数据安全“五法一典”出齐,2021年成为我国数据安全元年。各地、各行业不断加快数据安全政策体系的完善与落地执行。政企机构不断强化数据安全建设,共同助力网络安全行业高景气度维系。 2021年6月,网络安全等保测评报告模板新版发…

计算机网络学习02

1、TCP 与 UDP 的区别? 是否面向连接 : UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。是否是可靠传输: 远地主机在收到 UDP 报文后&…

《2023中国企业数智化转型升级服务全景图/产业图谱1.0版》重磅发布

‍ 数据猿出品 本次“数据猿2023年度三大媒体策划活动——《2023企业数智化转型升级服务全景图/产业图谱1.0版》”的发布,是数据猿在2022年3.0版本的基础上,迭代升级的2023开年的第一个版本。本年度下一次版本迭代将于2023年8月底发布2023年2.0版&#x…

Java学习18(Java内存区域详解)

对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C程序开发程序员这样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一…

前端web3入门脚本二:初探dex,在dex完成一笔swap

前言 现在市面上大多数去中心化交易所(简称dex)都是fork的uniswap的代码,名气比较大的如eth上的sushi 以及 bsc上的pancake。博主这里说的都是V2,uniswapV3在这里不做讨论。那么知道了他们的代码都是来自同一父亲之后,…

Python每日一练(20230428)

目录 1. 最长有效括号 🌟🌟🌟 2. 矩阵中的最长递增路径 🌟🌟🌟 3. 回文链表 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练…

考研操作系统2.3节 同步与互斥(这节有必要多复习)

2.2 实现缓冲区互斥的基本方法 软件实现方法 硬件实现方法 2.3.3 互斥锁 下面用互斥锁解决经典同步问题 2.3.4 信号量 经典同步问题(做大题再看) 2.3节选择题 皮特森算法:flag实现互斥,turn避免饥饿,选D x1 2 2 1 …

C/C++每日一练(20230428) 二叉树专场(6)

目录 1. 不同的二叉搜索树 🌟 2. 二叉树的锯齿形层序遍历 🌟🌟 3. 二叉树的右视图 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

如何做好采购计划和库存管理?

“销售计划不专业且不稳定”“准确性低” “目前只按照过往销量和采购周期做安全库存,但欠货和滞销依然严重” 题主的问题其实蛮有代表性的, 也是传统采购和库存管理常常面临的问题: ① 前后方协作困难 采购/销售/财务工作相互独立&#x…

【软件测试】测试分类

文章目录 🌷 1. 按测试对像划分⭐️ (1)界面测试⭐️ (2)可靠性测试⭐️ (3)容错性测试⭐️ (4)文档测试⭐️ (5)兼容性测试⭐️ (6&a…

Word论文自动化排版

论文的总体结构包含了标题、正文、子标题、图形、公式、算法、表格、参考文献等子结构。在利用Word进行论文排版时常常遇到这些困难:(1)论文的各子结构的格式非常难以做到统一,而且一旦某一子结构的格式需要修改,则需要…

量子计算的崛起:量子安全技术将成为下一代网络安全的基石?

第一章:引言 量子计算作为一种新型计算模式,与传统计算机相比具有许多优势。传统计算机使用的是二进制系统,即只有0和1两种状态,而量子计算机利用量子比特(qubit)的特殊性质进行计算。量子比特可以同时处于…

Mysql数据库的备份恢复

最近正在做一个异地数据的定期同步汇总工作,涉及到的数据库主要是Mysql数据库,用于存储现场的一些IOT采集的实时数据,所以做了以下备份恢复测试,现场和总部网络可定期联通,但速度有限,因此计划采用备份恢复…

11【Sass语法介绍-导入】

1.前言 在 CSS 中我们可以通过 import 来导入一个样式文件,Sass 扩展了 CSS 的 import 规则,使得可以导入 CSS 后缀的样式文件和 Scss 后缀的样式文件,并且提供了对 mixin 、函数和变量的访问。 与 CSS 的 import 不同的是, CSS…

aac音频怎么转mp3,这几个方法很简便

对于aac来说,其是一种高级音频编码,也是专门为声音数据设计的文件压缩格式。通常来说,aac与mp3有一些不同。aac使用了全新的算法进行编码的,其整体的效率较mp3更高一些。同时,aac格式的音质较好一些。但是,…

调戏chatGPT(二)下围棋

这次我准备和chatGPT下盘围棋,我先得确认它知道围棋是啥,如果会的话我就不用介绍规则了 t 你会下围棋嘛 作为一名AI助手,我可以模拟下围棋的过程,但是我没有实际的感官,无法看到棋盘和棋子,也无法进行实…

Win11电脑右下角时间显示秒方法教学

Win11电脑右下角时间显示秒方法教学。Win11系统的最新版本已经可以支持状态栏显示秒的功能了。如果你使用的Win11不是最新版本,其实也是可以实现秒数的显示的。接下来我们就来看看具体的设置方法吧。 具体操作如下: 1、无法直接通过修改Win11注册表的方法…

Javaweb | 状态管理:Session、Cookie

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 状态管理 问题引入 HTTP协议是无转态的,不能保存提交的信息如果用户发来一个新的请求,服务器无法知道它是否与上次的请求联系对于那些需要多次…

第四章节 首次登录与在线求助

第四章 首次登录与在线求助 4.14.1.4 在终端登录Linux: 4.2 命令行模式下的命令执行4.2.1 开始执行命令4.2.2 基础的命令操作4.2.3 几个重要的热键4.2.3 Linux系统在线求助man page 与info page 4.4 简单的文本编辑器nano 4.1 4.1.4 在终端登录Linux: …