MongoDB開源:mongosync:360 出品的支持 MongoDB 副本集間數據傳輸的工具
一、 簡介
mongosync是由Qihoo 360公司Web平臺部基礎架構團隊開發維護的一個基于MongoDB協議,依據mongodb同步模塊代碼,深度定制的一款支持MongoDB副本集間數據傳輸的工具。目前,該工具已經在360公司內部投入使用。
主要功能:
1、全量數據同步
2、實時數據同步
3、oplog實時傳輸
二、 特點
1、版本兼容性
? 版本支持情況如下(目前尚不支持mongos):
后續考慮兼容3.2、3.4及更新版本
2、開發語言
? 底層采用C++語言,效率更高,速度更快
3、多線程支持
多線程工作的原理如下圖所示:
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.性能測試數據
測試前提
-
ping延遲:
程序執行機 ---> 源端 :約1.5ms
程序執行機 ---> 目的端:約1.5ms
源端 ---> 目的端:約1.5ms -
文檔數:36,400,000
- 數據大小:1.09GB
測試結論
耗時:379s
QPS:10w
說明:采用多線程可以增加數據同步速度,但這受限于MongoDB的寫入速度
感謝
mongosync的主要用法和一些實現是參考 https://github.com/dumingyou/mongo-tools 項目的, 在此真誠的感謝mongo-tools的作者。