有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

基本概念

只读实例

云数据库 MongoDB 支持基于当前实例的集群架构与存储引擎,在源实例可用区或其他可用区创建一个或多个全新的只读实例,将当前实例的数据自动同步至只读实例,并授予只读实例只读不写的权限,便于把当前实例的读请求分担在只读实例,提升读写性能,增加应用的吞吐量。

灾备实例

云数据库 MongoDB 支持基于当前实例的集群架构与存储引擎,跨地域创建一个或多个全新的灾备实例,将当前实例的数据自动同步至灾备实例,并授予灾备实例只读不写的权限。当前实例所在地域因任一可用区电力、网络等不可抗因素失去通信时,可直接提升灾备实例为主实例,跨地域容灾,快速支撑业务需求,帮助用户以较低的成本提升业务连续服务的能力,保障数据的可靠性。

只读实例与灾备实例区别点

只读实例与灾备实例均是基于源实例的集群架构、存储引擎重新构建一个全新的实例,具体的差异信息,请参见下表。
区别点
解释
只读实例
灾备实例
架构类型
只读、灾备实例集群的系统架构,支持副本集分片集群单节点不支持。
与源实例保持一致
与源实例保持一致
跨地域
只读、灾备实例基于源实例是否可以在其他地域构建。
不支持
支持
跨可用区
只读、灾备实例基于源实例是否可以在本地域其他可用区构建。
支持
支持
数据库版本
兼容 Mongo 的数据库版本,包括:6.0、5.0、4.4、4.2、4.0、3.6、3.2,3.2版本已停止售卖。
与源实例保持一致,不能升级。
与源实例保持一致,不能升级。
存储引擎
默认的存储引擎为 WiredTiger。
与源实例保持一致
与源实例保持一致
实例规格
为保证只读、灾备实例的服务承载能力,对 CPU、内存、磁盘容量规格的要求。
不能低于源实例
不能低于源实例
数据写入
写入数据、创建或删除数据库。
不支持
不支持
备份回档
备份数据及恢复备份数据
不支持
不支持
账号管理
创建或删除数据库访问账号
不支持
不支持
手动断开与源实例的关联
在控制台可手动断开只读或灾备实例与源实例的关联。
不支持,只有销毁原实例后,只读实例与源实例的关联将自动解除。只读实例提升普通实例,可以正常读写。
支持,在控制台可将灾备实例转正,灾备实例即转为普通实例,可以正常读写,快速支撑业务需求。
提升可用区
只读、灾备实例原单可用区是否可提升为多可用区部署。
支持
支持

实现原理

只读与灾备可以理解为一个数据同步服务,同步服务将源实例的数据及其增量数据(库、表、索引、文档等)持续同步至目标端的只读实例或灾备实例,并将目标端的访问权限限定为只读,达到缓解源集群压力的目的。
创建只读灾备实例之后,即发起全量数据同步,并记录数据同步的操作日志 Oplog,待全量数据同步完成,通过回放 Oplog(操作日志),针对变化的或新增的数据持续进行增量同步。大致的原理与副本集内主从同步类似。整个过程分为两个阶段:
全量阶段,也就是全量数据的同步。在开始之前会记录下当前源集群的最新 Oplog(操作日志)时间戳。开始之后会并发读取源集群所有库表的元信息、索引及数据,并发地插入到目标端的同名库表中。全量同步的持续时间与源集群的数据量大小成正比。
增量阶段,在全量阶段之后运行,会根据全量阶段开始时记录的 Oplog(操作日志)时间戳拉取源集群的 Oplog,然后在目标端进行回放。


时延说明

由于数据同步有延迟,只读实例数据同步的实时性可能无法保证,如果业务需要读写分离并且对实时要求比较高,建议业务读取主实例的从节点,具体请参见 连接 MongoDB 实例。登录 控制台,在源实例的只读灾备页面,可及时了解主实例到目标实例的同步状态及其时延。


性能优化

类似 MongoDB 副本集 Oplog 的并发回放,只读灾备数据同步服务拉取 Oplog 至缓存,并发解析 Oplog,按表名进行 Hash,保证 Oplog 表级别有序,再线性把每段 Oplog 按文档 ID 进行 Hash,将同一文档的 Oplog 分配到同一个线程去处理,并行回访线程至目标端,保障增量数据同步的性能,同步延迟达秒级。

数据安全

在增量同步过程中,同步服务会将当前已同步的最新 Oplog 时间戳持久化,并且同步服务的回放过程是幂等的。因此,同步服务的增量阶段时支持断点续传,即使源集群或者目标集群出现故障,也能保证同步服务不会出现数据安全问题。
针对增量同步数据过程中,目标集群因磁盘故障、网络等原因引起主备切换,可能引起丢失数据的现象。云数据库 MongoDB 增加了一种记录同步进度的 Oplog。即数据同步服务定期向目标集群的 Oplog 流水中插入同步进度的记录,新主节点生效后,将在自身 Oplog 流水中找到最新的记录,重新同步数据,防止数据丢失。

同步稳定性

每个只读、灾备实例都有一个单独的数据同步服务支撑,每个数据同步服务都使用分布式锁和租约机制来保证服务的唯一性、可用性,并实时监控同步任务,定时调优,保证了数据同步的稳定可靠。

影响与限制

对源集群的影响

只读、灾备数据同步服务对源集群的影响仅限于从节点,会使用源集群的一个从节点(优先 hidden)来拉取数据:
全量阶段会使用 getMore 请求不断拉取数据。
增量阶段会使用 getMore 请求不断拉取 Oplog。
全量阶段与增量阶段,同步服务会在从节点上建立一个顺序读取的 Cursor,用于标记读取进度,对从节点的影响非常小。

使用限制

只读、灾备实例,隶属于源实例,无法单独存在。
只读实例以及灾备实例在创建之后被限制为不可写入。
当源实例销毁后,系统将自动断开与源实例的同步服务,只读实例将升级为普通实例,可正常读写。
数据库版本:分片集群的只读、灾备,只支持4.0、4.2、4.4版本;副本集架构 3.2、3.6、4.0、4.2、4.4版本均支持。如当前实例存在只读、灾备实例,则不允许升级当前实例的数据库版本。只读、灾备实例也不能升级版本。
数量限制:一个实例最大支持创建3个只读、3个灾备实例。
集群架构与存储引擎:只读、灾备实例与源实例的集群架构与存储引擎固定保持一致,无法修改。
账号管理:创建只读、灾备实例时,会自动同步源实例的账户信息。只读、灾备实例不支持创建或删除账户信息。创建只读、灾备实例之后,如果源实例访问账户及密码有更改,此时,并不会自动同步源实例的账户。您需要在连接访问时手动修改只读、灾备实例的账户信息,否则提示错误,无法连接。
由于网络的隔离性,金融专区与普通地灾备域之间不能互相创建灾备实例。
备份回档:只读、灾备实例均不支持备份和回档数据功能。
数据迁移:只读、灾备实例均不支持将其他实例数据迁移至只读、灾备实例。

同步限制

副本集的只读、灾备同步是通过解析 Oplog 实现的,所有 DDL 操作都会支持。
分片集群的只读、灾备同步是通过解析 Change Stream 实现的。Change Stream 在 Oplog 之上包裹一层应用,对外提供一个 API 接口,将数据进行实时推送,推送的数据类型除了基本的 CRUD 操作,目前还支持与库表结构索引等相关的 DDL 操作,包括:createIndexes、drop、rename、dropDatabase、create、createIndexes、dropIndexes、collMod、convertToCapped 等类型。

计费说明

只读、灾备实例计费方式与源实例没有差异,计费模式可以根据实际业务情况选择计费方式,支持预付费包年包月计费与后付费按量计费。计费项目包含计算资源及存储资源。具体信息,请参见 计费概述