这个仓库是 MongoShake
,由阿里云的 NoSQL 团队开发和维护,是一个基于 MongoDB 的 oplog 的通用平台,用于从源 MongoDB 数据库获取 oplog 并在目标 MongoDB 数据库中重放,或通过不同的隧道发送到其他端点。以下是对该仓库的详细介绍:
功能特性
- 数据同步:可以将数据从源 MongoDB 复制到另一个 MongoDB,构建冗余复制或双活复制。支持多种源类型,包括单节点 mongod、副本集和分片集群,目标可以是 mongod 或 mongos。
- 并行复制:提供三种并行复制选项(
shad_key
):__id
、__collection
和__auto
,用户可以根据需求选择不同的并发粒度。 - 高可用性:定期将上下文(如检查点)持久化到注册中心(默认是源数据库),支持虚拟机监控机制,在进程崩溃时能立即重启。
- 过滤功能:支持使用白名单和黑名单过滤数据库和集合命名空间。
- DDL 同步:从 1.5 版本开始,支持使用全局屏障同步 DDL 操作。目前仅支持源端为副本集的情况,目标端可以是副本集或分片集群。
- 隧道类型:支持多种隧道类型,如
rpc
、tcp
、file
、kafka
、mock
和direct
,用户还可以自定义隧道类型。 - 压缩功能:在发送批量 oplog 之前,支持使用 Gzip、zlib、deflate 进行压缩。
- 监控与调试:用户可以通过 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.x
、1.4.x
、2.0.x
是稳定版本,而 1.5.x
、2.1.x
不是。
- c
:修复版本号
相关工具
除了 MongoShake
,该团队还提供了其他同步工具:
- RedisShake:Redis 数据同步工具
- RedisFullCheck:Redis 数据同步验证工具