专栏首页二狗的DBA之路MongoDB数据同步工具之 MongoShake

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/.bashrc

git 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 sync

cd ../../ && ./build.sh
这样,就会在 bin目录下生成可执行的二进制文件

我这里编写的collector.conf 配置文件内容如下:

mongo_urls = mongodb://root:123456@192.168.2.4:27019     ## 如果是复制集环境,建议这里填从节点地址以减少主的压力
collector.id = mongoshake
checkpoint.interval = 5000

http_profile = 9100
system_profile = 9200

log_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 = none

tunnel = 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的方式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MongoDB数据同步工具之 MongoShake

    之前360出的那个mongodb数据同步工具比较老,对于3.X版本的mongodb支持不太好。

    二狗不要跑
  • 单机版MongoDB的zabbix监控

    最近公司新上了几个mongodb的项目(单机版MongoDB),需要坐下监控。之前有一个监控模板,但是效果不好。于是重新去google了一把,有了如下记录。

    二狗不要跑
  • pg9.5升级 到 pg11 的步骤

    -bash-4.2$ egrep "^\w+" postgresql.conf  参数如下:

    二狗不要跑
  • mac环境下mongodb的安装和使用

    简介 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据...

    xiangzhihong
  • mac环境下mongodb的安装和使用

    简介 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据...

    xiangzhihong
  • 【微服务】144:跨域问题及其解决方法

    其实第③种方式直接使用网关域名访问也是可以的,在前天使用nginx时配置了网关域名。

    刘小爱
  • 设计模式专题(一)——面向对象的设计原则

    设计模式专题(一)——面向对象的设计原则 (原创内容,转载请注明来源,谢谢) 设计模式在程序中,主要服务于设计类、接口等,是以面向对象为基础的,因此面向对象...

    用户1327360
  • mongodb 学习随笔 及golang 连接mongoDB

    Mogondb 不支持事务。所有有事务要求的需求慎用,比如银行的转账操作慎用,转1个亿美金,因为网络,电力的故障导致交易没有完成,不能回滚,交易无法撤回。所有慎...

    地球流浪猫
  • Python数据挖掘 | 实战案例之预测糖尿病

    今天给大家讲解一个实战案例:如何根据现有数据预测糖尿病。在这个案例开始之前,希望大家回忆一下大学里讲过的线性回归的知识,这是数据挖掘里非常重要的一部分知识。当然...

    孤独的明月
  • Python数据挖掘 | 实战案例之预测糖尿病

    豌豆贴心提醒,本文阅读时间7分钟 今天给大家讲解一个实战案例:如何根据现有数据预测糖尿病。在这个案例开始之前,希望大家回忆一下大学里讲过的线性回归的知识,...

    小小科

扫码关注云+社区

领取腾讯云代金券