Amazon Web Services ブログ
Aurora Global Database フェイルオーバーのご紹介
Amazon Aurora は、クラウド用に構築された MySQL および PostgreSQL 互換のリレーショナルデータベースです。 Aurora は、従来のエンタープライズデータベースのパフォーマンスや可用性と共に、オープンソースデータベースのシンプルさとコスト効率を兼ね揃えています。 Aurora Global Database を使用すると、リレーショナルデータベースを複数のリージョンにまたがって構築する事ができます。 Global Database は、リージョンを跨いだ災害復旧が必要な場合や、セカンダリリージョンで低レイテンシな読み取りを実現する場合のユースケースに理想的な選択肢です。 Global Database は、リーダーを複数のリージョンに拡張するための優れた方法です。
2023 年 8 月、Aurora チームは、Aurora MySQL および Aurora PostgreSQL 用の新しい Global Database フェイルオーバー機能の提供を発表しました。この機能は、Aurora Global Database をサポートするすべてのバージョンで利用可能です。Global Database フェイルオーバーは、リージョン間の計画外のフェイルオーバーイベントが発生した際に、Global Database クラスターをフェイルオーバーする運用オーバーヘッドを削減します。この投稿では、Aurora Global Database の Global Database フェイルオーバー機能を詳しく説明し、分散アプリケーションの障害に対する耐性を高めるため、その仕組みと活用方法を探ります。
注: 「計画的なフェイルオーバー」の用語は廃止され、今後は同じ機能を「 Global Database スイッチオーバー」と呼びます。
Aurora Global Database の概要
Global Database クラスターは、複数のリージョナル DB クラスターで構成されます。 Global Database クラスターは、サポートされているリージョンに最大 6 つのリージョナル DB クラスター( us-east-1
と us-west-2
の両方の DB クラスタなど)を含めることができます。
Global Database トポロジーでは、1 つのリージョンのみがプライマリとなり、他のすべてのリージョンはセカンダリです。プライマリリージョンには、唯一のライター DB インスタンスが含まれており、唯一のアクティブなライターエンドポイントも含まれています。ライターエンドポイントは常にアクティブなライターノードを指します。セカンダリリージョンにもライターエンドポイントがありますが、それらは非アクティブとなることに注意してください。
各々のリージョナル DB クラスターはリーダーエンドポイントを保有しています。リーダーエンドポイントは、もしリードレプリカが存在する場合、リージョナル DB クラスタ内のリードレプリカへの読み込みトラフィックを負荷分散します。リーダーエンドポイントは、Global Database フェイルオーバー後も影響を受けません。
顧客がプライマリリージョンを変更するシナリオは 、計画されたイベント (例えば、リージョンのローテーションなど) への対応と計画外のイベント (例えば、リージョンの停止など) への対応の 2 パターンあります。「 Global Database スイッチオーバー」 (以前は「計画的なフェイルオーバー」と呼ばれていました)は、計画的なイベントをサポートする既存の機能で、現在のプライマリリージョンからセカンダリリージョンにマネージドな方法で切り替えることができます。Global Database スイッチオーバーは、災害復旧 (DR) テストのためにプライマリリージョンとセカンダリリージョンを切り替えるリージョナルローテーション (Follow the sun) などの計画的な操作に使用できます。Global Database スイッチオーバー処理は、AWS マネジメントコンソール、AWS コマンドラインインターフェイス(AWS CLI )、または RDS API を介して呼び出すことができます。スイッチオーバー処理の間、ユーザーが選択したセカンダリ DB クラスターがプライマリとなり、古いプライマリ DB クラスターがセカンダリの役割を引き継ぎます。Global Database スイッチオーバーでは、レプリケーションの方向も新しいプライマリリージョンから新しいセカンダリリージョンに変更されます。スイッチオーバー処理中に、古いプライマリリージョン (現在はセカンダリ))のライターエンドポイントが非アクティブになり、新しいプライマリ DB クラスターのライターエンドポイントがアクティブなライターエンドポイントになります。エンドポイントの切り替えが発生した後、データベースユーザーとアプリケーションを再構成して、新しいエンドポイントを使用するように接続文字列を更新する必要があります。Global Database スイッチオーバーの詳細については、Aurora のドキュメントを参照してください。
「計画外のフェイルオーバー」の課題
現在のプライマリリージョンの DB クラスターにおいて、サービスレベルの停止した場合やプライマリリージョンが完全に停止した場合、計画外のフェイルオーバーが必要になる可能性があります。 AWS のリージョナルアーキテクチャは高いレジリエンスを備えているため、このようなシナリオは非常にまれなケースである事に注意してください。しかしながら、完全に排除することもできません。従来、Aurora Global Database フェイルオーバーは、残っているセカンダリリージョン DB クラスターの 1 つを手動で切り離し、そのクラスターを手動でプライマリに昇格させることによって実現されていました。このアプローチはうまく機能しましたが、いくつかの課題もありました。
一つ目の課題は、Global Database の設定からクラスターを削除してスタンドアロンなクラスターに変換するという既存のアプローチは、既存の Global Database トポロジーに影響を与える事です。これは、古い Global Database のクラスター名が無効になったことを意味します。さらに、リージョナルデータベースの DB クラスターが分離され、残ったリージョン DB クラスタが昇格された後、アプリケーションで使用できる唯一のリージョン DB クラスターになります。つまり、別のセカンダリリージョンを追加して、新しい Global Databaseのトポロジーを手動で再作成する必要がありました。また、リージョンが再び利用可能になった際には、古いプライマリリージョンにDB クラスタを再作成し、新しい Global Database クラスターに追加する必要もありました。
Global Database フェイルオーバーのご紹介
新しい Global Database フェイルオーバー機能の公開により、リージョナルサービスの停止などの障害の際にも計画外の Aurora Global Database フェイルオーバーで管理できるようになりました。この機能は、新しい Global Database のデプロイメントで利用できだけでなく、既存の Aurora Global Database デプロイメントでも遡って利用する事が可能です。
Global Database フェイルオーバー機能を使用するため、構成変更を行う必要はありません。Global Database フェイルオーバーは、AWS マネジメントコンソール、AWS コマンドラインインターフェイス (AWS CLI)、または API を介して利用できます。お客様は、Global Database クラスターを最初に作成した複数のリージョンから残りの正常動作している 1 つのリージョンを選択し、フェイルオーバープロセスを開始することができます。例えば、Global Database が us-east-1
、us-west-2
、および eu-east-1
リージョンで作成され、us-west-2
でサービス停止が発生していると仮定します。このシナリオでは、Global Database フェイルオーバーは、us-east-1
または eu-east-1
リージョンのいずれかから開始できます。
Global Database フェイルオーバーが開始されると、次の手順が実行されます。
- ユーザーが選択したセカンダリ DB クラスターは、リードレプリカの 1 つをライターとして昇格させ、Global Database のトポロジーにおけるプライマリ DB クラスターの役割を引き受けます。
- Global Database のトポロジーに他のセカンダリクラスターがある場合、それらは再構成されます。
- Aurora Global Database サービスは、古いプライマリリージョンの可用性を引き続き監視します。利用可能になり正常になると、Aurora Global Database は、現在のプライマリリージョンの DB クラスターのスナップショットを復元することにより、このリージョンを Global Database に追加し直します。
- 古いプライマリリージョンが Global Database クラスターに再度追加されると、古いストレージボリュームのスナップショットの取得が試行され、成功すると、次の命名規則でスナップショットが利用可能になります。
rds:unplanned-global-failover-<cluster name>-timestamp
Global Database フェイルオーバーは、Global Database のトポロジーを維持しながら、リージョナル DB クラスターを手動で昇格させる運用オーバーヘッドを削減します。フェイルオーバーが完了したら、アプリケーションの向け先を新しいプライマリ DB クラスターのライターエンドポイントに変更し、新しい DB クラスターからの読み込みと書き込みを開始できます。他の存続するセカンダリリージョンにアプリケーションとクライアントがある場合、セカンダリリージョンの DB クラスターのリーダーエンドポイントから読み込みを開始するには、セカンダリ DB クラスターが再構築されるまで待つ必要があります。
Best Practices
Global Database フェイルオーバー中に、ユーザーが選択したセカンダリリージョン DB クラスターがプライマリに昇格されます。ただし、プライマリのパラメーターなどの構成オプションは自動的には継承されません。設定の不一致を軽減するには、Aurora DB クラスターのパラメーターグループを作成し、オプションを事前に設定することを推奨します。また、Amazon CloudWatch アラートやその他のサードパーティモニタリングなどの監視ツールを導入することを推奨します。また、セカンダリリージョンで AWS Secrets Manager、Amazon Simple Storage Service (Amazon S3)、AWS Lambda などの外部サービスの依存関係をプライマリリージョンの設定と同様に構成することも推奨します。Global Database の設定の一部としてヘッドレスクラスターを使用する場合は、フェイルオーバーを開始する前に、適切なサイズのコンピューティングインスタンスを必ず追加してください。
推奨事項のより詳細なリストについては、「Aurora ユーザー ガイド」を参照してください。
Global Database フェイルオーバーの実行
少なくとも 1 つのインスタンスを含むセカンダリリージョン DB クラスターを少なくとも 1 つ含む Aurora Global Database を作成する場合、Global Database フェイルオーバー機能とGlobal Database スイッチオーバー機能を実行するオプションがあります。 Aurora Global Database を設定するには、「Amazon Aurora Global Database のスタート方法」のユーザーガイドを参照してください。
次の例(Figure. 1)では、2 つの DB クラスターを含む Aurora Global Database を作成しました。プライマリリージョンは ap-southeast-1
にあり、セカンダリリージョンは ap-south-1
リージョンにあります。
Figure.1 A Global Database Cluster
- コンソールを使用してGlobal Database フェイルオーバーを実行するには、次の手順を実行します。
- フェイルオーバーする Aurora Global Database クラスターを選択します。
[アクション] メニューで、[グローバルデータベースの切り替えまたはフェイルオーバー] を選択します。
Figure.2 Failover Global Database cluster
- 新しいプライマリクラスターで、プライマリに昇格するアクティブなセカンダリ Aurora DB クラスターを選択します。
- フェイルオーバーの理由として [フェイルオーバー(データ損失を許可)] を選択します。フェイルオーバーを実行するには、「確認」と入力し、[確認] を選択します。
Figure.3 Choose Failover
フェイルオーバーの実行後、データベースのステータス状況を確認できます。データベースリストのステータス列に従って、フェイルオーバープロセスを監視できます。Global Database レプリケーションが非同期に行われる性質により、新しいプライマリ DB クラスターでのフェイルオーバー後に一部のデータが失われる可能性があります。
新しいプライマリリージョンの DB クラスターが最初に利用可能になり、新しいプライマリから新しいセカンダリの DB クラスターへのレプリケーションをセットアップするのに数分かかります。データベースのサイズに応じて、新しいセカンダリリージョンクラスターのセットアップには数分から数時間かかる場合があります。他のセカンダリ リージョン DB クラスターが存在する場合は、それらも再作成され、レプリケーションが再度確立されます。フェイルオーバーが完了すると、プライマリリージョン DB クラスターとセカンダリリージョン DB クラスターの両方が利用可能になっていることがわかります。
AWS CLI を使用して Global Database フェイルオーバーを実行するには、次のようなコマンドを使用できます。
著者について
翻訳はソリューションアーキテクトの「藤川 貞信」が担当しました。原文はこちらです。