[アップデート] Amazon DocumentDB グローバルクラスターが Switchover/Failover をサポートしました

[アップデート] Amazon DocumentDB グローバルクラスターが Switchover/Failover をサポートしました

Clock Icon2024.08.24

こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。

Amazon DocumentDB のグローバルクラスターが、フェイルオーバーとスイッチオーバーをサポートしました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/08/amazon-documentdb-mongodb-compatibility-global-clusters-failover/

https://aws.amazon.com/jp/about-aws/whats-new/2024/08/amazon-document-mongodb-compatibility-global-clusters-switchover/

DR 対策のために DocumentDB でグローバルクラスターを組んでいる方には、待望のアップデートなのではないでしょうか。(私は待望のアップデートです)

早速、アップデート前をおさらいしていきましょう。

アップデート前

アップデート前の DocumentDB グローバルクラスターは、正直 DR の切り戻しが非常に大変でした。

と言うのも、 Aurora グローバルデータベースや ElastiCache グローバルデータストアのように、 API 1 つでポチッと切り替えできるわけではなく、グローバルクラスターからリージョンクラスターを切り離すことでクラスターの昇格を行う仕様でした。

00.png

余談ですが、以前から API は生えてたものの、以下のように「サポートしていないよ!」とレスポンスが返ってきてる状態でした。

[cloudshell-user@ip-10-132-71-164 ~]$ aws docdb --region us-east-1 switchover-global-cluster --global-cluster-identifier blog-docdb-global-cluster --target-db-cluster-identifier $DOCDB_SECONDARY_CLUSTER_ARN

An error occurred (InvalidParameterValue) when calling the SwitchoverGlobalCluster operation: Global switchover isn't supported for docdb

せっかくなので、アップデート前の切り替え、切り戻し手順を振り返ります。

プライマリリージョンはマルチ AZ 構成/セカンダリリージョンはヘッドレスクラスターの構成とします。(切り替え/切り戻しはダウンタイムを設けて実施するものと仮定します。)

00 (1).png

切り替え

インスタンスの追加

セカンダリのヘッドレスクラスターに対してインスタンスの追加を行います。DB インスタンスの追加は後続のグローバルクラスターからの切り離しと順番前後しても構いません。

01.png

グローバルクラスターからの切り離し

セカンダリのリージョンクラスターを、グローバルクラスターから切り離します。これによりセカンダリのリージョンクラスターに属するインスタンスがプライマリインスタンスへ昇格します。

00.png

最後にクライアントの DocumentDB のエンドポイントを切り替えてあげることで、切り替えが完了します。

切り戻し

本題はここからです。当時の DocumentDB は切り戻しが大変でした。

大前提として、既存のリージョンクラスターが DocumentDB グローバルクラスターへ参加することはできません。(クラスター間でデータの不整合が発生しないようにするため)

つまり、セカンダリのリージョンクラスターから、新しくグローバルクラスターを作成する必要があります。

03.png

グローバルクラスターのクラスター識別子は ARN で利用されているため、 AWS アカウント内で重複不可となります。

arn:aws:rds::123456789123:global-cluster:blog-docdb-global-cluster

そのため、新しく名前を命名する or 今まで使っていたグローバルクラスターを削除し、元の名前でグローバルクラスターを作るの 2 択になります。

今回は今まで使っていたグローバルクラスターを削除し、元の名前でグローバルクラスターを作る方法を選択したとします。

04.png

グローバルクラスターの削除

グローバルクラスターを削除するには、すべてのクラスターメンバーを削除する必要があります。

2024-08-23 at 15.27.38-クラスター  Amazon DocumentDB  us-east-1.png

よって、グローバルクラスターからリージョンクラスターを切り離します。この操作より、すべてのクラスターが独立する状態となります。

05.png

晴れて削除できるようになったため、グローバルクラスターの削除を行います。

06.png

グローバルクラスターの作成

セカンダリリージョンのリージョンクラスターからグローバルクラスターを再作成します。

07.png

リージョンクラスターの削除

リージョンクラスターが DocumentDB グローバルクラスターへ再参加することはできないため、プライマリリージョンのリージョンクラスターを削除します。

バックアップは必ず取っておきましょう。(?[1]

08.png

リージョンクラスターの作成

プライマリリージョンのクラスターを再作成します。DB インスタンスも必要に応じて作成します。

この時点では、プライマリリージョンのクラスターはセカンダリクラスターとして動いています。そのため書き込みオペレーションは、セカンダリリージョンで行われる状態です。

09.png

プライマリクラスターへの切り替え

セカンダリリージョンのクラスターをグローバルクラスターから切り離し、プライマリリージョンのクラスターへ書き込みを切り替えます。

10.png

セカンダリクラスターの削除

繰り返しになりますが、リージョンクラスターがグローバルクラスターへ再参加することはできないため、セカンダリのリージョンクラスターを削除します。

11.png

セカンダリクラスターの作成

最後にグローバルクラスターから、セカンダリクラスターを作成し切り戻しは完了です。

00 (1).png

図解のため比較的内容がサラッとしていますが、実は手順にすると膨大でクラスターの削除/再作成を繰り返す内容です。手順が整えばとは言いつつもできればやりたくないですね。

アップデート後

今回のアップデートで、先ほどの切り替え/切り戻し作業が非常に簡単になります。控えめに言って神です。

フェイルオーバー/スイッチオーバー

フェイルオーバーとスイッチオーバーについておさらいします。

フェイルオーバーは計画外の切り替え、スイッチオーバーは計画的な切り替えです。

使い分けは以下の通りです。

  • フェイルオーバー
    • プライマリリージョンが実際に障害が起きたケースで利用する
  • スイッチオーバー
    • 障害訓練など計画された切り替えで利用する

なお、スイッチオーバーは、すべてのセカンダリリージョンクラスターがプライマリリージョンクラスターと完全に同期されるまで待機し同期が完了してから切り替えるため、データロスが無く切り替え可能です。

As a zero-data-loss method to fail back to the original primary Region after a failover.

During a switchover, Amazon DocumentDB switches over your primary cluster to your chosen secondary Region while it maintains your global cluster's existing replication topology. Before it starts the switchover process, Amazon DocumentDB waits for all secondary Region clusters to be fully synchronized with the primary Region cluster. Then, the DB cluster in the primary Region becomes read-only and the chosen secondary cluster promotes one of its read-only nodes to full writer status. Promoting this node to a writer allows that secondary cluster to assume the role of primary cluster. Because all secondary clusters were synchronized with the primary at the beginning of the process, the new primary continues operations for the Amazon DocumentDB global cluster without losing any data. Your database is unavailable for a short time while the primary and selected secondary clusters are assuming their new roles.

Disaster recovery and Amazon DocumentDB global clusters - Amazon DocumentDB

やってみる

それでは、グローバルクラスターのスイッチオーバー/フェイルオーバーをやってみます。

スイッチオーバー

まずはスイッチオーバーを実行してみます。

マネジメントコンソールから Switchover or Failover をクリックします。

2024-08-23 at 19.55.46-クラスター  Amazon DocumentDB  us-east-1.png

スイッチオーバーとフェイルオーバーの違いについて記載がありますね。今回はスイッチオーバーを選択し、切り替え先のリージョンクラスターを選択します。

2024-08-23 at 19.56.51-クラスター  Amazon DocumentDB  us-east-1.png

セカンダリのリージョンクラスターのイベント欄から確認するに、スイッチオーバーから 4,5 分程度で切り替えが完了しました。

以下の順序でスイッチオーバーが行われており、興味深いですね。

  • スイッチオーバーの開始
  • プライマリリージョンクラスターの書き込み停止
  • セカンダリリージョンクラスターの昇格
  • セカンダリリージョンの DB インスタンスの昇格
  • スイッチオーバーの終了

2024-08-23 at 20.08.35-クラスター  Amazon DocumentDB  us-east-1.png

フェイルオーバー

最後にフェイルオーバーを試してみます。フェイルオーバーはデータ損失の可能性がある切り替えであるため、 confirm と入力を求められますね。

2024-08-23 at 20.15.05-クラスター  Amazon DocumentDB  us-east-1.png

こちらもプライマリリージョンクラスターのイベントから履歴を確認すると、 15 分ほどでフェイルオーバーが完了しています。(リージョンなどの影響があるのかもですね)

フェイルオーバーは開始と完了のみイベント欄に記録されていました

2024-08-23 at 21.06.53-クラスター  Amazon DocumentDB  us-east-1@2x.png

終わりに

以上、「Amazon DocumentDB のグローバルクラスターが、フェイルオーバーとスイッチオーバーをサポートしました。」でした。

この機能が追加されたおかげで、ユーザー側で操作する範囲がさらに狭まり、とてもハッピーです。グローバルクラスター使いが増えることに期待です。

この記事がどなたかの参考になれば幸いです。AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!

脚注
  1. 過去の話なので、誰宛なんだろうのクエスチョンです。本オペレーション以外のシナリオでもバックアップは必ず取っておきましょうね。 ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.