本文檔介紹如何通過MongoShake實現實例間的延遲同步。
前提條件
MongoShake版本為2.4.6及以上。詳情請參見MongoShake發布頁面。
背景信息
在使用MongoShake實時同步多個實例時,當用戶在主實例中執行了誤操作以后,MongoShake會將該誤操作實時同步到從實例,導致最終只能通過數據恢復來復原。因此,MongoShake在2.4.6版本的更新中提供了設置延遲同步的參數,給主從實例之間的同步設置一段緩沖的時間,當主實例中執行了誤操作后,可以在這段時間內關閉同步,并直接將業務切換到還未發生誤操作的從實例。
本文檔著重介紹延遲同步參數incr_sync.target_delay
,有關使用MongoShake的其他事項請參見使用MongoShake實現MongoDB實例間的單向同步。
準備工作
為達到最理想的同步性能,請確保源端MongoDB副本集實例的網絡類型為專有網絡VPC,如果是經典網絡,請切換成專有網絡VPC。更多信息,請參見經典網絡切換為專有網絡。
創建作為同步目標端的MongoDB副本集實例,在創建的時候請選擇與源端MongoDB副本集實例相同的專有網絡VPC,以獲取最低的網絡延遲。更多信息,請參見創建副本集實例。
創建用于運行MongoShake的ECS實例,在創建的時候請選擇與源端MongoDB副本集實例相同的專有網絡VPC,以獲取最低的網絡延遲。更多信息,請參見創建ECS實例。
將ECS的內網IP地址加入至源端和目標端MongoDB實例的白名單中,并確保ECS可以連接源端和目標端MongoDB實例。 更多信息,請參見修改白名單。
搭建MongoDB間的延遲同步架構
本示例以ECS上的Ubuntu系統為例介紹如何搭建延遲同步架構。詳情請參見使用MongoShake實現MongoDB實例間的單向同步。
登錄ECS實例,具體請參見登錄ECS實例。
執行如下命令格式下載MongoShake程序。
wget 最新版MongoShake包下載地址
示例:
wget https://github.com/alibaba/MongoShake/releases/download/release-v2.0.7-20190817/mongo-shake-2.0.7.tar.gz
說明最新版本的MongoShake包下載地址請參見releases頁面。
執行如下命令格式解壓MongoShake程序。
tar xvf mongoshake包文件名
示例:
tar xvf mongo-shake-2.0.7.tar.gz
執行
vi collector.conf
命令配置MongoShake。各參數說明請參見MongoShake參數表。找到incr_sync.target_delay
參數,根據實際業務需求設置該參數的值,單位為秒。本示例中將延遲時間設置為30分鐘。incr_sync.target_delay = 1800
保存并退出collector.conf文件,至此延遲同步架構已經搭建完畢。
執行如下命令使用配置好的collector.conf文件開啟同步,并打印日志信息。
./collector.linux -conf=collector.conf -verbose
說明此時您在主實例中執行的任何更改,都將會在30分鐘后同步到從實例。
誤操作后切換主從實例
在主實例中日常執行CURD操作時,可能會存在某條語句誤寫入等誤操作的情況發生,此時您可以通過下列步驟將業務切換到還沒有發生誤操作的從實例中。
通過查詢MongoDB的操作日志(oplog)定位到誤操作發生的時間點。例如:您可以通過執行如下命令來查詢2020年06月01日至2020年06月02日之間所有的操作日志。關于查詢oplog的詳情請參見MongoDB官方文檔。
use local #切換到local數據庫 db.oplog.rs.find({"o.createTime": {$gte:new Date(2020,6,1),$lte:new Date(2020,6,2)}}) #根據條件查看oplog。
通過RESTful接口遠程向MongoShake注入ExitPoint參數來實現在指定時間點終止MongoShake程序的目的。命令格式如下:
curl -X POST --data '{"ExitPoint": <Unix時間戳>}' <MongoShake服務器ID>:<端口號>/sentinel/options
示例:
curl -X POST --data '{"ExitPoint": 1593534600}' 127.0.0.1:9100/sentinel/options
說明1593534600
是Unix時間戳,表示2020年06月30日16:30:00。MongoShake同步到這個時間點后將會自動退出。執行
vi collector.conf
命令打開配置文件,將原主從實例的地址調換。詳細操作方法請參見使用MongoShake實現MongoDB實例間的單向同步。執行如下命令使用配置好的collector.conf文件重新開啟同步,并打印日志信息。
./collector.linux -conf=collector.conf -verbose
將業務切換到最新的主實例上,完成主從實例切換操作。
監控MongoShake狀態
詳情請參見監控MongoShake狀態。