MongoDB云上灾备:如何快速复制阿里异地灾备、多活架构

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: MongoDB云上灾备BLS产品正式发布

1. 背景

  当前的数据库系统生态中,大部分系统都支持多个节点实例间的数据同步机制 ,如Mysql Master/Slave主从同步,Redis AOF主从同步等,MongoDB更是支持3节点(及以上)ReplicaSet同步,上述机制很好的支撑了一个逻辑单元的数据冗余及HA。
  跨逻辑单元(3节点实例、主从实例),甚至跨单元、跨数据中心的数据同步,在业务层有时候就显得很重要,可以支持同城多机房的负载均衡,多机房的互备,甚至是异地多数据中心容灾(比如 光纤被挖断、地震等小概率事件)和多活。
  基于以上背景,云数据库MongoDB版本正式推出MongoDB实例间的双向同步产品“MongoDB云上灾备”(也称BLS),助力企业快速复制阿里巴巴异地灾备、多活架构。
  产品地址

2. 产品介绍

  “MongoDB云上灾备”通过从源数据库拉取Oplog(Operations Log)数据(其是MongoDB的日志,所有对数据库的修改操作都会保存到oplog中),然后将其传输到目的数据库进行回放实现复制的目的。我们通过构造两条复制链路实现双向同步的功能,基于此,可以实现灾备和多活的功能。
15331166248072_zh-CN.png
  上图给出了整体复制同步的流程。目前,“MongoDB云上灾备”支持的源、目的数据库类型为ReplicaSet副本集,Sharding模式即将上线,不支持单节点模式。为了减缓主节点的压力,系统从备(Secondary)上拉取Oplog。

全量加增量

  同步模型采用全量+增量的方式:在创建时会对源数据库进行全量同步,后续的修改通过增量来同步。

双活以及多活模型

  由于复制是异步模式,所以对于双活/多活模式,由用户保证不会对同一个唯一键同时修改,因为同时修改将可能导致数据错乱。目前冲突策略可以为覆盖或者忽略。后续将会上线校验程序,在用户操作相同唯一键时提供接口报错。

高效性保证

  同步延迟因地域和网络不同而不同,理论TPS能够接近20万(每秒传输20万条oplog)。为了保证批量传输的高效性,数据发送存在缓存缓存机制,所以极限情况下,单条oplog时延可能为1秒。正常情况下,全球范围内数据同步时延小于3秒。

  • 源数据库并行拉取,解决冲突依赖
  • 并行发往Kafka通道
  • 目的端在解决依赖的同时并行写入数据库

环形复制

  为了防止环形复制(数据从源复制到目的,又从目的复制到源),在Oplog日志中打入gid解决该问题。

可靠性传输

  支持断点续传,实例重启时数据同步不受影响。

高可用

  链路同步具有高可用性,如果同步进程挂掉,会有备进程启动接管服务。

限制说明

  • DDL语句同步暂未开放,所以如果修改了源、目的数据的索引操作,无法同步。
  • 目的数据库需要创建,暂不支持在2个已有MongoDB实例之间直接搭通道。
  • 当前只支持双活功能(2个MongoDB实例之间同步数据),后续会上线多活功能(多个MongoDB实例之间同步数据)。

3. 架构

  在“MongoDB云上灾备”产品中,主要有3大组件:

  • BLS Manager。中心控制模块,负责Collector、Receiver的调度、监控等任务。
  • BLS Collector。数据采集模块,负责从源MongoDB数据库拉取Oplog数据后发送到Kafka通道。
  • BLS Receiver。数据回放模块,负责从Kafka通道中获取数据,然后写入目的MongoDB数据库。

下图展示了系统的整体架构图。
7bef6cfb487710fd12bf07a9b80bf0bd.png

4. 用户使用案例

  高德地图 App是国内首屈一指的地图及导航应用,阿里云MongoDB数据库服务为该应用提供了部分功能的存储支撑,存储亿级别数据。现在高德使用国内三中心的策略,通过地理位置等信息路由最近中心提升服务质量,业务方(高德地图)通过用户路由到三个城市数据中心,如下图所示,机房数据之间无依赖计算。数据在不同中心的同步通过“MongoDB云上灾备”产品实现。
f3f3d43046ef6d5c052221127d9e7dde.png
  这三个城市地理上从北到南横跨了整个中国 ,这对多数据中心如何做好复制、容灾提出了挑战,如果某个地域的机房、网络出现问题,可以平滑的将流量切换到另一个地方,做到用户几乎无感知?
  目前策略是,拓扑采用机房两两互联方式,每个机房的数据都通过“MongoDB云上灾备”异步地将数据同步到另外两个机房。然后通过高德的路由层,将用户请求路由到不同的数据中心,读写均发送在同一个数据中心,保证一定的事务性。这样保证每个数据中心都有全量的数据(保证最终一致性) 。任意机房出现问题,另两个机房中的一个可以通过切换后提供读写服务。下图展示了城市1和城市2机房的同步情况。
gd1.png
遇到某个单元不能访问的问题,Manager通过“MongoDB云上灾备”产品管理接口,可以获得各个机房的同步偏移量和时间戳,通过判断采集和写入值即可判断异步复制是否在某个时间点已经完成。再配合业务方的DNS切流,切走单元流量并保证原有单元的请求在新单元是可以读写的,如下图所示。
gd2.png

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
存储 前端开发 架构师
阿里资深架构师带你深入浅出JVM!
JVM = 类加载器(classloader) + 执行引擎(execution engine) + 运行时数据区域(runtime data area)
40 1
|
3月前
|
安全 Java 应用服务中间件
阿里技术官架构使用总结:Spring+MyBatis源码+Tomcat架构解析等
分享Java技术文以及学习经验也有一段时间了,实际上作为程序员,我们都清楚学习的重要性,毕竟时代在发展,互联网之下,稍有一些落后可能就会被淘汰掉,因此我们需要不断去审视自己,通过学习来让自己得到相应的提升。
|
2月前
|
架构师 Java API
阿里P7架构师带你深入剖析synchronized的实现原理
显示锁ReentrantLock的内部同步依赖于AQS(AbstractQueuedSynchronizer),因此,分析ReentrantLock必然涉及AQS。
19 1
|
2月前
|
XML Java 数据库连接
阿里P7架构师带你修炼MyBatis
我们通过一个简单的权限控制需求(RABC,Role-Based Access Control,基于角色的访问控制),来讲解通过XML方式配置MyBatis的基本用法(即select、update、insert、delete等操作的XML配置方式)。
32 0
|
2月前
|
存储 运维 负载均衡
MongoDB详解(二)——MongoDB架构与原理
MongoDB详解(二)——MongoDB架构与原理
39 2
|
2月前
|
存储 监控 安全
阿里云云通信短信服务安全之安全架构
阿里云云通信长期致力于通过多种渠道向客户透明服务相关情况。客户一般可通过阿里云官网提出对阿里云云通信相关资质、服务使用情况、产品说明等信息,我们将7*24小时不间断处理您的建议与咨询。对于客户合理的要求,阿里云云通信服务团队均会及时响应客户的需求。同时,阿里云云通信也在探索更多增加透明度的方式,如对公邮箱、线上查询接口、钉钉服务客户群等。
|
3月前
|
消息中间件 人工智能 Java
面试了一个前阿里P7,Java八股文与架构核心知识简直背得炉火纯青
前几天,跟个老朋友吃饭,他最近想跳槽去大厂,觉得压力很大,问我能不能分享些所谓的经验套路。 每次有这类请求,都觉得有些有趣,不知道你发现没有大家身边真的有很多人不知道怎么面试,也不知道怎么准备面试,哪怕是一些工龄比较长的“老开发”: 有的人明知道有些问题肯定会被问,面试前还不好好准备,结果要么回答得模棱两可,要么答非所问; 有的人则是不知道怎么包装自己的项目经历,结果明明还不错的项目却看上去平平无奇,过后就被面试官忘了; 更有甚者,简历写得花里胡哨,结果一问三不知,简历和经历完全对不上。
|
3月前
|
机器学习/深度学习 架构师 Java
面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我?
人人都有大厂梦,对于程序员来说,BAT为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。
|
3月前
|
消息中间件 存储 架构师
鼓掌!阿里技术官亲荐“架构修炼宝典”,从基础到源码,一站到底
作为一名程序员,尽早确定自己的发展方向和路线是非常重要的,架构师则是其中的方向之一。很多程序员,奋斗大半辈子,是为了让自己成为一名合格且优秀的架构师,但是成为架构师并非一件易事,它对于技术方面的要求也是非常高的。
|
3月前
|
NoSQL Java 程序员
阿里开发人员献礼“Java架构成长笔记”,深入内核,拒绝蒙圈
提起阿里,行外人联想到的关键词无非是“交易”、“淘宝”、“支付宝”,但对于程序员来说,阿里庞大的技术体系才是最吸引人的。实际上阿里作为国内一线互联网公司的头把交椅,内部的技术体系和发展都是备受关注的,对于程序员来说,能够进到阿里工作,就是对自己的技术水平进行一个提升和学习。
阿里开发人员献礼“Java架构成长笔记”,深入内核,拒绝蒙圈