MongoDB开源:mongosync:360 出品的支持 MongoDB 副本集间数据传输的工具
<h2>一、 简介</h2> <p>mongosync是由Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MongoDB协议,依据mongodb同步模块代码,深度定制的一款支持MongoDB副本集间数据传输的工具。目前,该工具已经在360公司内部投入使用。</p> <p> 主要功能:</p> <p> 1、全量数据同步</p> <p> 2、实时数据同步</p> <p> 3、oplog实时传输</p> <h2>二、 特点</h2> <h3>1、版本兼容性 </h3> <p> 版本支持情况如下(目前尚不支持mongos):</p> <p> 后续考虑兼容3.2、3.4及更新版本 </p> <h3>2、开发语言</h3> <p> 底层采用C++语言,效率更高,速度更快</p> <h3>3、多线程支持</h3> <p> 多线程工作的原理如下图所示:</p> <p style="text-align:center"><img alt="Imgur" src="https://simg.open-open.com/show/937f4111b38a2e6b1c95bed203a44e5e.png"></p> <p> </p> <h3>4、支持从库同步</h3> <p> 支持从库作为复制源进行数据同步,减轻主库压力</p> <h3>5、索引同步可配置</h3> <p> 支持数据+索引 / 数据模式,加快数据同步速度</p> <h2>三、使用说明</h2> <h3>1.安装</h3> <ul> <li>获取源代码</li> </ul> <pre> <code> $ git clone https://github.com/jacketwoo/mongosync </code></pre> <ul> <li>编译。进入mongosync目录,执行make命令</li> </ul> <pre> <code>$ make </code></pre> <p>编译完成后,$(MONGOSYNC_ROOT)/output目录下可以发现可执行文件(mongosync)以及配置文件(mongosync.conf)</p> <ul> <li>清理</li> </ul> <pre> <code> $ make clean </code></pre> <p>说明</p> <ul> <li>编译过程中,如果发现缺失依赖包,请根据说明安装相应依赖包</li> <li>请不要使用c++ 11编译</li> </ul> <h3>2.参数说明</h3> <p>程序可以通过命令行及配置文件的方式运行,参数说明如下:<br> --help 获取帮助信息<br> -c conf.file 使用conf.file配置文件启动mongosync<br> --src_srv arg 源端ip及端口信息,格式:--src_srv 192.168.1.1:27017<br> --src_user arg 源端用户<br> --src_passwd arg 源端密码<br> --src_auth_db arg 源端认证库<br> --src_use_mcr 强制源端使用MONGODB-CR密码认证<br> --dst_srv arg 目的端ip及端口信息,格式:--src_srv 192.168.1.2:27018<br> --dst_user arg 目的端用户,需要具有创建数据库,集合,索引等操作权限<br> --dst_passwd arg 目的端密码<br> --dst_auth_db arg 目的端认证库<br> --dst_use_mcr 强制目的端使用MONGODB-CR密码认证<br> --db arg 源端数据库,默认同步除admin及local外的所有数据库<br> --dst_db arg 目的端数据库<br> --coll arg 源端集合,默认同步全部集合<br> --dst_coll arg 目的端集合<br> --oplog 是否同步oplog<br> --raw_oplog 是否只同步oplog<br> --op_start arg oplog同步的开始点位,格式:--op_start 1479436001,1<br> --op_end arg oplog同步的结束点位,格式:--op_start 1479436002,2<br> --dst_op_ns arg oplog同步时目的端的oplog名称,格式:--dst_op_ns sync.oplog<br> --no_index 是否同步索引<br> --filter arg 同步过滤语句,格式:--filter {"name":xxx}<br> --bg_num arg 数据同步线程数<br> --batch_size arg 数据传输块的大小(0-16M,默认是16M)</p> <h3>3.使用样例</h3> <p>一、集群模式同步</p> <p>1、带索引实时同步</p> <pre> ./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</pre> <p>2、无索引实时同步</p> <pre> ./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</pre> <p>3、带索引全量同步</p> <pre> ./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</pre> <p>4、无索引全量同步</p> <pre> ./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</pre> <p>说明:</p> <pre> <code>集群同步模式下同步除admin及local外的所有数据库,同步账号需具有创建数据库、集合、索引,以及数据插入的权限。 </code></pre> <p></p> <p>二、库模式同步</p> <p>1、实时同步</p> <pre> ./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</pre> <p>2、指定目的端库名实时同步</p> <pre> ./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</pre> <p>3、全量同步</p> <pre> ./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</pre> <p>4、指定目的端库名全量同步</p> <pre> ./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</pre> <p>说明:</p> <p> --no_index参数控制是否同步索引</p> <p>三、集合模式同步</p> <p>1、实时同步</p> <pre> ./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</pre> <p>2、指定目的端集合名实时同步</p> <pre> ./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</pre> <p>3、全量同步</p> <pre> ./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</pre> <p>4、指定目的端集合名全量同步</p> <pre> ./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</pre> <p>5、指定查询条件的同步</p> <pre> ./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</pre> <p>四、oplog模式同步</p> <p>1、实时同步</p> <pre> ./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</pre> <p>2、全量同步</p> <pre> ./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</pre> <p>3、指定时间戳范围的同步</p> <pre> ./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</pre> <h2>4.性能测试数据</h2> <h3>测试前提</h3> <ol> <li> <p>ping延迟:<br> 程序执行机 ---> 源端 :约1.5ms<br> 程序执行机 ---> 目的端:约1.5ms<br> 源端 ---> 目的端:约1.5ms</p> </li> <li> <p>文档数:36,400,000</p> </li> <li>数据大小:1.09GB</li> </ol> <h3>测试结论</h3> <p>耗时:379s<br> QPS:10w</p> <p><em>说明:采用多线程可以增加数据同步速度,但这受限于MongoDB的写入速度</em></p> <h2>感谢</h2> <p>mongosync的主要用法和一些实现是参考 <a href="/misc/goto?guid=4959733731255840478" rel="nofollow,noindex">https://github.com/dumingyou/mongo-tools</a> 项目的, 在此真诚的感谢mongo-tools的作者。</p> <p> </p> <p> </p> <p> </p>
本文由用户 JohBEXU 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!