当前位置: 首页 > article >正文

【Mongo工具】Mongo迁移工具之Mongo-shake

Mongo-Shake 简介

Mongo-Shake 是一个基于 MongoDB 操作日志(oplog)的通用服务平台。它从源 MongoDB 数据库中获取操作日志,并在目标 MongoDB 数据库中重放,或者通过不同的隧道发送到其他终端。如果目标端是 MongoDB 数据库,即直接重放操作日志,那么它就像一个同步工具,用于将数据从源 MongoDB 复制到另一个 MongoDB,以构建冗余复制或双主复制。除了这种直接方式外,还有其他类型的隧道,如rpc, file, tcp, kafka。用户编写的接收器必须分别定义自己的接口来连接这些隧道。用户还可以定义自己的可插拔隧道类型。如果连接到像 Kafka 这样的第三方消息中间件,消费者可以在发布/订阅模块中灵活地以异步方式获取订阅数据。以下是通用的数据流:

源可以是 mongod 单实例、副本集或分片集群,而目标可以是 mongod 实例或 mongos 实例。如果源是副本集,我们建议从次要节点/隐藏节点获取数据,以减轻主节点的压力。如果源是分片集群,则每个分片都应连接到 Mongo-Shake。在目标端,可以有多个 mongos 实例以保持高可用性,并且不同的数据将通过哈希算法被分配到不同的 mongos 实例中进行写入。

Parallel Replication(并行复制)

并行复制有三种选项,我们称之为“shad_key”:id、collection 和 auto。id 表示并发粒度是文档级别,而 collection 表示粒度是集合/表级别。auto 选项会根据是否存在任何集合的唯一索引来决定,如果存在唯一索引,则更改为集合级别,否则为 id 级别。

High Availability (高可用性)

Mongo-Shake 会定期将其上下文持久化到注册中心,默认情况下是源数据库。目前,上下文是检查点,它标记了成功重放操作日志的位置。同时支持超管机制,以便在 Mongo-Shake 崩溃时(根据配置中的 master_quorum)立即重启。

Filter (过滤)

支持使用白名单和黑名单过滤数据库和集合命名空间。

DDL Syncing (DDL 同步)

从 1.5 版本开始,MongoShake 支持使用全局屏障来同步 DDL。一旦获取到 DDL 操作日志,MongoShake 会添加一个屏障,使得所有后续的操作日志在队列中等待,直到这个操作日志被写入目标 MongoDB 或隧道,并且检查点被更新。目前,DDL 仅支持源端为副本集(目标端可以是副本集或分片集群),后续版本将支持分片。

Global ID (全局ID)

在阿里云内部版本中,支持全局 ID(也称为 gid),它标记了数据库的 ID。这可以用于避免两个数据库相互备份时产生的循环。Mongo-Shake 只获取与源数据库 ID 相等的操作日志,如果没有提供 gid,则会获取所有操作日志。对于当前的开源版本,由于 MongoDB 内核的修改限制,暂不支持此功能。

如果您想在不支持 gid 的情况下构建双主复制,请参阅常见问题文档以获取更多详细信息。

Tunnel (隧道)

如上所述,我们支持多种隧道类型,如:rpc、tcp、file、kafka、mock 和 direct。rpc 和 tcp 分别表示通过网络/rpc 和 TCP 同步连接到接收器;file 表示将输出写入文件;kafka 是一种异步发送消息的方式;mock 用于测试,会丢弃所有数据;direct 表示直接写入目标 MongoDB。用户还可以添加或修改当前的隧道类型。

我们提供了接收器来连接不同的隧道,如:rpc、tcp、file、mock 和 kafka。请参阅常见问题文档以获取更多详细信息。

Compressor (压缩)

在发送之前,批量操作日志支持 gzip、zlib、deflate 压缩。

Monitor & Debug (监控 &调试 )

用户可以通过 RESTful API 监控或调试 Mongo-Shake,请参阅常见问题文档以获取更多详细信息。

Other Details (其他细节)

Mongo-Shake 使用 go-driver 从源 MongoDB 获取给定配置时间戳之后的操作日志。然后,它根据白名单、黑名单和 gid 过滤操作日志。由于操作日志 DML 的幂等性,所有操作日志都将至少传输一次,这是可以接受的。我们使用 seq 和 ack 来确保数据包已被接收,这与 TCP 中的序列号和确认号类似。

操作日志在处理管道中被批量处理。

用户可以根据不同的环境调整工作线程并发度和执行器并发度。

如果您想查看更多详细信息,请参阅文章开头列出的详细文档。

Code branch rules (代码分支规则)

版本号规则:a.b.c

a:主版本号
b:次版本号。偶数表示稳定版本。例如,1.2.x、1.4.x、2.0.x 是稳定版本,而 1.5.x、2.1.x 则不是。
c:修补版本号

branch namerules
mastermaster branch, do not allowed push code. store the latest stable version.
develop(main branch)develop branch. all the bellowing branches fork from this.
feature-*new feature branch. forked from develop branch and then merge back after finish developing, testing, and code review.
bugfix-*bugfix branch. forked from develop branch and then merge back after finish developing, testing, and code review.
improve-*improvement branch. forked from develop branch and then merge back after finish developing, testing, and code review.

Usage (使用说明)

在OSX和Linux系统上,分别运行已构建的./bin/collector.darwin或collector.linux。

或者,你可以根据以下步骤自行构建mongo-shake(需要go版本>=1.15.10):

​
git clone https://github.com/alibaba/MongoShake.git
cd MongoShake
make
./bin/collector -conf=conf/collector.conf
​

请注意:用户必须先修改collector.conf以满足需求。您还可以使用"start.sh"脚本,但该脚本仅在Linux操作系统上支持虚拟化机制。

Shake series tool (Shake系列工具)

我们还提供了一些用于Shake系列同步的工具。

MongoShake:mongodb数据同步工具。
RedisShake:redis数据同步工具。
RedisFullCheck:redis数据同步验证工具。


安装

下载二进制 

https://github.com/alibaba/MongoShake/releases

参考:GitHub - alibaba/MongoShake: MongoShake is a universal data replication platform based on MongoDB's oplog. Redundant replication and active-active replication are two most important functions. 基于mongodb oplog的集群复制工具,可以满足迁移和同步的需求,进一步实现灾备和多活功能。


http://www.kler.cn/a/446017.html

相关文章:

  • 基于MATLAB的图像增强
  • 数据分析实战—鸢尾花数据分类
  • 进网许可认证、交换路由设备检测项目更新25年1月起
  • LeetCode刷题day29——动态规划(完全背包)
  • 软考高项,考情学习
  • 学习记录:electron主进程与渲染进程直接的通信示例【开箱即用】
  • windows C#-使用构造函数
  • ArkUI性能优化(0)—DevEco Profiler调优工具
  • 力扣275.H制数II (二分法 求最大)
  • 二八(vue2-04)、scoped、data函数、父子通信、props校验、非父子通信(EventBus、provideinject)、v-model进阶
  • Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
  • 使用ZLMediaKit 开源项目搭建RTSP 服务器
  • Python爬虫实战:深入Lazada商品详情获取
  • 前端导出PDF的组件及方法
  • C#方法参数修饰符ref/out/in/params
  • 智能体实战(需求分析助手)一、需求概述及迭代规划
  • Docker安装与架构
  • 28、论文阅读:基于像素分布重映射和多先验Retinex变分模型的水下图像增强
  • Facebook的去中心化探索:社交平台的新型发展趋势
  • GIT命令使用手册(详细实用版)
  • wxpyton+wxFormBuilder加法运算示例
  • docker 存储管理
  • 【LeetCode每日一题】——434.字符串中的单词数
  • Python的3D可视化库【vedo】2-5 (plotter模块) 坐标转换、场景导出、添加控件
  • redis-cli 连接Redis
  • 我的“双胞同体”发布模式的描述与展望