MongoShake-数据库同步工具


这个仓库是 MongoShake,由阿里云的 NoSQL 团队开发和维护,是一个基于 MongoDB 的 oplog 的通用平台,用于从源 MongoDB 数据库获取 oplog 并在目标 MongoDB 数据库中重放,或通过不同的隧道发送到其他端点。以下是对该仓库的详细介绍:

功能特性

  1. 数据同步:可以将数据从源 MongoDB 复制到另一个 MongoDB,构建冗余复制或双活复制。支持多种源类型,包括单节点 mongod、副本集和分片集群,目标可以是 mongod 或 mongos。
  2. 并行复制:提供三种并行复制选项(shad_key):__id__collection__auto,用户可以根据需求选择不同的并发粒度。
  3. 高可用性:定期将上下文(如检查点)持久化到注册中心(默认是源数据库),支持虚拟机监控机制,在进程崩溃时能立即重启。
  4. 过滤功能:支持使用白名单和黑名单过滤数据库和集合命名空间。
  5. DDL 同步:从 1.5 版本开始,支持使用全局屏障同步 DDL 操作。目前仅支持源端为副本集的情况,目标端可以是副本集或分片集群。
  6. 隧道类型:支持多种隧道类型,如 rpctcpfilekafkamockdirect,用户还可以自定义隧道类型。
  7. 压缩功能:在发送批量 oplog 之前,支持使用 Gzip、zlib、deflate 进行压缩。
  8. 监控与调试:用户可以通过 RESTful API 监控或调试 MongoShake

代码结构

仓库的代码结构清晰,包含多个模块和目录,主要结构如下:

.gitignore
ChangeLog
Dockerfile
LICENSE
Makefile
README.md
build.sh
go.mod
go.sum
collector/         # 收集器模块,负责从源数据库获取 oplog
executor/          # 执行器模块
resources/         # 资源文件,如图像
receiver/          # 接收器模块
conf/              # 配置文件目录
modules/           # 模块目录,包含压缩、校验和等模块
quorum/            # 仲裁模块
cmd/               # 命令行工具目录
oplog/             # oplog 处理模块
common/            # 公共工具模块
scripts/           # 脚本目录
unit_test_common/  # 单元测试公共模块
sharding/          # 分片操作模块
tunnel/            # 隧道模块,负责数据传输
tools/             # 工具目录

使用方法

可以通过以下两种方式运行 MongoShake: 1. 直接运行预构建的二进制文件: - 在 OSX 系统中运行 ./bin/collector.darwin - 在 Linux 系统中运行 collector.linux 2. 自行构建并运行: bash git clone https://github.com/alibaba/MongoShake.git cd MongoShake make ./bin/collector -conf=conf/collector.conf 注意:在运行之前,用户必须先修改 collector.conf 文件以满足需求。在 Linux 系统中,还可以使用 start.sh 脚本,该脚本支持虚拟机监控机制。

文档与支持

仓库提供了详细的文档,包括英文文档和中文文档,涵盖了架构、数据流、性能测试、业务展示等方面的内容。用户可以访问以下链接获取更多信息: - English document - 中文架构介绍文档 - 第一次使用,如何配置 - Tutorial - FAQ document - MongoShake最佳实践 - Performance test document

版本规则

MongoShake 的版本号遵循 a.b.c 的规则: - a:主版本号 - b:次版本号,偶数表示稳定版本,如 1.2.x1.4.x2.0.x 是稳定版本,而 1.5.x2.1.x 不是。 - c:修复版本号

相关工具

除了 MongoShake,该团队还提供了其他同步工具: - RedisShake:Redis 数据同步工具 - RedisFullCheck:Redis 数据同步验证工具