全部產品
Search
文件中心

ApsaraDB for MongoDB:使用MongoShake實現MongoDB執行個體間的延遲同步

更新時間:Jun 19, 2024

本文檔介紹如何通過MongoShake實現執行個體間的延遲同步。

前提條件

MongoShake版本為2.4.6及以上。詳情請參見MongoShake發佈頁面

背景資訊

在使用MongoShake即時同步多個執行個體時,當使用者在主執行個體中執行了誤操作以後,MongoShake會將該誤操作即時同步到從執行個體,導致最終只能通過資料恢複來複原。因此,MongoShake在2.4.6版本的更新中提供了設定延遲同步的參數,給主從執行個體之間的同步設定一段緩衝的時間,當主執行個體中執行了誤操作後,可以在這段時間內關閉同步,並直接將業務切換到還未發生誤操作的從執行個體。

說明

本文檔著重介紹延遲同步參數incr_sync.target_delay,有關使用MongoShake的其他事項請參見使用MongoShake實現MongoDB執行個體間的單向同步

準備工作

  1. 為達到最理想的同步效能,請確保源端MongoDB複本集執行個體的網路類型為Virtual Private Cloud,如果是傳統網路,請切換成Virtual Private Cloud。更多資訊,請參見傳統網路切換為專用網路

  2. 建立作為同步目標端的MongoDB複本集執行個體,在建立的時候請選擇與源端MongoDB複本集執行個體相同的Virtual Private Cloud,以擷取最低的網路延遲。更多資訊,請參見棄置站台集執行個體

  3. 建立用於運行MongoShake的ECS執行個體,在建立的時候請選擇與源端MongoDB複本集執行個體相同的Virtual Private Cloud,以擷取最低的網路延遲。更多資訊,請參見建立ECS執行個體

  4. 將ECS的內網IP地址加入至源端和目標端MongoDB執行個體的白名單中,並確保ECS可以串連源端和目標端MongoDB執行個體。 更多資訊,請參見修改白名單

說明

如果您沒有達到上述網路類型的要求,可以分別申請源端和目標端MongoDB執行個體的公網串連地址,並將ECS的公網地址加入至源端和目標端MongoDB執行個體的白名單中,通過公網地址進行同步操作。更多資訊,請參見申請公網串連地址修改白名單

搭建MongoDB間的延遲同步架構

本樣本以ECS上的Ubuntu系統為例介紹如何搭建延遲同步架構。詳情請參見使用MongoShake實現MongoDB執行個體間的單向同步

  1. 登入ECS執行個體,具體請參見登入ECS執行個體

  2. 執行如下命令格式下載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頁面

  3. 執行如下命令格式解壓MongoShake程式。

    tar xvf mongoshake包檔案名稱

    樣本:

    tar xvf mongo-shake-2.0.7.tar.gz
  4. 執行vi collector.conf命令配置MongoShake。各參數說明請參見MongoShake參數表。找到incr_sync.target_delay參數,根據實際業務需求設定該參數的值,單位為秒。本樣本中將延遲時間設定為30分鐘。

    incr_sync.target_delay = 1800
  5. 儲存並退出collector.conf檔案,至此延遲同步架構已經搭建完畢。

  6. 執行如下命令使用配置好的collector.conf檔案開啟同步,並列印日誌資訊。

    ./collector.linux -conf=collector.conf -verbose
    說明

    此時您在主執行個體中執行的任何更改,都將會在30分鐘後同步到從執行個體。

誤操作後切換主從執行個體

在主執行個體中日常執行CURD操作時,可能會存在某條語句誤寫入等誤操作的情況發生,此時您可以通過下列步驟將業務切換到還沒有發生誤操作的從執行個體中。

  1. 通過查詢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。
  2. 通過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同步到這個時間點後將會自動結束。

  3. 執行vi collector.conf命令開啟設定檔,將原主從執行個體的地址調換。詳細操作方法請參見使用MongoShake實現MongoDB執行個體間的單向同步

  4. 執行如下命令使用配置好的collector.conf檔案重新開啟同步,並列印日誌資訊。

    ./collector.linux -conf=collector.conf -verbose
  5. 將業務切換到最新的主執行個體上,完成主從執行個體切換操作。

監控MongoShake狀態

詳情請參見監控MongoShake狀態