RDS Multi-AZとRead Replicaを理解する
「DBをもう1台作る」だけでは目的が分かりません。障害時の引継ぎのための待機系と、通常時の読取りを分散する複製先は役割が違います。RDSの構成名を正確に読み、可用性・読取り性能・データの新しさから使い分けます。
この単元で学ぶこと
- 従来型Multi-AZ DBインスタンスとリードレプリカの目的を区別できる
- 同期と非同期の違いを最新データの読取り要件に結び付けられる
- Multi-AZ DBクラスターとの違いとフェイルオーバー時の注意を説明できる
本文解説
可用性と読取り性能は別の要件 受注DBが障害でも復旧して注文を受け付けたい要件は可用性です。一方、売上集計のSELECTが多く、通常時のCPU負荷を減らしたい要件は読取り性能です。どちらもDBの追加で対処する場合がありますが、何のために追加するかによって構成が変わります。
従来型Multi-AZ DBインスタンス構成 この構成では主系と別AZの待機系を用意し、データを同期的に複製します。主系などの障害時には待機側へ引き継ぐ仕組みがあり、可用性を高めます。この単一スタンバイ型の待機系は、通常のSELECTを処理する読取り用サーバーではありません。「Multi-AZにしたから集計クエリを待機系へ送る」とは設計しません。
リードレプリカは通常時の読取りを分ける 一般的なRDS DBインスタンスのリードレプリカは、元DBの変更を非同期で複製し、参照や集計などの読取りに使います。アプリケーションは適切なレプリカのエンドポイントへ読取りを送る設計が必要です。レプリカを作るだけで全SQLが自動的に振り分けられるわけではなく、書込み負荷そのものが同じ比率で分散されるわけでもありません。
複製の遅れが業務へ与える影響 非同期複製には遅延が生じ得ます。商品情報の集計で数秒前の状態を許容できる場合と、決済直後に最新の支払状態を表示したい場合は条件が違います。後者を無条件にレプリカへ送ると、反映前の古い値を読む可能性があります。どの読取りをどこへ送るかは、性能だけでなく必要な一貫性から判断します。
名前の似たMulti-AZ DBクラスター RDSのMulti-AZ DBクラスターは、書込みインスタンス1つと読取り可能なインスタンス2つを3つのAZへ配置する構成です。こちらの読取りインスタンスはフェイルオーバー先として備えるだけでなく、読取りも扱えます。単一スタンバイ型の「待機系は読めない」という説明を、すべてのMulti-AZへ拡張してはいけません。エンジンや構成の対応条件も確認します。
引継ぎ中も接続は設計が必要 フェイルオーバーを備える構成でも、切替え時にアプリの既存接続が失敗する場合があります。エンドポイントの利用、再接続、適切な再試行を考えます。受注の書込みをやり直すときは同じ注文を二重登録しない設計も必要です。「自動フェイルオーバー」は、どのアプリでも1回のエラーも起きないという意味ではありません。
複製とバックアップの違い 複製は稼働中の変更を別DBへ伝えます。誤ったDELETEも正規の変更として複製され得るため、過去の状態へ戻す仕組みとは異なります。誤更新や削除への復旧にはバックアップやポイントインタイムリカバリなどを検討します。待機系やレプリカがあることだけを理由に、復元手段を省略しません。
例題:可用性と集計負荷を両立する 受注DBにはAZ障害への備えが必要で、日次集計は少し古いデータでも構いません。従来型のMulti-AZ DBインスタンスで待機系を用意する要件と、集計をリードレプリカへ分ける要件を独立に評価します。片方がもう片方の代わりになるとはせず、サポートされる組合せと料金、運用を確認して採用します。
図解
重要ポイント
- 従来型Multi-AZ DBインスタンスの待機系は可用性用で、通常の読取りを処理しない。
- RDSのリードレプリカは主に読取り分散に使い、非同期複製の遅延に注意する。
- Multi-AZ DBクラスターのreaderは読取り可能であり、単一スタンバイ型と区別する。
- フェイルオーバー時の再接続と、誤更新からのバックアップ復元は別に設計する。
間違えやすい点
- 「Multi-AZは読取り不可」をすべての構成へ一般化しない。
- 通常のリードレプリカを自動フェイルオーバーの待機系と同一視しない。
- レプリカを作るだけでアプリの読取り先が自動変更されると思わない。
用語解説
- プライマリ
- 従来型RDS Multi-AZ DBインスタンス構成で、アプリケーションの読取り・書込みを通常処理する主系。
- スタンバイ
- 障害時の引継ぎに備える待機系。従来型Multi-AZ DBインスタンス構成では通常の読取り要求を受けない。
- フェイルオーバー
- 障害などを契機として別のDBへ処理を引き継ぐこと。アプリケーション側では再接続への対応が必要になる。
- リードレプリカ
- 元DBのデータを複製し、主に読取り処理を分散するDB。通常のRDS DBインスタンスのリードレプリカは非同期複製で、遅延が生じ得る。
- レプリケーションラグ
- 元DBへ反映された更新が複製先へ到達するまでの遅れ。直後の最新値が必要な読取りでは注意する。
- Multi-AZ DBクラスター
- 書込みインスタンス1つと読取り可能なインスタンス2つを3AZへ配置するRDSの構成。単一スタンバイ型と能力が異なる。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。