高可用性のためのAWS RDS Multi-AZデプロイメントの設定方法
データベースの可用性は、クリティカルな本番アプリケーションにとって極めて重要です。ダウンタイムは、重大な金銭的損失、評判の毀損、ユーザーの不満につながる可能性があります。Amazon Relational Database Service (RDS) は、クラウドでリレーショナルデータベースを管理するための堅牢なソリューションを提供しており、そのMulti-AZデプロイメントオプションは、データベースインスタンスの可用性、耐久性、耐障害性を高めるように特別に設計されています。
この記事では、AWS RDS Multi-AZデプロイメントを設定する手順を説明します。Multi-AZとは何か、その主な利点について解説し、新規および既存のRDSインスタンスの両方で設定するためのステップバイステップの手順を提供します。読み終える頃には、自動フェイルオーバー機能によりアップタイムと耐久性を大幅に向上させる、回復力のあるデータベースインフラストラクチャを構築する方法を理解できるようになるでしょう(MySQL、PostgreSQL、その他のサポート対象データベースインスタンス)。
AWS RDS Multi-AZとは?
AWS RDS Multi-AZ(Multi-Availability Zone)デプロイメントは、同じAWSリージョン内の物理的に分離された異なるアベイラビリティゾーン(AZ)に、データベースインスタンスの完全なレプリカを作成します。このスタンバイインスタンスは「ホットスタンバイ」構成で動作し、プライマリインスタンスからの変更が同期レプリケーションを使用して継続的に更新されることを意味します。
仕組み:
- プライマリインスタンス: アプリケーションは、プライマリデータベースインスタンスに接続し、データを書き込みます。
- 同期レプリケーション: プライマリインスタンスへのすべてのデータ書き込みは、スタンバイインスタンスに同期的にレプリケートされます。これにより、スタンバイインスタンスがプライマリと常に最新の状態に保たれ、フェイルオーバー中のデータ損失が最小限に抑えられます。
- 自動フェイルオーバー: プライマリインスタンスに影響を与えるインフラストラクチャ障害(AZの停止、インスタンスのハードウェア障害、ネットワークの問題、データベースエンジンのクラッシュなど)が発生した場合、AWS RDSは自動的にスタンバイレプリカに切り替わります。このフェイルオーバープロセスは通常1〜2分かかり、ユーザー側での手動介入は必要ありません。データベースのエンドポイントは同じままなので、アプリケーション側で接続文字列を変更する必要はありません。
- 単一のエンドポイント: プライマリインスタンスとスタンバイインスタンスは、単一のDNSエンドポイントを共有します。アプリケーションはこのエンドポイントに接続し、AWSが現在アクティブなプライマリインスタンスへのリダイレクトを管理します。
Multi-AZデプロイメントの利点
RDSをMulti-AZで設定すると、本番ワークロードにとっていくつかの重要な利点が得られます。
- 高可用性: 別のAZにあるスタンバイレプリカへの自動フェイルオーバーにより、プライマリAZで障害が発生してもデータベースが運用され続けることが保証されます。これにより、ダウンタイムが大幅に削減されます。
- データの耐久性: 同期レプリケーションにより、コミットされたすべてのトランザクションがプライマリインスタンスとスタンバイインスタンスの両方に存在することが保証されます。これにより、フェイルオーバー時のデータ損失のリスクが最小限に抑えられます。
- ディザスタリカバリ: 複数のアベイラビリティゾーンにまたがることで、データベースはAZレベルの障害から保護され、ディザスタリカバリ戦略の重要な構成要素となります。
- 運用の簡素化: AWSが監視、レプリケーション、フェイルオーバープロセスを自動的に処理します。ホストベースのレプリケーションを設定したり、スタンバイインスタンスを管理したり、フェイルオーバーを手動で調整したりする必要はありません。
- メンテナンスウィンドウ: 計画的なメンテナンス(OSのパッチ適用やデータベースエンジンのアップグレードなど)中に、AWSは自動的にスタンバイインスタンスにフェイルオーバーし、古いプライマリのメンテナンスを実行した後、元に戻します。これにより、アプリケーションのダウンタイムが最小限に抑えられます。
- パフォーマンス(書き込みレイテンシ): 同期レプリケーションは本質的にシングルAZデプロイメントと比較して書き込みレイテンシがわずかに増加しますが(2か所に書き込みを確認する必要があるため)、ほとんどのアプリケーションにとっては無視できる程度であり、高められた可用性のための価値あるトレードオフとなります。
前提条件
開始する前に、以下が揃っていることを確認してください。
- RDSインスタンスの作成および管理に必要な適切な権限を持つAWSアカウント。
- AWSリージョン、アベイラビリティゾーン、およびVirtual Private Cloud (VPC) に関する基本的な理解。
ステップバイステップ設定ガイド
オプション1:Multi-AZを指定して新しいRDSインスタンスを作成する
これは新規デプロイメントに推奨されるアプローチであり、初日から高可用性が保証されます。
- RDSコンソールに移動: AWSマネジメントコンソールにサインインし、Amazon RDSコンソールを開きます。
- データベースの作成: ナビゲーションペインでDatabasesを選択し、Create databaseをクリックします。
- データベース作成方法の選択: Standard createを選択します。
- エンジンの選択:
- Engine type: 希望するデータベースエンジン(例:MySQL、PostgreSQL、SQL Server、Oracle)を選択します。
- Engine version: 特定のバージョンを選択します。
- テンプレート: 適切なテンプレートを選択します。本番環境の場合は、Multi-AZがデフォルトで設定されるProductionが推奨されます。
- 設定:
- DB instance identifier: データベースインスタンスの一意の名前を入力します。
- Master username および Master password: プライマリデータベースユーザーの認証情報を設定します。
- DBインスタンスサイズ: パフォーマンス要件を満たすインスタンスクラスを選択します。
- ストレージ: ストレージタイプと割り当てストレージを設定します。
- 可用性と耐久性: ここがMulti-AZの重要なステップです。
- Multi-AZ deploymentでYes (Create a standby instance)を選択します。
- (オプション) 前のステップで「Production」テンプレートを選択した場合、このオプションはプリセットされています。
- 接続性:
- VPC: データベースが配置されるVPCを選択します。
- Subnet group: 複数のアベイラビリティゾーンにまたがるDBサブネットグループがあることを確認します。RDSはこれを使用して、プライマリインスタンスとスタンバイインスタンスを異なるAZに配置します。
- Public access: セキュリティのベストプラクティスとして、本番環境ではNoを選択します。
- VPC security groups: アプリケーションサーバーからのデータベースポートへのインバウンドトラフィックを許可する適切なセキュリティグループをアタッチします。
- データベース認証: 希望の認証方法を選択します。
- モニタリング、パフォーマンスインサイト、ログのエクスポート、メンテナンス: 運用要件に従ってこれらを構成します。
- Create database: すべての設定を確認し、Create databaseをクリックします。
AWSはプライマリインスタンスをプロビジョニングした後、別のAvailability Zoneにスタンバイレプリカを作成し、同期させます。このプロセスには、インスタンスサイズに応じて時間がかかる場合があります。
オプション2:既存のRDSインスタンスをMulti-AZに変更する
ダウンタイムなしで、既存のシングルAZ RDSインスタンスのMulti-AZを有効にできます。
- RDSコンソールに移動: AWSマネジメントコンソールにサインインし、Amazon RDSコンソールを開きます。
- データベースの選択: ナビゲーションペインでDatabasesを選択し、変更したいRDSインスタンスを選択します。
- インスタンスの変更: Modifyボタンをクリックします。
- 可用性と耐久性: Availability & Durabilityセクションまでスクロールダウンします。
- Multi-AZ deploymentでYes (Create a standby instance)を選択します。
- Continue: インスタンスクラス、ストレージなどの他の設定を確認し、必要な他の変更を加えてから、Continueをクリックします。
- 変更のスケジュール設定:
- Apply immediately: このオプションを選択すると、変更が即座に適用されます。Multi-AZを有効にする場合、AWSはバックグラウンドでスタンバイインスタンスを作成します。この初期作成フェーズ中、プライマリインスタンスは利用可能ですが、I/Oレイテンシが一時的に増加する可能性があります。スタンバイが同期されると、Multi-AZ構成をアクティブ化するためにAWSが小さなフェイルオーバーを実行する際に短い停止(通常1分未満)が発生します。
- Apply during the next scheduled maintenance window: このオプションを選択すると、定義したメンテナンスウィンドウ中に変更が適用され、ピーク時の混乱が最小限に抑えられます。
- Modify DB instance: Modify DB instanceをクリックします。
AWSはスタンバイレプリカの作成とプライマリインスタンスとの同期プロセスを開始します。この間、データベースはオンラインのままですが、Multi-AZ構成が確定するときに短いフェイルオーバーイベントが発生する可能性があります。
Multi-AZデプロイメントの監視
Multi-AZの設定後、ステータスを監視することが不可欠です。
- RDSコンソール: RDSコンソールに移動し、データベースインスタンスを選択します。
- 詳細タブ: Connectivity & securityセクションの下に、Multi-AZが
Yesとしてリストされます。Availability & durabilityの下には、インスタンスがMulti-AZデプロイメント内にあると表示されるはずです。 - イベント: Logs & eventsタブで、フェイルオーバー、インスタンス作成、メンテナンスアクティビティに関連するイベントを確認します。AWSはフェイルオーバーに関するイベントをログに記録します(例:
RDS-EVENT-0026 - DB instance %s has been failed over)。
フェイルオーバーのテスト(オプションですが推奨)
AWSはフェイルオーバーを自動的に管理しますが、本番環境以外でフェイルオーバーの仕組みを理解し、時折テストすることは良い習慣です。
フェイルオーバーのトリガー:
- フェイルオーバーを伴う再起動: RDSコンソールでMulti-AZインスタンスを選択します。ActionsメニューからRebootを選択します。必ず"Reboot with failover?"オプションを選択してください。
- この操作により、RDSはプライマリインスタンスをスタンバイレプリカに強制的に切り替え、予期しない障害をシミュレートします。DNSエンドポイントが更新されるため、アプリケーションは短い切断(1〜2分)を経験します。
- イベントの監視: フェイルオーバーをトリガーした後、インスタンスのLogs & eventsタブを監視します。フェイルオーバーが発生し、新しいプライマリがアクティブになったことを示すイベントが表示されるはずです。
考慮事項とベストプラクティス
- コスト: Multi-AZデプロイメントは、一度にトラフィックを処理しているのは1つであっても、実質的に2つのデータベースインスタンス(プライマリとスタンバイ)を実行するため、シングルAZデプロイメントよりもコストが高くなります。
- リードレプリカとMulti-AZの違い: 違いを理解してください。Multi-AZは高可用性と耐久性(書き込み)のためのものです。リードレプリカは読み取りスケーリングと読み取りパフォーマンスの向上のためのものです。これらは一緒に使用できます。Multi-AZプライマリを作成してから、読み取り負荷の高いアプリケーションをスケーリングするためにリードレプリカを持つことができます。
- パフォーマンスへの影響: Multi-AZは可用性を高めますが、シングルAZと比較して同期レプリケーションにより書き込みレイテンシがわずかに増加する可能性があります。ほとんどのアプリケーションでは、このオーバーヘッドはごくわずかです。
- サブネットグループ: DBサブネットグループに、少なくとも2つの異なるアベイラビリティゾーンのサブネットが含まれていることを確認してください。これにより、RDSはプライマリインスタンスとスタンバイインスタンスを別々のAZに配置できます。
- セキュリティグループ: アプリケーションサーバーからRDSエンドポイントへのトラフィックを許可するように、VPCセキュリティグループを適切に構成します。
- データベースエンジンのサポート: Multi-AZは、MySQL、PostgreSQL、SQL Server、Oracle、MariaDBを含むほとんどの一般的なデータベースエンジンでサポートされています。
結論
AWS RDS Multi-AZデプロイメントは、クラウドで高可用性と耐久性のあるリレーショナルデータベースソリューションを構築するための基盤です。アベイラビリティゾーン間でデータを自動的にレプリケートし、シームレスなフェイルオーバーを提供することにより、Multi-AZはクリティカルなアプリケーションのダウンタイムとデータ損失のリスクを大幅に低減します。コストは増加しますが、運用の簡素化と強化された回復力により、AWSでの本番グレードのデータベースワークロードにとって不可欠な構成となっています。データと継続的なサービス提供を保護するために、今すぐMulti-AZを実装してください。