【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.rhkb.cn/news/493106.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EGO Swarm翻译

目录 摘要 Ⅰ 介绍 Ⅱ 相关工作 A . 单四旋翼局部规划 B . 拓扑规划 C. 分布式无人机集群 Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成 A.无需ESDF梯度的局部路径规划 B.隐式拓扑轨迹生成 Ⅳ 无人机集群导航 A 机间避碰 B. 定位漂移补偿 C. 从深度图像中去除agent Ⅴ …

虚拟机断网没有网络,需清理内存,删除后再重启

进入NetworkManager可能没权限,设置权限777 to

整合 Knife4j 于 Spring Cloud 网关:实现跨服务的 API 文档统一展示

🎯导读:本文档概述了构建和配置基于JDK 17、Spring Boot 3.0.7及Spring Cloud 2022.0.3的微服务系统,特别聚焦于集成Knife4j以增强API文档管理和接口测试功能。文中详细介绍了如何在Spring Boot应用中添加Knife4j依赖、配置Swagger UI路径和A…

使用光耦合器测量电压:实用指南

光耦合器,也称为光隔离器,是用于电气隔离和信号传输的多功能组件。其应用之一是测量电路中的电压。本文介绍了如何利用光耦合器进行电压测量,阐明了其操作和实际用途。 使用光耦合器进行电压测量的工作原理 使用光耦合器进行电压测量依赖于其…

LeetCode刷题day29——动态规划(完全背包)

LeetCode刷题day29——动态规划(完全背包) 377. 组合总和 Ⅳ分析: 57. 爬楼梯(第八期模拟笔试)题目描述输入描述输出描述输入示例输出示例提示信息 分析: 322. 零钱兑换分析: 279. 完全平方数分…

【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器

作为主设备写入多个线圈和寄存器 文章目录 作为主设备写入多个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入多个线圈2.1 数据格式2.2 发送数据2.3 结果3、写入多个寄存器3.1 数据格式3.2 发送数据3.3 结果本文将实现STM32作为ModBus主…

Unity 圆形循环复用滚动列表

一.在上一篇垂直循环复用滚动列表的基础上,扩展延申了圆形循环复用滚动列表。实现此效果需要导入垂直循环复用滚动列表里面的类。 1.基础类 using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using …

【前后端】HTTP网络传输协议

近期更新完毕,建议关注、收藏! http请求 URL 严格意义上应该是URI http or https http不加密不安全;https加密协议(公网使用) http端口号80 https端口号443GET or POST GET和POST是HTTP请求的两种基本方法. 因为POST需…

基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视…

疾风大模型气象系统:精准预报,引领未来

精准预报,引领未来 在当今快速变化的世界中,天气预报已成为日常生活和社会运行中不可或缺的一部分。从规划日常出行到防范极端天气影响,高精准的气象服务正在重新定义我们的生活方式。而在这一领域,疾风大模型气象系统以其卓越的技术实力和领先的预测能力,正引领气象服务…

中间件 redis安装

redis官网地址:Redis - The Real-time Data Platform 环境 CentOS Linux release 7.9.2009 (Core) java version "17.0.12" 2024-07-16 LTS 1、通过压缩包安装redis 1,远程下载redis压缩包,或去官网下载:Downloads …

rfid标签打印开发指导

使用java连接斑马打印机,开发rfid标签打印功能 1.引用斑马打印机的SDKjar包 ZSDK_API.jar 将这个jar文件放到项目的lib目录下,没有就新建一个。 然后点击 File–Project Sreucture–Modules 点击加号 选择对应jar包即可 2.代码开发 1.打印机连接地址…

【笔记】深度学习模型评估指标

推荐链接: (0)多分类器的评价指标 (1)泛化误差的评价方法:【机器学习】模型评估与选择(留出法、交叉验证法、查全率、查准率、偏差、方差) (2)机器学习&…

【MAC】深入浅出 Homebrew 下 Nginx 的安装与配置指南

硬件:Apple M4 Pro 16寸 系统: macos Sonoma 15.1.1 Nginx 是一款高性能的 Web 服务器和反向代理服务器,广泛应用于全球各地的网站和企业应用中。本文将详细介绍如何在 macOS 环境下使用 Homebrew 安装、启动、管理以及优化配置 Nginx&#x…

OpenCV 学习记录:首篇

最近在学习机器视觉,希望能通过记录博客的形式来鞭策自己坚持学完,同时也把重要的知识点记录下来供参考学习。 1. OpenCV 介绍与模块组成 什么是 OpenCV? OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软…

git使用和gitlab部署

1.ci,cd,DevOps ci:持续集成:开发的代码集成到代码仓库 cd:持续交互:从代码仓库拉取代码到部署到测试环境 cd:持续部署:从代码仓库拉取代码到部署到生产环境 DevOps:开发写完的代码自动集成&#xff0c…

数据结构:B树与B+树

工具 数据结构与算法可视化在线演示 m阶 B树有以下特点: B-树,有时又写为B_树(其中的-或者_只是连字符,并不读作 B减树),一颗 m 阶(或度)的 B-树,或者本身是空树,否则必须满足以下…

CSDN数据大屏可视化【开源】

项目简介 本次基于版本3 开源 版本3开源地址:https://github.com/nangongchengfeng/CsdnBlogBoard.git 版本1开源地址:https://github.com/nangongchengfeng/CSDash.git 这是一个基于 Python 的 CSDN 博客数据可视化看板项目,通过爬虫采…

YOLOv8全解析:高效、精准的目标检测新时代——创新架构与性能提升

目录 前言 一、模型介绍 二、网络结构 Backbone改进 特征增强网络(neck) 检测头(head) 其它部分 三、Loss计算 四、性能表现 五、YOLOv8使用详解 添加模型 其它部分 创建数据集 数据标注 模型训练 模型预测 六、YOLOv8总结 前言 YOLO(You Only Lo…

重拾设计模式--模板方法模式

文章目录 一、模板方法模式概述二、模板方法模式UML图三、优点1代码复用性高2可维护性好3扩展性强 四、缺点五、使用场景六、C 代码示例1七、 C 代码示例2 一、模板方法模式概述 定义:定义一个操作中的算法骨架,而降一些步骤延迟到子类中。模板方法使得…