すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for MongoDB:MongoShakeを使用したApsaraDB for MongoDBインスタンス間の遅延同期の実装

最終更新日:Jul 03, 2024

このトピックでは、MongoShakeを使用してApsaraDB for MongoDBインスタンス間の同期遅延を実装する方法について説明します。

前提条件

MongoShakeのバージョンは2.4.6以降である必要があります。 詳細については、MongoShakeリリースページをご覧ください。

背景情報

MongoShakeを使用して複数のインスタンス間でデータをリアルタイムで同期する場合、MongoShakeはプライマリインスタンスの不正操作をセカンダリインスタンスに同期します。 この場合、セカンダリインスタンスのデータを復元して、誤操作を元に戻す必要があります。 この問題を解決するために、遅延同期を可能にするパラメータがMongoShakeバージョン2.4.6に追加され、ApsaraDB for MongoDBインスタンス間のデータ同期のバッファー期間が提供されます。 プライマリインスタンスで誤って操作が実行された場合は、バッファー期間中に同期を無効にし、誤ったデータが同期されていないセカンダリインスタンスにワークロードを移行できます。

説明

このトピックでは、incr_sync.target_delayパラメーターの使用方法について説明します。 MongoShakeの使用方法の詳細については、「MongoShakeを使用してApsaraDB For MongoDBインスタンス間の一方向同期を実行する」をご参照ください。

準備

  1. 最高の同期パフォーマンスを得るために、ソースApsaraDB For MongoDBレプリカセットインスタンスが仮想プライベートクラウド (VPC) にあることを確認してください。 ソースインスタンスがクラシックネットワークにある場合は、ネットワークタイプをVPCに切り替えます。 詳細については、「ApsaraDB For MongoDBインスタンスのネットワークタイプをクラシックネットワークからVPCに切り替える」をご参照ください。

  2. 同期先としてApsaraDB for MongoDBレプリカセットインスタンスを作成します。 ソースApsaraDB for MongoDBレプリカセットインスタンスで使用されているVPCと同じVPCを選択して、ネットワーク遅延を最小限に抑えます。 詳細については、「レプリカセットインスタンスの作成」をご参照ください。

  3. Elastic Compute Service (ECS) インスタンスを作成してMongoShakeを実行します。 ソースApsaraDB for MongoDBインスタンスで使用されているVPCと同じVPCを選択して、ネットワーク遅延を最小限に抑えます。 詳細は、「ECSインスタンスの作成」をご参照ください。

  4. ECSインスタンスのプライベートIPアドレスを、ソースおよびターゲットのApsaraDB for MongoDBインスタンスのホワイトリストに追加します。 ECS インスタンスが同期元および同期先の ApsaraDB for MongoDB インスタンスに接続できることを確認してください。 詳細については、「ApsaraDB For MongoDBインスタンスのIPアドレスホワイトリストの変更」をご参照ください。

説明

ネットワークタイプが上記の要件を満たしていない場合、ソースおよびターゲットApsaraDB for MongoDBインスタンスのパブリックエンドポイントを申請できます。 次に、ECSインスタンスのパブリックIPアドレスを、ソースおよびターゲットのApsaraDB for MongoDBインスタンスのホワイトリストに追加します。 このようにして、インターネット経由でデータを同期できます。 詳細については、「パブリックエンドポイントの申請」および「ApsaraDB For MongoDBインスタンスのIPアドレスホワイトリストの変更」をご参照ください。

ApsaraDB for MongoDBインスタンス間の遅延同期の設定

次の例では、Ubuntu Elastic Compute Service (ECS) インスタンスを使用して、ApsaraDB for MongoDBインスタンス間の遅延同期を設定する方法について説明します。 詳細については、「MongoShakeを使用したApsaraDB For MongoDBインスタンス間の一方向同期の実行」をご参照ください。

  1. ECSインスタンスにログインします。 詳細については、「サードパーティのクライアントのユーザー名とパスワードを使用してLinuxインスタンスに接続する」をご参照ください。

  2. 次のコマンドを実行して、MongoShakeパッケージをダウンロードします。

    wget <Download URL of the latest MongoShake package>

    サンプルコード:

    wget https://github.com/alibaba/MongoShake/releases/download/release-v2.0.7-20190817/mongo-shake-2.0.7.tar.gz
    説明

    最新のMongoShakeパッケージのダウンロードURLの詳細については、MongoShakeリリースページをご覧ください。

  3. 次のコマンドを実行して、MongoShakeパッケージを解凍します。

    tar xvf <Name of the MongoShake package>

    サンプルコード:

    tar xvf mongo-shake-2.0.7.tar.gz
  4. vi collector.confコマンドを実行し、MongoShakeを設定します。 設定する必要があるパラメーターについては、「MongoShakeパラメーター」をご参照ください。 collector.confファイルでincr_sync.target_delayパラメーターを見つけ、ビジネス要件に基づいてこのパラメーターを設定します。 パラメータ値は秒単位で測定されます。 この例では、バッファ期間は1,800秒に設定されています。

    incr_sync.target_delay = 1800
  5. collector.confファイルを保存して閉じ、設定を完了します。

  6. 次のコマンドを実行して、collector.confファイルと印刷ログに基づいて同期を開始します

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

    MongoShakeは、変更の30分後にプライマリインスタンスの変更をセカンダリインスタンスに同期します。

不正操作後にプライマリインスタンスとセカンダリインスタンス間の切り替えを実行する

プライマリインスタンスで作成、読み取り、更新、削除 (CURD) 操作を実行すると、誤操作が発生する可能性があります。 たとえば、ステートメントを実行して、不要なデータをプライマリインスタンスに書き込みます。 誤操作に対応するには、次の手順に従って、誤ったデータが同期されていないセカンダリインスタンスにワークロードを移行します。

  1. プライマリApsaraDB for MongoDBインスタンスのoplogを照会して、誤操作が発生した時刻を特定します。 たとえば、次のコマンドを実行して、2020年6月1日から2020年6月2日までに生成されたすべてのoplogを照会できます。 oplogのクエリ方法の詳細については、「MongoDB公式ドキュメント」をご参照ください。

    use local#Switch to the local database.
    db.oplog.rs.find({"o.createTime": {$gte:new Date(2020,6,1),$lte:new Date(2020,6,2)}}) #Query oplogs based on the specified conditions.

  2. 次のRESTful APIコマンドを実行して、MongoShakeにExitPointパラメーターを挿入し、指定した時点でMongoShakeプログラムを終了します。

    curl -X POST --data '{"ExitPoint": <Unix timestamp>}' <MongoShake server ID>:<Port number>/sentinel/options

    サンプルコード:

    curl -X POST --data '{"ExitPoint": 1593534600}' 127.0.0.1:9100/sentinel/options
    説明

    文字列1593534600は、2020年6月30日16:30:00を示すUNIXタイムスタンプです。 MongoShakeは指定された時点で自動的に終了します。

  3. vi collector.confコマンドを実行してcollector.confファイルを開き、プライマリインスタンスとセカンダリインスタンスのIPアドレスを交換します。 詳細については、「MongoShakeを使用したApsaraDB For MongoDBインスタンス間の一方向同期の実行」をご参照ください。

  4. 次のコマンドを実行して、collector.confファイルに基づいて同期を再起動し、ログを印刷します

    . /collector.linux -conf=collector.conf -verbose
  5. ワークロードを新しいプライマリインスタンスに移行して、切り替え操作を完了します。

MongoShake のステータスをモニターする

詳細については、「MongoShakeステータスの監視」をご参照ください。