之前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相关推荐

  1. 数据同步工具的研究(实时)

    数据同步工具的研究(实时同步): FlinkCDC.Canal.Maxwell.Debezium --2023年01月17日 --Yahui Di 1. 常用CDC方案比较 2. FlinkCDC F ...

  2. Linux的rsync远程数据同步工具

    Rsync(remote synchronize) 是一个远程数据同步工具,可以使用"Rsync算法"同步本地和远程主机之间的文件. rsync的好处是只同步两个文件不同的部分,相 ...

  3. ETL的数据同步工具调研(持续更新中)

    扯白了,数据同步工具就是"导数据 "的 名称 社区响应 国内使用情况(以前程无忧为参考) SQOOP 更新缓慢,对于hbase2.x以上版本使用时需要老版本的jar包 9页 Dat ...

  4. etl数据抽取工具_数据同步工具ETL、ELT傻傻分不清楚?3分钟看懂两者区别

    什么是数据同步工具(ETL.ELT) 数据同步工具ETL或者ELT的作用是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决 ...

  5. fox pro删除单条数据_Mac文件夹数据同步工具——Sync Folders Pro

    Mac版同步文件夹Pro(文件夹数据同步工具)分享给大家!Mac版同步文件夹Pro是一种功能强大的文件夹数据同步工具,可帮助您同步两一个文件夹的内容,包括任何子文件夹.使用文件夹同步软件,允许您在任一 ...

  6. DataX离线数据同步工具/平台

    DataX离线数据同步工具/平台 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.SQL Server.Oracle.PostgreSQL.HDFS.Hive.O ...

  7. 分享改进 高性能数据同步工具(一)

    题外:在博文索引中暂时列出了开源的计划一览,虫子开源的目的是希望能有更多的交流,部分软件可能小得连开源协议的认证价值都没有.不管程序有多小多简单,用心把一个完整的设计思路.实现过程以及测试结果展现给大 ...

  8. mongodb数据同步到elasticsearch的中间件,支持全量,增量,实时同步等多种同步情景。(syncs MongoDB to Elasticsearch in realtime) (Mong

    GitHub - levonmo/mongo-sync-elasticsearch: mongodb数据同步到elasticsearch的中间件,支持全量,增量(新增修改删除),实时同步等多种同步情景 ...

  9. canal - 数据同步工具

    一.应用场景 在前面Echarts - 实现图表显示中,我们使用了服务调用(统计表中的信息通过调用用户模块服务来获取)获取统计信息,这样耦合度高,效率相对较低,目前有另一种方法,通过实时同步数据库表的 ...

  10. 数据同步工具Sqoop

    大数据Hadoop之--数据同步工具Sqoop Sqoop基本原理及常用方法 1 概述 Apache Sqoop(SQL-to-Hadoop)项目旨在协助RDBMS(Relational Databa ...

最新文章

  1. zabbix 安装时的报错mysql_connect(): Access denied for us
  2. 智能车竞赛创意组别对应的FQA
  3. 华为鸿蒙系统源码_鸿蒙系统 IO 栈分析 | 解读鸿蒙源码
  4. opengl加载显示3D模型SMD类型文件
  5. 企业大数据应用成熟度如何?大多数企业处于自嗨中
  6. Python—Mysql—Dbvisualizer
  7. 对齐输出(信息学奥赛一本通-T1003)
  8. PasswordEncoder详解
  9. python编程从入门到实践之外星人入侵
  10. Duilib初级控件扩展一例: 具有鼠标滚动消息的OptionUI
  11. class AT where T:new()相关知识点
  12. 蓝桥杯2019年第十届C/C++省赛B组第一题-组队
  13. 领英问题问答--有关领英各类问题整理,置顶推荐
  14. 运用“孤独九剑”解决项目实际问题(三)
  15. Logcat五种级别日志
  16. “天才少年” 稚晖君被曝离职华为,或投身机器人领域
  17. 花了10分钟,终于明白矩阵的逆到底有什么用
  18. win10 eNSP安装与配置
  19. 一文读懂Codex:基于Cosmos的跨链DeFi平台
  20. UE4 sequence 播放速率的调整(4.27)

热门文章

  1. 大航海时代2 全村落 探索 MD ROM 静态 HACKER
  2. 楚留香服务器维护时间,【9月28日维护公告】
  3. 调用讯飞开放平台的语音转写api
  4. Python 写入文件
  5. 左程云算法Day6 图
  6. python凹多边形分割_凹多边形拆分
  7. 运维这个工作岗位还有前途吗?
  8. Java主流框架的介绍
  9. Win10 资源管理器导航栏设置
  10. 使用Bitvise SSH代理访问