本文檔介紹如何通過MongoShake實現執行個體間的延遲同步。
前提條件
MongoShake版本為2.4.6及以上。詳情請參見MongoShake發佈頁面。
背景資訊
在使用MongoShake即時同步多個執行個體時,當使用者在主執行個體中執行了誤操作以後,MongoShake會將該誤操作即時同步到從執行個體,導致最終只能通過資料恢複來複原。因此,MongoShake在2.4.6版本的更新中提供了設定延遲同步的參數,給主從執行個體之間的同步設定一段緩衝的時間,當主執行個體中執行了誤操作後,可以在這段時間內關閉同步,並直接將業務切換到還未發生誤操作的從執行個體。
本文檔著重介紹延遲同步參數incr_sync.target_delay
,有關使用MongoShake的其他事項請參見使用MongoShake實現MongoDB執行個體間的單向同步。
準備工作
為達到最理想的同步效能,請確保源端MongoDB複本集執行個體的網路類型為Virtual Private Cloud,如果是傳統網路,請切換成Virtual Private Cloud。更多資訊,請參見傳統網路切換為專用網路。
建立作為同步目標端的MongoDB複本集執行個體,在建立的時候請選擇與源端MongoDB複本集執行個體相同的Virtual Private Cloud,以擷取最低的網路延遲。更多資訊,請參見棄置站台集執行個體。
建立用於運行MongoShake的ECS執行個體,在建立的時候請選擇與源端MongoDB複本集執行個體相同的Virtual Private Cloud,以擷取最低的網路延遲。更多資訊,請參見建立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狀態。