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月前
|
存储 运维 负载均衡
MongoDB详解(二)——MongoDB架构与原理
MongoDB详解(二)——MongoDB架构与原理
39 2
|
4月前
|
NoSQL 数据管理 分布式数据库
阿里云数据库MongoDB版助力掌阅平滑上云,撬动数据红利
随着互联网行业格局的逐步成型以及数字阅读行业的市场竞争日益激烈,掌阅将与阿里云和MongoDB继续深度合作,变现技术红利,继续深化存量用户精细化运营和加大增量用户贡献。
阿里云数据库MongoDB版助力掌阅平滑上云,撬动数据红利
|
5月前
|
监控 NoSQL MongoDB
轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools
mtools是一个基于Python实现的MongoDB工具集,旨在提供一系列功能,包括MongoDB日志分析、报表生成以及简易的数据库安装等。它由MongoDB原生的工程师单独发起并进行开源维护。mtools包含了一些常用的组件,如mlaunch、mlogfilter、mplotqueries和mlogvis等,可以帮助我们更方便地启动和创建MongoDB数据库。
|
5月前
|
监控 NoSQL 安全
轻松掌握组件启动之MongoDB(下):高可用复制集架构环境搭建
本章介绍了MongoDB复制集的配置和使用方法,如何初始化和添加节点到复制集,验证主节点的写入和从节点的读取功能。了解如何查询复制集的状态,包括成员的健康状况、同步信息和角色等。最后,我们介绍了如何配置复制集的安全认证,包括创建用户和生成keyFile文件,并演示了使用认证信息连接复制集的方式。通过本章的学习,你将掌握MongoDB复制集的基本使用和配置方法。
|
5月前
|
存储 NoSQL 容灾
轻松掌握组件启动之MongoDB(上):高可用复制集架构环境搭建
本文介绍了MongoDB复制集的架构和特点,强调了使用复制集提供数据的高可用性和冗余性的重要性。复制集由Primary节点和Secondary节点组成,确保数据一致性。复制集还具有数据分发、读写分离和异地容灾等附加功能。使用MongoDB复制集可以提供稳定可靠的数据存储和高可用性。
轻松掌握组件启动之MongoDB(上):高可用复制集架构环境搭建
|
7月前
|
存储 NoSQL 关系型数据库
MongoDB 的集群架构与设计
MongoDB 的集群架构与设计
1805 0
|
9月前
|
存储 弹性计算 运维
互娱NoSQL架构优化 —— 暨MongoDB“在线换引擎”技术服务指南”
XX工作室是某大客户核心游戏工作室,其核心业务是国内二次元RPG手游,采用实时开放世界对战模式,整体采用阿里云方案,本次专项攻坚主要对于玩家在游戏期间各类游戏属性交互(包含过图、物品、面板、剧情等)的核心业务模块进行优化,其中涉及NoSQL部分由于在专项优化期间存在诸多细节,特此提炼出来给各位有类似互娱业务场景进行参考。
|
11月前
|
JSON 缓存 负载均衡
【服务网格架构】Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
【服务网格架构】Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
|
3天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
15天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
18 0