Amazon Web Services ブログ

Amazon DocumentDB 4.0 を 5.0 にニアゼロダウンタイムでアップグレードする

本ブログは “Upgrade Amazon DocumentDB 4.0 to 5.0 with near-zero downtime” を翻訳したものです。

Amazon DocumentDB (MongoDB 互換) は、MongoDB ワークロードをサポートする、高速でスケーラブルで可用性の高いフルマネージド型のドキュメントデータベースサービスです。基盤となるインフラストラクチャの管理について心配することなく、同じ MongoDB 3.6、4.0、5.0 アプリケーションコード、ドライバ、およびツールを使用して、Amazon DocumentDB でワークロードを実行、管理、およびスケーリングできます。Amazon DocumentDB はドキュメントデータベースであるため、JSON データの格納、クエリ、インデックス作成が行えます。

Amazon DocumentDB バージョン 5.0 のリリースにより、Amazon DocumentDB クラスターのバージョン 3.6 および 4.0 から 5.0 へのメジャーバージョンアップグレードを実行して、複数の拡張機能を活用できるようになりました。Amazon DocumentDB 5.0 は、ベクター検索、ドキュメント圧縮、I/O 最適化ストレージ、インデックス構築ステータスによる高速インデックス作成、クライアント側 Field Level Encryption (FLE) などをサポートしています。

この投稿では、メジャーバージョンのインプレースアップグレードAmazon DocumentDB ボリュームクローニングAWS Database Migration Service (AWS DMS) を使用して、Amazon DocumentDB 4.0 から 5.0 へのダウンタイムをほとんど発生させずにアップグレードする方法を記載します。

既存のアップグレードオプション

現在、Amazon DocumentDB 4.0 のユーザーは、以下の方法を使用して Amazon DocumentDB 5.0 へのメジャーバージョンアップグレードを実行できます。

  • mongodump と mongorestoremongodumpmongorestore などのコマンドラインユーティリティを使用して Amazon DocumentDB データベースのバイナリバックアップを作成し、それらを新しい Amazon DocumentDB 5.0 クラスターに復元できます。この方法では、アップグレード中に Amazon DocumentDB クラスターがオフラインになるため、ダウンタイムに耐えられるワークロードに最適です。
  • AWS DMS — AWS DMS を使用して、既存のクラスターから新しい Amazon DocumentDB 5.0 クラスターにデータを移行することができます。AWS DMS はマネージド型サービスで、サポートされているソースやターゲット間で既存のデータを移行するために使用できます。この方法では、追加の DocumentDB I/O 料金と AWS DMS の使用料が発生します。詳細については、「AWS データベース移行サービスを使用した Amazon DocumentDB クラスターのアップグレード」を参照してください。
  • インプレース メジャーバージョン アップグレード — この機能を使用すると、データの移行やエンドポイントを変更したりする必要なく、Amazon DocumentDB クラスターのインプレースアップグレードを実行できますが、ダウンタイムが必要となり、ダウンタイムの長さはコレクション、データベース、コレクション、インデックスの数によって異なります。詳細については、インプレース メジャーバージョン アップグレードのドキュメントを参照してください。

ソリューション概要

この記事では、メジャーバージョンのインプレースアップグレード、ボリュームクローニング、AWS DMS を使用して、ダウンタイムをほとんど発生させずにメジャーバージョンアップグレードを実行するハイブリッドアプローチについて説明します。このアプローチでは、クラスターデータ全体を新しいエンドポイントに移行する際に通常かかる I/O コストとアップグレードに要する時間を最小限に抑えることもできます。この手法は下記の流れで実施します。

  1. Amazon DocumentDB クラスターで変更ストリームを有効にする
  2. Amazon DocumentDB クラスターのクローンを作成します
  3. クローンしたクラスターでインプレースメジャーバージョンアップグレードを実行します
  4. AWS DMS を使用して Amazon DocumentDB クラスターからクローンクラスターに変更データキャプチャ (CDC) を複製します
  5. レプリケーションが終了したら、アプリケーションエンドポイントをクローンクラスターに変更します
  6. アップグレード後のクリーンアップを実行します

前提条件

さらに進めるには、AWS DMS、インプレースメジャーバージョンアップグレード、およびボリュームクローニングについて高いレベルで理解している必要があります。このソリューションを利用すると、Amazon DocumentDB 変更ストリーム、AWS DMS レプリケーションインスタンス、その他のリソースに関連して、アカウントで発生するコストを最小限に抑えることができます。AWS Pricing Calculator ツールを使用すると、設定に基づいてコストを見積もることができます。

Amazon DocumentDB クラスターをより高いバージョンにアップグレードする場合は、廃止された機能や演算子、または使用方法の変更がないか確認してください。アプリケーションを新しいバージョンに対して実行し、アプリケーションに意図的な変更がない限り、動作とパフォーマンスが以前のバージョンと同じであることを確認します。

エンドポイントの切り替え時に、ある程度のダウンタイムが発生することに注意してください。実稼働環境で試す前に、検証環境でこのアプローチを複数回ドライランすることを強くお勧めします。

Amazon DocumentDB クラスターで変更ストリームを有効にする

Amazon DocumentDB クラスターのメジャーバージョンアップグレードを最小限のダウンタイムで実行するには、クラスターで変更ストリームを有効にする必要があります。変更ストリームは、Amazon DocumentDB クラスター内で発生する更新イベントを時系列で提供します。

CDC でトランザクション漏れが発生しないように、変更ストリームログの保持期間を設定する必要があります。変更ストリームログのデフォルトの保持期間は 3 時間です。この期間は 1 時間から 7 日の間の任意の値に設定できます。この属性は 24 時間以上に設定することをおすすめします。

次の AWS コマンドラインインターフェイスでは、保持期間が 24 時間に延長されます。

aws docdb modify-db-cluster-parameter-group \
     --db-cluster-parameter-group-name <parameter group name> \
     --parameters "ParameterName=change_stream_log_retention_duration,
                   ParameterValue=86400,ApplyMethod=immediate"

Amazon DocumentDB コンソールから変更ストリームを有効にすることもできます。

すべてのデータベースで変更ストリームを有効にするには、Amazon DocumentDB クラスターに接続し、次のコマンドを使用して変更ストリームを有効にします。

db.adminCommand({modifyChangeStreams: 1,database :"",enable: true});

変更ストリームの作成を確認するには、$listChangeStreams アグリゲーションパイプラインステージを使用して、クラスターで有効になっているすべての変更ストリームを一覧表示します。詳細については、「変更ストリームの有効化」を参照してください。

Amazon DocumentDB クラスターのクローン

Amazon DocumentDB のクローニングでは、お使いの Amazon DocumentDB プロダクションクラスターと同じ Amazon DocumentDB クラスターボリュームを使用し、同じデータを持つ新しいクローンクラスターを作成できます。クローンの作成は、スナップショットの復元などの他の手法を使用してデータを物理的にコピーするよりも高速で、スペース効率も高くなります。

Amazon DocumentDB プロダクションクラスターのクローンを作成するには、以下のステップを実行します。

  1. Amazon DocumentDB コンソールのナビゲーションペインで、[クラスター] を選択します。
  2. Amazon DocumentDB プロダクションクラスターを選択し、[アクション] メニューで [クローンの作成] を選択します。

  1. [クラスター識別子] に、クローンされた Amazon DocumentDB クラスターに付ける名前を入力します (たとえば、cloned-docdb-cluster など)。
  2. [インスタンス]、[構成]、[ネットワーク設定]、[保存時の暗号化]、[ログのエクスポート]、[ポート]、[削除保護] では、Amazon DocumentDB クラスターと同じ設定を選択します。Amazon DocumentDB クラスターとインスタンスの設定の詳細については、Amazon DocumentDB クラスターの管理を参照してください。
  3. [クローンを作成] を選択して、選択した Amazon DocumentDB クラスターのクローンを起動します。クローンが作成されると、他の Amazon DocumentDB クラスターとともに [クラスター] ページに表示され、現在の状態が表示されます。状態が Available になると、クローンは使用できる状態になります。

  1. クラスターページで、クローンクラスターを選択し、構成タブに移動して、クラスターの作成時間をメモします。

クローンされたクラスターでインプレースメジャーバージョンアップグレードを実行する

このステップでは、データを移行したりエンドポイントを変更したりせずに、複製された Amazon DocumentDB 4.0 クラスターを 5.0 にアップグレードします。クローンされたクラスターでメジャーバージョンのインプレースアップグレードを実行しても、追加料金は発生しません。

インプレースメジャーバージョンアップグレードを実行する前に、前提条件となるステップをすべて完了していることを確認してください。詳細については、Amazon DocumentDB インプレースメジャーバージョンアップグレードを参照してください。

Amazon DocumentDB イベントのサブスクライブの手順に従って、クローンクラスターのメンテナンスイベントをサブスクライブします。次に、以下のステップを実行してクラスターをアップグレードします。

  1. Amazon DocumentDB コンソールのクラスターページでクローンクラスターを選択し、アクションメニューで [変更] を選択します。

  1. [クラスター識別子] に、クラスターの名前を入力します。
  2. [エンジンバージョン] には 5.0.0 を選択します。
  3. VPC セキュリティグループを指定します。
  4. クラスターオプションセクションで、適切なデフォルトまたはカスタムクラスターパラメータグループを選択し、[Continue] を選択します。
  5. 「変更のスケジュール設定」セクションで、「すぐに適用」を選択します。
  6. [Modify cluster] を選択して、クラスターのインプレースアップグレードを開始します。これで、クラスターのステータスが Upgrade に変わります。アップグレードが完了すると、クラスターのステータスが Available に戻り、「データベースクラスターのメジャーバージョンがアップグレードされました」というイベントが表示されます。イベントページを監視することで、アップグレードの進行状況を追跡できます。
  7. インプレースメジャーバージョンアップグレードが完了したら、サニティチェックを実行して、アップグレードしたクローンが機能していて、すべてのデータとインデックスが損なわれていないことを確認します。

注:データの不整合が発生する可能性があるため、複製したクラスターのデータを変更しないように注意してください。

AWS DMS を使用して、ソースクラスターからクローンクラスターに CDC をレプリケートする

このステップでは、クローンの作成後に行われたすべてのデータベース変更をレプリケートすることで、クローンクラスターを Amazon DocumentDB ソースクラスターと同期させます。AWS DMS レプリケーションインスタンスは、Amazon DocumentDB プロダクションクラスターに接続してデータを読み取り、それをターゲットのクローンクラスターに書き込むことで CDC を実行します。

AWS DMS レプリケーションインスタンスを作成する

レプリケーションインスタンスを作成するには、以下のステップを実行します。

  1. AWS DMS コンソールで [レプリケーションインスタンスを作成] を選択します。
  2. 名前 (docdb40todocdb50 など) とオプションの説明を入力します。
  3. インスタンスクラスでは、必要に応じてサイズを選択します。
  4. [エンジンバージョン] で [3.5.1] を選択します。
  5. Amazon VPC の場合は、ソースとターゲットの Amazon DocumentDB クラスターを収容する VPC を選択してください。
  6. [割り当て済みストレージ] には、デフォルトの 50 GiB を使用します。書き込みスループットのワークロードが高い場合は、ワークロードに合わせてこの値を増やしてください。
  7. マルチ AZ では、高可用性とフェイルオーバーサポートが必要な場合は [はい] を選択してください。
  8. パブリックにアクセスできるようにするには、このオプションを有効にします。
  9. [レプリケーションインスタンスを作成] を選択します。

AWS DMS のソースエンドポイントとターゲットエンドポイントの作成

ソースエンドポイントを作成するには、以下のステップを実行します。

  1. AWS DMS コンソールのナビゲーションペインで [Endpoints] を選択します。
  2. [エンドポイントの作成] を選択します。
  3. [エンドポイントタイプ] で [ソース] を選択します。
  4. [エンドポイント識別子] には、覚えやすい名前 (docdb40-source など) を入力します。
  5. [ソースエンジン] には [Amazon DocumentDB] を選択します。
  6. [サーバー名] には、Amazon DocumentDB プロダクションクラスターの DNS 名を入力します。
  7. ポートには、Amazon DocumentDB プロダクションクラスターのポート番号を入力します。
  8. SSL モードの場合は、[すべてを確認] を選択します。
  9. CA 証明書の場合は、「新しい CA 証明書の追加」を選択し、次の手順を実行します。
    1. 新しい CA 証明書をダウンロードして TLS 接続バンドルを作成します。
    2. 「証明書の識別子」には、global-bundle.pem と入力します。
    3. [新しい CA 証明書の追加] で [ファイルを選択] を選択し、ダウンロードした.pem ファイルに移動します。
    4. ファイルを選択して開きます。
    5. [証明書のインポート] を選択し、[証明書の選択] ドロップダウンメニューで global-bundle.pem を選択します。
  10. [ユーザー名] には、ソースクラスターのプライマリユーザー名を入力します。
  11. Password には、ソースクラスターのプライマリパスワードを入力します。
  12. Amazon DocumentDB クラスターのすべてのデータベースから CDC を複製する場合は、[データベース名] を空白のままにします。または、テーブルマッピングを使用して特定のデータベースを指定することもできます。

  1. エンドポイント接続をテストし、接続が機能することを確認します

  1. [エンドポイントの作成] を選択します。
  2. 2 つ目のエンドポイントを作成し、エンドポイントタイプに Target を選択し、クローンしたクラスターの詳細を指定します。

AWS DMS 移行タスクを作成する

AWS DMS タスクはレプリケーションインスタンスをソースインスタンスおよびターゲットインスタンス関連付けます。移行タスクを作成するときは、ソースエンドポイント、ターゲットエンドポイント、レプリケーションインスタンス、および必要な移行設定を指定します。AWS DMS タスクには、「既存のデータを移行する」、「既存のデータを移行して、継続的な変更をレプリケートする」、「データ変更のみをレプリケートする」の 3 つの移行タイプがあります。

クラスター作成の開始までにすべてのデータを含むボリュームクローンを使用してターゲットクラスターを作成した場合は、クラスター作成後にソースで発生した差分変更をコピーするだけでよいので、AWS DMS の「データ変更のみをレプリケートする」移行タイプを使用します。このオプションを使用すると、AWS DMS はソースクラスターの動作を維持したまま、変更内容をクラスターからクローンクラスターにレプリケートします。最終的に、ソースデータベースとターゲットデータベースは同期され、移行のダウンタイムはほぼゼロになります。

次の手順を実行して移行タスクを作成します。

  1. AWS DMS コンソールのナビゲーションペインで [Tasks] を選択します。
  2. [タスクを作成] を選択します。
  3. [タスク識別子] に、名前 (mvu-cdc-task など) を入力します。
  4. [レプリケーションインスタンス] で、作成したレプリケーションインスタンスを選択します。
  5. [ソースデータベースエンドポイント] で、作成したソースエンドポイントを選択します。
  6. [ターゲットデータベースエンドポイント] で、作成したターゲットエンドポイントを選択します。
  7. [移行タイプ] で [データ変更のみをレプリケート] を選択します。

  1. 「タスク設定」セクションで、「ウィザード」を選択し、「カスタム CDC 開始モードを有効にする」を選択します。
  2. 開始時間を、先ほど書き留めたクローンクラスターの作成時間の 2 分早く指定してください。
  3. [ターゲットテーブル準備モード] で [何もしない] を選択します。
  4. LOB 列の設定では、デフォルトの最大 LOB サイズ (32) で制限付き LOB モードを選択します。
  5. [CloudWatch ログの有効化] を選択します。

  1. 詳細タスク設定はデフォルト設定のままにします。
  2. テーブルマッピングでは、[ウィザード] を選択します。
  3. 「選択ルール」で、スキーマには「EnterSchema」、ソース名には「%」、ターゲット名には「%」、「アクション」には「include」を選択します。
  4. [タスクを作成] を選択します。

監視と検証

これで、AWS DMS はソース Amazon DocumentDB クラスターからターゲット Amazon DocumentDB クラスターへの CDC のレプリケーションを開始します。タスクステータスが [開始] から [レプリケーション中] に変わるはずです。AWS DMS コンソールのタスクページで進捗状況をモニタリングできます。変更内容によっては、数分から数時間かかることがあります。DMS タスクに並列スレッドを追加することで、CDC のスループットを向上させることができます。

最終的に、ソースとターゲットは同期されます。コレクションで count () 操作を実行してすべての変更イベントが移行されたことを確認することで、両者が同期しているかどうかを確認できます。

Amazon DocumentDB DataDiffer ツールを使用してデータ検証を実行することもできます。

レプリケーションが追いついたら、アプリケーションエンドポイントを 5.0 クラスターに変更

新しい Amazon DocumentDB 5.0 クラスターが同期され、すべてのチェックに合格したことを確認したら。これで、アプリケーションのデータベース接続エンドポイントを Amazon DocumentDB クラスターから Amazon DocumentDB 5.0 クラスターに変更する準備が整いました。

アップグレード後のクリーンアップを実行

以下の手順を実行してリソースをクリーンアップできます。

  1. Amazon DocumentDB クラスターを削除します。
  2. Amazon DocumentDB 5.0 プロダクションクラスターの変更ストリームを無効にします。
  3. 必要に応じて AWS DMS インスタンス、レプリケーションタスク、エンドポイントをすべて削除します。
  4. Amazon DocumentDB 5.0 クラスターにインスタンスを追加して Amazon DocumentDB プロダクションクラスターに一致させるには、Amazon DocumentDB コンソールのクラスターページでクローンクラスターを選択し、アクションメニューで [インスタンスを追加] を選択します。
  5. Amazon DocumentDB 4.0 クラスターにあったモニタリングとアラートをコピーまたは設定します。

結論

この投稿では、インプレースメジャーバージョンアップグレードと AWS DMS を使用して、Amazon DocumentDB 4.0 から 5.0 にアップグレードする方法と、ダウンタイムをほぼゼロに抑える方法を紹介しました。

Amazon DocumentDB 5.0 は、ベクター検索、ドキュメント圧縮、I/O 最適化ストレージ、インデックス構築ステータスによるインデックス作成の高速化、クライアント側 FLE などをサポートしています。Amazon DocumentDB クラスターのバージョン 3.6 と 4.0 から 5.0 へのメジャーバージョンアップグレードを実行することで、複数の拡張機能を活用できます。詳細については、ドキュメントを参照してください。


著者について

Kunal Agarwal は、アマゾンウェブサービスのシニアプロダクトマネージャーです。Kunal はデータに情熱を傾け、顧客の問題を解決するスケーラブルな製品を構築することが大好きです。AWS に入社する前、Kunal はテクノロジー業界で製品管理と戦略に 12 年間携わっていました。
Anshu Vajpayee は、アマゾンウェブサービス (AWS) のシニア DocumentDB スペシャリストソリューションアーキテクトです。彼は、お客様が NoSQL データベースを採用し、Amazon DocumentDB を活用したアプリケーションをモダナイズできるよう支援してきました。AWS に入社する前は、リレーショナルデータベースと NoSQL データベースを幅広く扱っていました。

本ブログの翻訳はソリューション アーキテクトの大井が担当しました。