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

news2025/1/23 2:15:30

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.coloradmin.cn/o/2263555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity基础】AudioSource 常用方法总结

在 Unity 中,AudioSource 组件用于控制音频的播放和管理。以下是常用的 AudioSource 控制方法及其说明。 1. 播放和暂停音频 Play():开始播放音频,如果是从暂停的地方继续播放,可以直接调用。Pause():暂停当前播放的…

flink SQL实现mysql source sink

接上文:一文说清flink从编码到部署上线 环境说明:MySQL:5.7;flink:1.14.0;hadoop:3.0.0;操作系统:CentOS 7.6;JDK:1.8.0_401。 1.代码实现 1.1 E…

知乎 PB 级别 TiDB 数据库集群管控实践

以下文章来源于知乎技术专栏 ,作者代晓磊 导读 在现代企业中,数据库的运维管理至关重要,特别是面对分布式数据库的复杂性和大规模集群的挑战。作为一款兼容 MySQL 协议的分布式关系型数据库,TiDB 在高可用、高扩展性和强一致性方…

SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频

要使用阿里云视频点播(VOD)实现一个教育网站,其中用户需要成为会员后才能查看视频,这个过程包括上传视频、设置权限控制、构建前端播放页面以及确保只有付费会员可以访问视频内容。 1. 视频上传与管理 创建阿里云账号&#xff…

【前端】 async 和 await 以及 generator生成器函数

一、背景 这一篇随机主要是想记录一下自己学习js中有关异步内容的东西。然后发现有人拿异步跟生成器函数进行比较了一下,因此一起学习了一下。 二、知识点相关内容及实验test 2.1 generator 生成器函数 generator函数的作用:每次访问返回函数中yield…

智能座舱进阶-应用框架层-Handler分析

首先明确, handler是为了解决单进程内的线程之间的通信问题的。我也需要理解Android系统中进程和线程的概念, APP启动后,会有三四个线程启动起来,其中,有一条mainUITread的线程,专门用来处理UI事件&#xf…

windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器

不要纠结,直接选择用perl编译! 告诫想要用弄成vs编译版的,暂时先别给自己增加麻烦 告诫,以下执行的每一步,都不要纠结 先安装环境 nasm 64位版本 https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-…

汽车供应链 “剧变”开始,“智能感知潜在龙头”诞生

智能汽车产业链“剧变”已经开启,智能感知软硬件能力的权重正在不断被放大。 比如满足高阶泊车的第二代AK2超声波传感器、满足人机共驾场景需求的电子外后视镜(CMS)、iTOF 3D成像视觉感知(用于舱内监控)等新产品&…

Python+OpenCV系列:AI看图识人、识车、识万物

在人工智能风靡全球的今天,用 Python 和 OpenCV 结合机器学习实现物体识别,不仅是酷炫技能,更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入,识别人、动物、车辆及其他物品,让你的程序瞬间具备 AI …

JVM 详解

一. JVM 内存区域的划分 1. 程序计数器 程序计数器是JVM中一块比较小的空间, 它保存下一条要执行的指令的地址. [注]: 与CPU的程序计数器不同, 这里的下一条指令不是二进制的机器语言, 而是Java字节码. 2. 栈 保存方法中的局部变量, 方法的形参, 方法之间的调用关系. 栈又…

C# opencvsharp 流程化-脚本化-(2)ROI

ROI ROI也是经常需要使用的方法。特别是在图像编辑中。ROI又称感兴趣的区域,但是图像是矩阵是矩形的,感兴趣的是乱八七糟的,所以还有一个Mask需要了解一下的。 public class RoiStep : IImageProcessingStep{public ImageProcessingStepType…

wazuh-modules-sca-scan

sca模块主函数wm_sca_main -> wm_sca_start 检查policy文件中的每一个项目wm_sca_check_policy static int wm_sca_check_policy(const cJSON * const policy, const cJSON * const checks, OSHash *global_check_list) {if(!policy) {return 1;}const cJSON * const id c…

uniapp 自定义图标03

插入工程,修改名称文件内容 编译运行

在Windows本地用网页查看编辑服务器上的 jupyter notebook

​ Motivation: jupyter notebook 可以存中间变量,方便我调整代码,但是怎么用服务器的GPU并在网页上查看编辑呢? 参考 https://zhuanlan.zhihu.com/p/440080687 服务端(Ubuntu): 激活环境 source activate my_env安装notebook …

【YOLO 项目实战】(11)YOLO8 数据集与模型训练

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】(1)YOLO5 环境配置与检测 【YOLO 项目实战】(10)YOLO8 环境配置与推理检测 【YOLO 项目实战】(11)YOLO8 数据…

Ubuntu22.04上安装esp-idf

一、安装准备# 建议使用Ubuntu 20.04 或 Ubuntu 22.04 操作系统 为了在 Ubuntu 22.04 中使用 esp-idf,需要安装一些依赖包 sudo apt-get install git wget flex bison gperf python3\python3-pip python3-venv cmake ninja-build ccache\libffi-dev libssl-dev dfu…

nginx-虚拟主机配置笔记

目录 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm1001.2014.3001.5501 一、 基于域名 二、 基于IP 三、 基于端口 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm100…

AlipayHK支付宝HK接入-商户收款(PHP)

一打开支付宝国际版 二、点开商户服务 三、下载源码

Soul Android端稳定性背后的那些事

前言:移动应用的稳定性对于用户体验和产品商业价值都有着至关重要的作用。应用崩溃会导致关键业务中断、用户留存率下降、品牌口碑变差、生命周期价值下降等影响,甚至会导致用户流失。因此,稳定性是APP质量构建体系中最基本和最关键的一环。当…

深度学习模型 DeepSeek-VL2 及其消费级显卡需求分析

DeepSeek-VL2 是由 DeepSeek 团队开发的一款先进的视觉语言模型,采用了混合专家(MoE)架构,旨在提升多模态理解能力。该模型包括三个版本:DeepSeek-VL2-Tiny、DeepSeek-VL2-Small 和 DeepSeek-VL2。每个版本具有不同的模…