MongoDB开源:mongosync:360 出品的支持 MongoDB 副本集间数据传输的工具

浏览: 246 发布日期: 2017-01-07 分类: mongodb

一、 简介

mongosync是由Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MongoDB协议,依据mongodb同步模块代码,深度定制的一款支持MongoDB副本集间数据传输的工具。目前,该工具已经在360公司内部投入使用。

   主要功能:

       1、全量数据同步

       2、实时数据同步

       3、oplog实时传输

二、 特点

1、版本兼容性 

​ 版本支持情况如下(目前尚不支持mongos):

     后续考虑兼容3.2、3.4及更新版本 

2、开发语言

​ 底层采用C++语言,效率更高,速度更快

3、多线程支持

     多线程工作的原理如下图所示:

Imgur

 

4、支持从库同步

    支持从库作为复制源进行数据同步,减轻主库压力

5、索引同步可配置

    支持数据+索引 / 数据模式,加快数据同步速度

三、使用说明

1.安装

  • 获取源代码
   $ git clone https://github.com/jacketwoo/mongosync
  • 编译。进入mongosync目录,执行make命令
$ make

编译完成后,$(MONGOSYNC_ROOT)/output目录下可以发现可执行文件(mongosync)以及配置文件(mongosync.conf)

  • 清理
   $ make clean

说明

  • 编译过程中,如果发现缺失依赖包,请根据说明安装相应依赖包
  • 请不要使用c++ 11编译

2.参数说明

程序可以通过命令行及配置文件的方式运行,参数说明如下:
--help 获取帮助信息
-c conf.file 使用conf.file配置文件启动mongosync
--src_srv arg 源端ip及端口信息,格式:--src_srv 192.168.1.1:27017
--src_user arg 源端用户
--src_passwd arg 源端密码
--src_auth_db arg 源端认证库
--src_use_mcr 强制源端使用MONGODB-CR密码认证
--dst_srv arg 目的端ip及端口信息,格式:--src_srv 192.168.1.2:27018
--dst_user arg 目的端用户,需要具有创建数据库,集合,索引等操作权限
--dst_passwd arg 目的端密码
--dst_auth_db arg 目的端认证库
--dst_use_mcr 强制目的端使用MONGODB-CR密码认证
--db arg 源端数据库,默认同步除admin及local外的所有数据库
--dst_db arg 目的端数据库
--coll arg 源端集合,默认同步全部集合
--dst_coll arg 目的端集合
--oplog 是否同步oplog
--raw_oplog 是否只同步oplog
--op_start arg oplog同步的开始点位,格式:--op_start 1479436001,1
--op_end arg oplog同步的结束点位,格式:--op_start 1479436002,2
--dst_op_ns arg oplog同步时目的端的oplog名称,格式:--dst_op_ns sync.oplog
--no_index 是否同步索引
--filter arg 同步过滤语句,格式:--filter {"name":xxx}
--bg_num arg 数据同步线程数
--batch_size arg 数据传输块的大小(0-16M,默认是16M)

3.使用样例

一、集群模式同步

1、带索引实时同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --bg_num 10 --oplog 2>log

2、无索引实时同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --no_index --bg_num 10  --oplog 2>log

3、带索引全量同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --bg_num 10 2>log

4、无索引全量同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --no_index --bg_num 10 2>log

说明:

集群同步模式下同步除admin及local外的所有数据库,同步账号需具有创建数据库、集合、索引,以及数据插入的权限。

二、库模式同步

1、实时同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  dbname --bg_num 10 --oplog 2>log

2、指定目的端库名实时同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  newname --bg_num 10 --oplog 2>log

3、全量同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  dbname --bg_num 10  2>log

4、指定目的端库名全量同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  newname --bg_num 10 2>log

说明:

​ --no_index参数控制是否同步索引

三、集合模式同步

1、实时同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  dbname --coll collname --dst_coll collname --bg_num 10 --oplog 2>log

2、指定目的端集合名实时同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  dbname --coll collname --dst_coll newname --bg_num 10 --oplog 2>log

3、全量同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  dbname --coll collname --dst_coll collname --bg_num 10 2>log

4、指定目的端集合名全量同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  dbname --coll collname --dst_coll newname --bg_num 10 2>log

5、指定查询条件的同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --db dbname --dst_db  dbname --coll collname --dst_coll collname --filter {"name":xxx} --bg_num 10 --oplog 2>log

四、oplog模式同步

1、实时同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --dst_op_ns sync.oplog --bg_num 10 --oplog 2>log

2、全量同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --dst_op_ns sync.oplog --bg_num 10 2>log

3、指定时间戳范围的同步

./mongosync --src_srv 192.168.1.1:27017 --src_user user --src_passwd 123456 --src_auth_db admin  --dst_srv 192.168.1.2:27018 --dst_user user --dst_passwd 123456 --dst_auth_db admin --dst_op_ns sync.oplog --bg_num 10 --op_start 1477812001,1 --op_end 1477812002,888 2>log

4.性能测试数据

测试前提

  1. ping延迟:
    程序执行机 ---> 源端 :约1.5ms
    程序执行机 ---> 目的端:约1.5ms
    源端 ---> 目的端:约1.5ms

  2. 文档数:36,400,000

  3. 数据大小:1.09GB

测试结论

耗时:379s
QPS:10w

说明:采用多线程可以增加数据同步速度,但这受限于MongoDB的写入速度

感谢

mongosync的主要用法和一些实现是参考 https://github.com/dumingyou/mongo-tools 项目的, 在此真诚的感谢mongo-tools的作者。

 

 

 

返回顶部