MongoDB数据同步工具之 MongoShake
之前360出的那个mongodb数据同步工具比较老,对于3.X版本的mongodb支持不太好。
阿里巴巴出了个 MongoShake , 目前可以支持到MongoDB4.X(我测试从mongodb3.2.16同步数据到mongodb4.0.4没问题)
官方地址: https://github.com/alibaba/MongoShake
中文介绍地址: https://yq.aliyun.com/articles/603329
具体的介绍,可以参考上面第二个链接。 实际原理类似于 我们在mysql环境下常用的canal (MongoShake 通过订阅oplog, 然后给下游消费或者直接发送给下游mongodb实例)
MongoShake应用场景举例
1. MongoDB集群间数据的异步复制,免去业务双写开销。
2. MongoDB集群间数据的镜像备份(当前1.0开源版本支持受限)
3. 日志离线分析
4. 日志订阅
5. 数据路由。根据业务需求,结合日志订阅和过滤机制,可以获取关注的数据,达到数据路由的功能。
6. Cache同步。日志分析的结果,知道哪些Cache可以被淘汰,哪些Cache可以进行预加载,反向推动Cache的更新。
7. 基于日志的集群监控
MongoShake功能介绍
MongoShake从源库抓取oplog数据,然后发送到各个不同的tunnel通道。源库支持:ReplicaSet,Sharding,Mongod,目的库支持:Mongos,Mongod。现有通道类型有:
1. Direct:直接写入目的MongoDB
2. RPC:通过net/rpc方式连接
3. TCP:通过tcp方式连接
4. File:通过文件方式对接
5. Kafka:通过Kafka方式对接
6. Mock:用于测试,不写入tunnel,抛弃所有数据
其它的介绍,可以参考上面的地址,这里就不大段贴了。
直接上实操吧:
环境: centos7
源库: mongodb 3.2.16
目的库: mongodb 4.0.4
mongo-shake的编译安装
yum install golang golang-bin golang-src # 我这里安装的是1.9.4的go包mkdir /home/gocode/
export GOPATH=/home/gocode/
echo 'export GOPATH=/home/gocode/' >> /root/.bashrc
source /root/.bashrcgit clone https://github.com/aliyun/mongo-shake.git
cd mongo-shake/src/vendor
GOPATH=`pwd`/../..go get -u -v github.com/kardianos/govendor # 依赖到这个包,需要先安装下govendor/home/gocode/bin/govendor synccd ../../ && ./build.sh
这样,就会在 bin目录下生成可执行的二进制文件
我这里编写的collector.conf 配置文件内容如下:
mongo_urls = mongodb://root:123456@192.168.2.4:27019 ## 如果是复制集环境,建议这里填从节点地址以减少主的压力
collector.id = mongoshake
checkpoint.interval = 5000http_profile = 9100
system_profile = 9200log_level = debug
log_file = collector.log
log_buffer = true# 配置同步的黑白名单
filter.namespace.black =
filter.namespace.white =oplog.gids =
shard_key = auto
syncer.reader.buffer_time = 1
worker = 8
worker.batch_queue_size = 64
adaptive.batching_max_size = 16384
fetcher.buffer_capacity = 256
worker.oplog_compressor = nonetunnel = direct # 拿到的oplog 直接写到目标实例
tunnel.address = mongodb://127.0.0.1:28017 # 目标库地址是 28017端口
context.storage = database
context.address = ckpt_default
context.start_position = 2000-01-01T00:00:01Z
master_quorum = false
replayer.dml_only = true ## 我这里只允许dml数据的同步,如果要允许ddl也传说到目标实例,需要把这个设置为false,具体参考官方的说明
replayer.executor = 1
replayer.executor.upsert = false
replayer.executor.insert_on_dup_update = false
replayer.conflict_write_to = none
replayer.durable = true
启动方式:
./bin/collector -conf=conf/collector.conf
日志在 logs 目录下:
tailf logs/collector.log
在源实例上测试写入:
use testdb;
for (i=1;i<=10000;i++) db.tb3.insert( {name:"student"+i, age:(i%120), address: "shanghai" } );
db.tb3.count()
然后,在目标节点执行验证操作:
use testdb;
db.tb3.count()
可以看到,数据记录是一致的。 实际上测试下来,会有2秒左右的延迟。
其他走kafka,file ,rpc 等操作,没用到过,暂时不具备实验的条件。
如果只是单次的数据迁移,用dircet方式基本上就够了。 如果用在跨机房同步,一般建议走kafka的方式。
转载于:https://blog.51cto.com/lee90/2390883
MongoDB数据同步工具之 MongoShake相关推荐
- 数据同步工具的研究(实时)
数据同步工具的研究(实时同步): FlinkCDC.Canal.Maxwell.Debezium --2023年01月17日 --Yahui Di 1. 常用CDC方案比较 2. FlinkCDC F ...
- Linux的rsync远程数据同步工具
Rsync(remote synchronize) 是一个远程数据同步工具,可以使用"Rsync算法"同步本地和远程主机之间的文件. rsync的好处是只同步两个文件不同的部分,相 ...
- ETL的数据同步工具调研(持续更新中)
扯白了,数据同步工具就是"导数据 "的 名称 社区响应 国内使用情况(以前程无忧为参考) SQOOP 更新缓慢,对于hbase2.x以上版本使用时需要老版本的jar包 9页 Dat ...
- etl数据抽取工具_数据同步工具ETL、ELT傻傻分不清楚?3分钟看懂两者区别
什么是数据同步工具(ETL.ELT) 数据同步工具ETL或者ELT的作用是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决 ...
- fox pro删除单条数据_Mac文件夹数据同步工具——Sync Folders Pro
Mac版同步文件夹Pro(文件夹数据同步工具)分享给大家!Mac版同步文件夹Pro是一种功能强大的文件夹数据同步工具,可帮助您同步两一个文件夹的内容,包括任何子文件夹.使用文件夹同步软件,允许您在任一 ...
- DataX离线数据同步工具/平台
DataX离线数据同步工具/平台 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.SQL Server.Oracle.PostgreSQL.HDFS.Hive.O ...
- 分享改进 高性能数据同步工具(一)
题外:在博文索引中暂时列出了开源的计划一览,虫子开源的目的是希望能有更多的交流,部分软件可能小得连开源协议的认证价值都没有.不管程序有多小多简单,用心把一个完整的设计思路.实现过程以及测试结果展现给大 ...
- mongodb数据同步到elasticsearch的中间件,支持全量,增量,实时同步等多种同步情景。(syncs MongoDB to Elasticsearch in realtime) (Mong
GitHub - levonmo/mongo-sync-elasticsearch: mongodb数据同步到elasticsearch的中间件,支持全量,增量(新增修改删除),实时同步等多种同步情景 ...
- canal - 数据同步工具
一.应用场景 在前面Echarts - 实现图表显示中,我们使用了服务调用(统计表中的信息通过调用用户模块服务来获取)获取统计信息,这样耦合度高,效率相对较低,目前有另一种方法,通过实时同步数据库表的 ...
- 数据同步工具Sqoop
大数据Hadoop之--数据同步工具Sqoop Sqoop基本原理及常用方法 1 概述 Apache Sqoop(SQL-to-Hadoop)项目旨在协助RDBMS(Relational Databa ...
最新文章
- zabbix 安装时的报错mysql_connect(): Access denied for us
- 智能车竞赛创意组别对应的FQA
- 华为鸿蒙系统源码_鸿蒙系统 IO 栈分析 | 解读鸿蒙源码
- opengl加载显示3D模型SMD类型文件
- 企业大数据应用成熟度如何?大多数企业处于自嗨中
- Python—Mysql—Dbvisualizer
- 对齐输出(信息学奥赛一本通-T1003)
- PasswordEncoder详解
- python编程从入门到实践之外星人入侵
- Duilib初级控件扩展一例: 具有鼠标滚动消息的OptionUI
- class AT where T:new()相关知识点
- 蓝桥杯2019年第十届C/C++省赛B组第一题-组队
- 领英问题问答--有关领英各类问题整理,置顶推荐
- 运用“孤独九剑”解决项目实际问题(三)
- Logcat五种级别日志
- “天才少年” 稚晖君被曝离职华为,或投身机器人领域
- 花了10分钟,终于明白矩阵的逆到底有什么用
- win10 eNSP安装与配置
- 一文读懂Codex:基于Cosmos的跨链DeFi平台
- UE4 sequence 播放速率的调整(4.27)