随着企业规模的扩大,对数据库可用性要求越来越高,更多企业采用两地三中心、异地多活的架构,以提高数据库的异常事件应对能力。

在数据库领域,我们常听的“两地三中心”、“异地多活”到底是什么呢?

“两地三中心”就是生产数据中心、同城灾备中心、异地灾备中心。这种模式下,两个地域的三个数据中心互联互通,当一个数据中心发生异常,其他数据中心可以正常运行并进行业务接管。

“异地多活”就是在多个地域建设多个数据中心, 业务数据能够在三个及以上的数据中心之间进行双向同步。异地多活架构具有更高的可用性,抗风险能力极强。

不同数据中心可以接管并恢复业务的前提是多个数据中心无差别,彼此之间可以实时同步数据。通过腾讯云 DTS 数据同步功能可以实现这一诉求。本文将向您介绍通过腾讯云 DTS 数据同步功能实现两地三中心架构的方案以及关键原理。

架构介绍

利用腾讯云DTS数据同步可构建下图中的两地三中心架构,其中1~4分别为一条单向的数据同步链路;A为生产数据中心,B为同城的灾备中心,C为异地的灾备中心。



图:两地三中心架构示例

关键问题

在上图所示的两地三中心架构中,数据同步需要解决以下四个关键问题:

  • 单向链路中存量数据和增量数据的同步
  • 通过单向链路构建的复杂拓扑中回环问题的处理
  • 如何保证三个节点数据一致
  • 同步延迟问题

解决方案

1. 单向链路中存量数据和增量数据的同步

单向同步链路是两地三中心、多活数据架构的基础。为了使单向链路的目标节点数据和源头节点一致,既要复制存量数据,又要持续同步增量数据。对于线上系统,源端往往不停地有业务数据写入,为了得到一份一致性的存量数据,往往需要对源端进行加锁,比如FTWRL或者备份锁,这也是mydumper,xtrabackup等备份工具采用的方案。加锁的弊端在于会影响源库的业务写入,这在一些场景下是无法接受的。针对这个问题腾讯云 DTS 提出了一种无锁方案,即存量数据导出时不对源库加锁,在回放增量数据时修复存量数据的不一致,最终达到源和目标数据的一致性

DTS在发起数据同步任务的同时,会接管源端的Binlog,然后将Binlog在目标端进行回放,在同步任务期间源端的SQL操作,会重复在目标端执行一遍。

这跟MySQL Replication主从复制的原理是类似的,通常MySQL为一主多从的架构形式,主库Master负责数据写入,从库Slave负责数据读取,从库的IO线程将主库上的变化写入到本地Relay log,SQL线程读取Relay log在从库上进行回放,从而实现主从数据同步。



图:MySQL Replication主从复制原理图

MySQL这种读写分离的模式可以大大减少主库的访问压力,但灵活性较差,筛选功能不足。

DTS在主从复制架构的基础上,引入灵活的拓扑结构,支持一对多、多对一、联级单向、双向同步、联级环形同步等,可满足各种复杂的数据库同步场景的应用,如两地三中心、异地多活等

2. 解决数据回环问题

数据同步中会遇到回环问题,以如下环形同步为例,对A进行SQL操作,A同步到B,B再同步到C,C又同步给A,A会重复处理该SQL操作,进而陷入无限循环中,所以如何进行数据破环,是双向同步、环形同步等必须要解决的问题。



图:数据回环问题

DTS通过在环形拓扑中做标记,从而识别出来接收到的SQL是否已执行过,达到破环的目的。在其他的拓扑结构,如双向同步、联级环形同步都可以通过做标记来实现破环。

3. 保证三节点数据一致

在两地三中心数据架构中,会有两个或三个节点需要同时进行数据写入,保证多个节点的一致性至关重要。

3.1 规划主键分区

在两地三中心的场景中实现数据一致性,常见的方法就是规划主键分区。主键分区即多个写入的数据库“各司其职“,各自负责更新不同的主键数据,从源头上避免产生主键冲突。例如A节点上负责更新ID为1、3、5的主键数据,B节点上负责更新ID为2、4、6的主键数据。

如果实际业务部分数据存在耦合,无法进行主键分区,则可能产生主键冲突。DTS支持对冲突进行处理,并提供如下三种冲突策略:

冲突报错

同步任务中,源库插入(INSERT)主键数据与目标库存在冲突时,任务报错并暂停,需要用户手动处理后才能继续。

冲突处理时SQL语句改写如下:

INSERT不改写

UPDATE 不改写

DELETE 不改写

冲突忽略

同步任务中检测到源库的主键插入(INSERT)数据与目标库发生冲突时,忽略源库的主键插入数据,以目标库的内容为准。

冲突处理时SQL语句改写如下

INSERT -> INSERT IGNORE

UPDATE 不改写

DELETE 不改写

冲突覆盖

同步任务中检测到源库的主键更新(INSERT和UPDATE)数据与目标库发生冲突时,用源库的主键数据覆盖目标的主键数据。

冲突处理时SQL语句改写如下:

INSERT -> REPLACE INTO

UPDATE -> DELETE + REPLACE INTO

DELETE 不改写

这里首先需要明确的是,DTS冲突策略的应用,仅针对发生主键冲突时的数据,应用后可以按用户设置的策略进行处理,使任务报错提醒给用户或者继续运行。不产生冲突的场景,如下图的UPDATE和所有的DELETE主键操作,源端的操作都会正常同步到目标端,DTS不会干预。



图:不产生冲突的场景下,DTS不干预

如果没有主键分区,多个源端INSERT同一条主键数据引起冲突时,DTS可以按照冲突策略来干预,但多个源端对同一条主键数据进行正常的UPDATE时(如上图,没有冲突),DTS不会干预,这样可能会出现,目标端的数据被重复刷新或者随意刷新(不能确定最终刷新的结果是哪个节点同步过来的),同一条主键数据在多个节点显示的不一致。

综上,要实现多节点数据一致性,进行主键分区是非常有效的方法,可以从源头上避免数据产生冲突。

3.2 两地三中心数据同步应用

下面结合两地三中心的数据架构,介绍数据一致性如何保证,以及通过设置冲突策略来处理冲突问题。



图:两地三中心架构示例

图中1-4为DTS的一条单向同步链路,1、2构成A<->B的双向同步,3、4构成A->C之间的双向同步。

A、B同时负责数据写入,提前规划好A、B各自负责更新的主键数据,例如A负责更新主键ID为1-100的数据,B负责更新主键ID为101-200的数据。

冲突策略给出如下推荐,用户在实际的场景中可以根据业务的情况进行灵活选择。

  • 如果希望发生INSERT主键冲突时DTS给出提示用户手动处理,则4条链路都设置冲突报错。

  • 如果希望INSERT主键时以A的为准,则A->B、A->C设置为冲突覆盖,B->A、C->A设置为冲突忽略。(不能保证UPDATE主键和DELETE主键操作也以A的为准)

4. 同步延迟问题

目标数据库相对于源数据库的延迟也是DTS 关注的一个重要问题,当 DTS 同步数据的速度达不到源端写入速度,就会出现延迟,这在某些场景下会影响业务对目标数据库的使用。

腾讯云 DTS 采用全新自研内核,对同步性能做了极致的优化,能满足大部分实际业务场景下对同步性能的需求。

如下为当前DTS同步任务中不同规格的RPS参考(RPS表示DTS每秒同步至目标表的数据行数)。

表:DTS同步任务中不同规格的RPS上线参考

micro 1000

small 2000

medium 5000

large >5000

在实际业务场景中,RPS可能会受源和目标数据库的运行负载、DTS 访问源和目标数据库的网络延时、网络带宽等多种因素的影响。腾讯云 DTS 经过优化,对网络延时的容忍度较高,在一些跨地域的场景中也能保持较好的性能。如果用户需要更高的传输性能,也可以通过专线接入、VPN接入等方式,保证数据传输过程中的网络延时和带宽质量。

总结

腾讯云DTS已具备实时数据同步、回环处理、数据冲突处理、高性能传输等能力,可根据企业需求灵活定制多种同步拓扑架构,用于两地三中心、异地多活等场景的数据同步。

DTS搭载全新自研内核,突破两地三中心架构的关键技术|腾讯云数据库的更多相关文章

  1. 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化

    作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...

  2. MySQL两地三中心方案初步设计【转】

    整体内容会按照如下的方式来进行设计: 首先说下方案的背景,我参考了一些资料(参见附件). 方案背景 随着互联网业务快速发展,多IDC的业务支撑能力和要求也逐步提升,行业内的“两地三中心”方案较为流行. ...

  3. 腾讯云与 Grafana Labs 达成深度合作, 推出全新 Grafana 托管服务

    9 月 23 日,腾讯云宣布与业界领先的开源数据可视化公司 Grafana Labs 达成深度合作协议,共同开发和验证全新的 Grafana 托管服务,通过 Grafana Labs 开源软件与腾讯云 ...

  4. [百家号]铁流:华为Hi1620发布 自研内核还是ARM改?

    华为Hi1620发布 自研内核还是ARM改? https://baijiahao.baidu.com/s?id=1618735211251270521&wfr=spider&for=p ...

  5. 腾讯云游戏服务平台CMatrix品牌全新升级为GameMatrix

    近日,隶属腾讯互娱公共研发运营体系(下文称CROS)下的云游戏服务平台CMatrix宣布进行品牌升级,启用全新商标Tencent GameMatrix,将原先代表云服务的“C”替换成游戏的英文单词“G ...

  6. 为云而生,腾讯云服务器操作系统TencentOS内核正式开源

    ​1月9日,腾讯云宣布将开源其服务器操作系统TencentOS内核.相比业内其它版本Linux 内核,腾讯云 TencentOS 内核在资源调度弹性.容器支持.系统性能及安全等层面极具竞争力,特别适合 ...

  7. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  8. 《深入理解linux内核》第三章 进程

    进程的七种状态 在内核源码的 include/linux/sched.h文件中: task_struct的status可表示 #define TASK_RUNNING 0 #define TASK_I ...

  9. Linux内核分析(三)----初识linux内存管理子系统

    原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...

随机推荐

  1. 做SaaS的程序员们,是时候关注企业架构了

    SaaS赛道是一个超大赛道,足够容纳上万家服务商,不太可能有哪个服务商能满足所有场景,大部分SaaS服务商在某个垂直领域,提供差异化的产品和服务.SaaS产品大部分都是面向B端客户,少部分面向C端客户 ...

  2. QY-16 浮标水质监测站 组成 及基础参数是什么?一文认识什么是浮标水质监测站

    浮标水质监测站是设立在河流.湖泊.水库.近岸海域等流 域内的现场水质自动监测实验室,是以水质监测仪为核心,运用 传感器技术,结合浮标体.电源供电系统.数据传输设备组成的 放置于水域内的小型水质监测系统 ...

  3. 1┃音视频直播系统之浏览器中通过WebRTC访问摄像头

    一.WebRTC的由来 对于前端开发小伙伴而言,如果用 JavaScript 做音视频处理 在以前是不可想象的,因为首先就要考虑浏览器的性能是否跟得上音视频的采集 但是 Google 作为国际顶尖科技 ...

  4. 从rocketmq入手,解析各种零拷贝的jvm层原理

    在上一篇文章中,主要介绍了rocketmq消息的存储流程.其主要使用了mmap的零拷贝技术实现了硬盘和内存的映射,从而提高了读写性能.在流程中有一个非常有意思的预热方法并没有详细分析,因为其中涉及到了 ...

  5. mysql二进制日志和mysql备份工具介绍以及日志恢复

    mysql备份: 三种备份方式 冷备:数据库停机,在进行备份 热备:lock table锁表,read   数据库只可以读不能写,在备份 温备:备份时数据库正常运行 备份类型:完整备份:全部备份,部分 ...

  6. 设置VisualStudio以管理员身份运行

    以vs2013为例 vs右键属性 ----- 找到目标位置如下 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\ID ...

  7. 04C++核心编程

    Day01 笔记 1 C++概述 1.1 C++两大编程思想 1.1.1 面向对象 1.1.2 泛型编程 1.2 移植性和标准 1.2.1 ANSI 在1998制定出C++第一套标准 2 c++初识 ...

  8. SQL年龄计算方法

    第一种方法: 用DATEDIFF函数,DATEDIFF(YEAR,beginDate,endDate). 测试语句: 1 DECLARE @birthdayDate DATE 2 DECLARE @e ...

  9. 机器学习中 TP FP TN FN的概念

    二分类 在二分类问题中,TP FP TN FN 是非常清楚且易于理解的. TP (True Positive) : 预测为 1 ,真实值也为 1 -> 真阳性 FP (False Positiv ...

  10. 接口偶尔超时,竟又是JVM停顿的锅!

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 继上次我们JVM停顿十几秒的问题解决后,我们系统终于稳定了,再也不会无故重启了! 这是之前的文章:耗时几个月,终于 ...