MongoDB分片集群容灾方案
- 1. 集群同步工具介绍
- 1.1 第三方数据同步工具mongoshake
- 1.2 官方同步工具mongosync
- 2. 工具对比
- 2.1 数据一致性
- 2.2 稳定性和可靠性
- 2.3 维护成本
- 3. 总结
1. 集群同步工具介绍
最近客户咨询MongoDB分片集群市面上主流的容灾方案,所以抽空整理了这篇文章。
1.1 第三方数据同步工具mongoshake
第三方的数据同步工具采用双集群同步的方式来打造 MongoDB 容灾系统,
MongoShake 是阿里云以 golang 语言编写的通用平台型服务工具,它通过读取 MongoDB的 Oplog 操作日志来复制 MongoDB 的数据以实现特定需求。
MongoShake 还提供了日志数据的订阅和消费功能,可通过 SDK、Kafka、MetaQ 等方式的灵活对接,适用于日志订阅、数据中心同步、Cache 异步淘汰等场景。
MongoShake 可以用于数据分析、灾备和多活等业务场景。
MongoShake 是一个基于MongoDB 的跨数据中心的数据复制平台,可以实现 MongoDB 数据库间的数据同步。
在容灾方面,MongoShake 可以通过阿里云自研的 MongoShake 开源工具实现 MongoDB 数据库间的数据同步,该功能可用于数据分析、灾备和多活等业务场景。
MongoShake 可以跨数据中心进行数据同步。MongoShake 从源库抓取 oplog 数据,然后发送到各个不同的 tunnel 通道。
源库支持:eplicaSet,Sharding,Mongod,
目的库支持:Mongos,Mongod。现有通道类型如下:
- Direct:直接写入目的 MongoDB
- RPC:通过 net/rpc 方式连接
- TCP:通过 tcp 方式连接
- File:通过文件方式对接
- Kafka:通过 Kafka 方式对接
- Mock:用于测试,不写入 tunnel,抛弃所有数据
消费者可以通过对接 tunnel 通道获取关注的数据,例如对接 Direct 通道直接写入目的MongoDB,或者对接 RPC 进行同步数据传输等。此外,用户还可以自己创建自己的 API进行灵活接入。
下面 2 张图给出了基本的架构和数据流:
1.2 官方同步工具mongosync
MongoDB 集群到集群同步(mongosync 实用程序)为您提供在相同或不同环境(Atlas、私有云、内部部署和边缘集群)中的 MongoDB 集群的连续、单向数据同步。
MongoDB 集群到集群同步允许您轻松地将数据迁移到云,启动开发/测试环境,创建专用分析环境,并支持审计和数据驻留要求。
mongosync 包含单不仅限于一些典型的限制条件:
- 版本限制,目前只支持 6.0.x 版本,最低版本要求为 6.0.8
- 源集群和目标集群必须具有相同的主要和次要版本,但可以有不同的补丁版本。
例如 mongosync 支持从 MongoDB 6.0.8 源集群同步到 MongoDB 6.0.9 目标集群,因为这些是同一主要版本的补丁版本。
mongosync 不支持从 MongoDB 6.0.9 源集群同步到 MongoDB 7.0.0 目标集群,因为它们有不同的主要版本。- 在 mongosync 运行时,其他客户端不得写入目标集群,即无法再目标库集群中进行写操作,避免一致性问题 。
- 无法复制系统表 。
- 不支持加密数据 。
- 无法同步具有同一字段上定义的唯一索引和非唯一索引的集合 。
- 无法同步时间序列集合和固定生命周期的集合。
2. 工具对比
2.1 数据一致性
MongoShake 中,通过订阅消费,可以灵活对接以适应不同场景,每个 shard 都将对接到 MongoShake 并进行并行抓取。对于目标库来说,可以对接多个 mongos,不同的数据将会哈希后写入不同的 mongos 的方式同步两个集群,保证数据一致性。
mongosync 可以通过读取 mongos 对 mongos 点对点的方式,也可以通过分片对分片多对多的方式同步集群数据,理论上只要保证 oplog 的连续性就能保持数据一致性。
2.2 稳定性和可靠性
MongoShake 是阿里云自研的容灾和多活解决方案平台,可以跨数据中心进行数据同步,作为主流的集群同步方案之一。
mongosync 是 MongoDB 官方提供的集群同步解决方案,具有较高的稳定性和可靠性。
2.3 维护成本
MongoShake 和 mongosync 都需要监控和管理其运行状态,需要投入更多的成本来维护其正常运行。
3. 总结
类似 MongoShake 这样的第三方工具,在数据同步方面配置简单,同样也有着安全可靠的技术水准,但可能会由于开源技术的弊端,无法做到与官方数据库版本的完美兼容,存在着未知风险的可能。
而 MongoDB 官方的集群同步工具,能够较好地保证数据一致性、可靠性等问题,而且对于性能损耗较小,并且在意外发生时,能够获得官方技术手册的支持,自主可控,但受限于目前支持的版本较少。