本文へスキップ
BecomeCoder

AWS SAA(ソリューションアーキテクト)コース · 第6章 データベースの設計 · レッスン31

RDSの設計 ― Multi-AZとリードレプリカ

導入

「可用性を上げたい」と「読み取り性能を上げたい」は、どちらも「RDSを複製すればいい」と混同されがちですが、SAAでは目的が違う機能として明確に区別されます。この違いを取り違えると設問を確実に落とします。

説明

Amazon RDS は、MySQL・PostgreSQL・MariaDB・Oracle・SQL Server に対応したマネージドリレーショナルDBサービスです。SAAでは次の2つの複製機能を対比で理解する必要があります。

機能目的レプリケーション昇格リージョン
Multi-AZ配置高可用性(障害対策)同期自動フェイルオーバー同一リージョン内の別AZ
リードレプリカ読み取りスケーリング非同期手動で昇格可能同一・クロスリージョンどちらも可

Multi-AZは常にスタンバイとして待機し、通常時は直接アクセスできません。プライマリが故障すると、DNSの切り替えによって自動的にスタンバイへフェイルオーバーします。一方リードレプリカは、読み取り専用の接続先としてアプリケーションから直接クエリを実行でき、読み取りが多いワークロードの負荷分散に使います。

flowchart LR
    App["アプリケーション"] -->|"書き込み"| Primary["プライマリ (AZ-a)"]
    Primary -->|"同期レプリケーション"| Standby["スタンバイ (AZ-c)<br/>障害時に自動フェイルオーバー"]
    Primary -->|"非同期レプリケーション"| Replica["リードレプリカ<br/>読み取り専用で直接接続"]
    App -->|"読み取り"| Replica

SAAではこう問われる:「可用性を高めたい」「単一障害点をなくしたい」→ Multi-AZ。「読み取り負荷でDBが詰まっている」「レポート集計クエリを分離したい」→ リードレプリカ。両方の要件が同時に出た場合は、Multi-AZ配置のRDSに対してリードレプリカを追加する構成が正解になります。

具体例

あるメディアサイトが、2つの別々の悩みを抱えていました。取り違えないのがSAAの勘所です。

  • 悩み1:DBサーバーが落ちると記事が全部読めなくなる(可用性) → Multi-AZ。別AZに同期スタンバイを待機させ、プライマリ障害時に自動フェイルオーバー。数分でサービス復帰。
  • 悩み2:編集部が重い集計レポートを流すと、本番の記事表示まで遅くなる(読み取り負荷) → リードレプリカを追加し、レポート用の重い読み取りをそちらへ逃がす。本番の書き込み・表示が軽くなる。

ここで頻出の引っ掛けが「リードレプリカで可用性を上げる」という選択肢。もっともらしいですが、リードレプリカは自動フェイルオーバーの対象ではないので可用性対策にはなりません。可用性=Multi-AZ、読み取り負荷=リードレプリカ。両方欲しければMulti-AZのRDSにリードレプリカを足すのが正解です。

読んでみよう

「Multi-AZ=同期・自動・待機系」「リードレプリカ=非同期・手動・読み取り可」という対比を丸ごと覚えてください。SAAの選択肢には「リードレプリカで可用性を上げる」というもっともらしい誤答が必ず混ざります。読み取りレプリカは自動フェイルオーバーの対象ではないことを忘れないでください。

次のレッスンへ →