AWS RDSマルチAZ構成の高可用性設定方法
自動フェイルオーバー、安全なメンテナンス、本番環境でのデータベース可用性向上のためのAWS RDSマルチAZ設定方法
AWS RDSマルチAZ構成の高可用性設定方法
アプリケーションが単一のRDSエンドポイントに依存している場合、データベースの可用性は重要です。AWS RDSマルチAZは、別のAZにスタンバイを保持し、プライマリがトラフィックを処理できない場合に自動的にフェイルオーバーすることで、インスタンスやアベイラビリティゾーンの障害リスクを軽減します。
このガイドでは、新規または既存のDBインスタンスに対してAWS RDSマルチAZ構成を設定する方法、変更後に監視すべき項目、および予想されるトレードオフについて説明します。
AWS RDSマルチAZとは?
AWS RDSマルチAZ(複数アベイラビリティゾーン)構成は、同じAWSリージョン内の物理的に分離された別のアベイラビリティゾーン(AZ)に、データベースインスタンスの完全なレプリカを作成します。このスタンバイインスタンスは「ホットスタンバイ」構成で動作し、同期レプリケーションを使用してプライマリインスタンスからの変更で継続的に更新されます。
動作の仕組み:
- プライマリインスタンス:アプリケーションはプライマリデータベースインスタンスに接続し、データを書き込みます。
- 同期レプリケーション:プライマリインスタンスへのすべてのデータ書き込みは、スタンバイインスタンスに同期的にレプリケートされます。これにより、スタンバイインスタンスが常にプライマリと最新の状態に保たれ、フェイルオーバー時のデータ損失が最小限に抑えられます。
- 自動フェイルオーバー:プライマリインスタンスに影響を与えるインフラ障害(例:AZの停止、インスタンスのハードウェア障害、ネットワーク問題、データベースエンジンのクラッシュ)が発生した場合、AWS RDSは自動的にスタンバイレプリカに切り替えます。フェイルオーバーの所要時間はエンジン、ワークロード、DNSキャッシュの動作によって異なるため、アプリケーションは再接続ロジックを使用する必要があります。データベースエンドポイントは変更されないため、アプリケーションは新しい接続文字列を必要としません。
- 単一エンドポイント:プライマリインスタンスとスタンバイインスタンスは両方とも単一のDNSエンドポイントを共有します。アプリケーションはこのエンドポイントに接続し、AWSが現在アクティブなプライマリインスタンスへのリダイレクトを管理します。
マルチAZ構成の利点
RDSをマルチAZで構成すると、本番ワークロードにいくつかの重要な利点がもたらされます:
- 高可用性:別のAZにあるスタンバイレプリカへの自動フェイルオーバーにより、プライマリAZが停止した場合でもデータベースの運用を継続できます。これによりダウンタイムが大幅に削減されます。
- データの耐久性:同期レプリケーションにより、コミットされたすべてのトランザクションがプライマリインスタンスとスタンバイインスタンスの両方に存在することが保証されます。これにより、フェイルオーバー時のデータ損失のリスクが最小限に抑えられます。
- ディザスタリカバリ:複数のアベイラビリティゾーンにまたがることで、データベースはAZレベルの障害から保護され、ディザスタリカバリ戦略の重要な構成要素となります。
- 運用の簡素化:AWSが監視、レプリケーション、フェイルオーバーのプロセスを自動的に処理します。ホストベースのレプリケーションを構成したり、スタンバイインスタンスを管理したり、手動でフェイルオーバーを調整したりする必要はありません。
- メンテナンスウィンドウ:計画メンテナンス(例:OSパッチ適用やデータベースエンジンのアップグレード)中、AWSは自動的にスタンバイインスタンスにフェイルオーバーし、旧プライマリでメンテナンスを実行してから切り戻します。これによりアプリケーションのダウンタイムが最小限に抑えられます。
- パフォーマンス(書き込みレイテンシ):同期レプリケーションは本質的にシングルAZ構成と比較して書き込みレイテンシをわずかに増加させますが(2つの場所への書き込みを確認するため)、これはほとんどのアプリケーションにとって無視できる程度であり、可用性の向上とのトレードオフとして価値があります。
前提条件
始める前に、以下を確認してください:
- RDSインスタンスを作成および管理するための適切な権限を持つAWSアカウント。
- **AWSリージョン、アベイラビリティゾーン、および仮想プライベートクラウド(VPC)**に関する基本的な理解。
ステップバイステップ構成ガイド
オプション1:マルチAZで新しいRDSインスタンスを作成する
これは新しい構成に推奨されるアプローチで、初日から高可用性を確保します。
- RDSコンソールに移動:AWS Management Consoleにサインインし、Amazon RDSコンソールを開きます。
- データベースの作成:ナビゲーションペインでデータベースを選択し、データベースの作成をクリックします。
- データベース作成方法の選択:標準作成を選択します。
- エンジンオプションの選択:
- エンジンのタイプ:目的のデータベースエンジン(例:MySQL、PostgreSQL、SQL Server、Oracle)を選択します。
- エンジンバージョン:特定のバージョンを選択します。
- テンプレート:適切なテンプレートを選択します。本番環境では、本番向けテンプレートを使用し、データベースを作成する前にマルチAZ設定を確認します。
- 設定:
- DBインスタンス識別子:データベースインスタンスに一意の名前を指定します。
- マスターユーザー名とマスターパスワード:プライマリデータベースユーザーの認証情報を設定します。
- DBインスタンスサイズ:パフォーマンス要件を満たすインスタンスクラスを選択します。
- ストレージ:ストレージタイプと割り当てられたストレージを構成します。
- 可用性と耐久性:これはマルチAZにとって重要なステップです:
- マルチAZ配置で、**はい(スタンバイインスタンスを作成する)**を選択します。
- (オプション)以前に「本番」テンプレートを選択した場合、このオプションは事前に選択されています。
- 接続:
- VPC:データベースが配置されるVPCを選択します。
- サブネットグループ:複数のアベイラビリティゾーンにまたがるDBサブネットグループがあることを確認します。RDSはこれを使用して、プライマリインスタンスとスタンバイインスタンスを異なるAZに配置します。
- パブリックアクセス:セキュリティのベストプラクティスとして、本番環境ではいいえを選択します。
- VPCセキュリティグループ:アプリケーションサーバーからデータベースポートへのインバウンドトラフィックを許可する適切なセキュリティグループをアタッチします。
- データベース認証:希望する認証方法を選択します。
- モニタリング、Performance Insights、ログエクスポート、メンテナンス:運用要件に応じてこれらを構成します。
- データベースの作成:すべての設定を確認し、データベースの作成をクリックします。
AWSはプライマリインスタンスをプロビジョニングし、別のアベイラビリティゾーンにスタンバイレプリカを作成して同期します。このプロセスはインスタンスサイズによって時間がかかる場合があります。
オプション2:既存のRDSインスタンスをマルチAZに変更する
ダウンタイムなしで、既存のシングルAZ RDSインスタンスに対してマルチAZを有効にできます。
- RDSコンソールに移動:AWS Management Consoleにサインインし、Amazon RDSコンソールを開きます。
- データベースの選択:ナビゲーションペインでデータベースを選択し、変更するRDSインスタンスを選択します。
- インスタンスの変更:変更ボタンをクリックします。
- 可用性と耐久性:可用性と耐久性セクションまでスクロールします。
- マルチAZ配置で、**はい(スタンバイインスタンスを作成する)**を選択します。
- 続行:他の設定(インスタンスクラス、ストレージなど)を確認し、必要な変更を加えてから、続行をクリックします。
- 変更のスケジュール:
- すぐに適用:このオプションを選択すると、変更がすぐに開始されます。プライマリが利用可能な状態で、RDSはバックグラウンドでスタンバイを作成しますが、同期中にI/Oレイテンシが高くなる可能性があります。マルチAZを有効にするためだけに計画的な停止は通常必要ありませんが、後のフェイルオーバーやメンテナンスイベントで接続が中断される可能性があります。
- 次のメンテナンスウィンドウで適用:このオプションは、定義されたメンテナンスウィンドウ中に変更を適用し、ピーク時の中断を最小限に抑えます。
- DBインスタンスの変更:DBインスタンスの変更をクリックします。
AWSはスタンバイレプリカの作成とプライマリインスタンスとの同期を開始します。この間、データベースはオンラインのままですが、マルチAZ構成が確定する際に短いフェイルオーバーイベントが発生する可能性があります。
マルチAZ構成の監視
マルチAZを設定した後は、そのステータスを監視することが重要です:
- RDSコンソール:RDSコンソールに移動し、データベースインスタンスを選択します。
- 詳細タブ:接続とセキュリティセクションで、マルチAZが
はいと表示されていることを確認します。可用性と耐久性の下に、インスタンスがマルチAZ構成であることが表示されるはずです。 - イベント:ログとイベントタブで、フェイルオーバー、インスタンス作成、またはメンテナンスアクティビティに関連するイベントを確認します。AWSはフェイルオーバーのイベントをログに記録します(例:
RDS-EVENT-0026 - DBインスタンスXXXがフェイルオーバーされました)。
フェイルオーバーのテスト(オプションですが推奨)
AWSは自動的にフェイルオーバーを管理しますが、本番環境以外でフェイルオーバーメカニズムを理解し、時々テストすることをお勧めします。
フェイルオーバーのトリガー:
- フェイルオーバーによる再起動:RDSコンソールでマルチAZインスタンスを選択します。アクションメニューから再起動を選択します。**「フェイルオーバーで再起動」**オプションを必ず選択してください。
- このアクションにより、RDSはプライマリインスタンスをスタンバイレプリカに強制的に切り替え、計画外の停止をシミュレートします。エンドポイントが新しいプライマリに解決される間、アプリケーションは短い切断を想定する必要があります。
- イベントの観察:フェイルオーバーを開始した後、インスタンスのログとイベントタブを監視します。フェイルオーバーが発生し、新しいプライマリがアクティブであることを示すイベントが表示されるはずです。
考慮事項とベストプラクティス
- コスト:マルチAZ構成は、シングルAZ構成よりもコストが高くなります。これは、特定の時点でアクティブにトラフィックを処理しているのは1つだけですが、実質的に2つのデータベースインスタンス(プライマリとスタンバイ)を実行しているためです。
- リードレプリカとマルチAZの比較:違いを理解してください。マルチAZは高可用性と耐久性(書き込み)のためのものです。リードレプリカは読み取りのスケーリングと読み取りパフォーマンスの向上のためのものです。これらは一緒に使用できます。マルチAZプライマリを作成し、読み取りが多いアプリケーションをスケーリングするためのリードレプリカを持つことができます。
- パフォーマンスへの影響:マルチAZは可用性を向上させますが、同期レプリケーションによりシングルAZと比較して書き込みレイテンシがわずかに増加する可能性があります。ほとんどのアプリケーションでは、このオーバーヘッドは最小限です。
- サブネットグループ:DBサブネットグループに少なくとも2つの異なるアベイラビリティゾーンのサブネットが含まれていることを確認してください。これにより、RDSはプライマリインスタンスとスタンバイインスタンスを別々のAZに配置できます。
- セキュリティグループ:アプリケーションサーバーからRDSエンドポイントへのトラフィックを許可するようにVPCセキュリティグループを適切に構成します。
- データベースエンジンのサポート:マルチAZは、MySQL、PostgreSQL、SQL Server、Oracle、MariaDBなど、ほとんどの一般的なデータベースエンジンでサポートされています。
まとめ
本番データベースには、追加コストや書き込みレイテンシのオーバーヘッドよりも自動フェイルオーバーが重要な場合に、AWS RDSマルチAZを使用してください。有効にした後は、DBサブネットグループが少なくとも2つのAZにまたがっていることを確認し、本番環境以外でアプリケーションの再接続動作をテストし、RDSイベントを監視して、フェイルオーバーがチームを驚かせないようにしてください。