Amazon Aurora Global Database で実現するマルチリージョン構成 - DR とグローバル読み取りの設計

ストレージレイヤーの物理レプリケーションで 1 秒未満の RPO を実現する。計画的・非計画的フェイルオーバーの手順と、Write Forwarding によるグローバル読み取りの活用法を紹介します。

Global Database の仕組み

Aurora Global Database はプライマリリージョンのデータを最大 5 つのセカンダリリージョンにレプリケーションする機能です。通常のクロスリージョンリードレプリカが binlog ベースの論理レプリケーションを使用するのに対し、Global Database はストレージレイヤーの物理レプリケーションを使用します。これにより、レプリケーションラグが通常 1 秒未満に抑えられ、プライマリのパフォーマンスへの影響も最小限です。MySQL 互換と PostgreSQL 互換の両方で利用可能で、db.r6g.large 以上のインスタンスクラスが必要です。

DR 設計とフェイルオーバー

計画的フェイルオーバー (Planned Failover) はメンテナンスやリージョン移行時に使用し、RPO ゼロでセカンダリリージョンをプライマリに昇格します。プライマリの書き込みを停止し、レプリケーションの完了を待ってから切り替えるため、データ損失はありません。非計画的フェイルオーバー (Unplanned Failover) はプライマリリージョンの障害時に使用し、通常 1 分以内に完了します。レプリケーションラグ分のデータ損失が発生する可能性がありますが、RPO は通常 1 秒未満です。フェイルオーバー後、アプリケーションの接続先を新しいプライマリに切り替える必要があります。Route 53 のヘルスチェックとフェイルオーバールーティングを組み合わせることで、DNS レベルでの自動切り替えを実現できます。

グローバル読み取りの活用

セカンダリリージョンのリードレプリカは読み取りクエリを処理でき、グローバルに分散したユーザーに低レイテンシの読み取りを提供します。東京リージョンをプライマリ、バージニアリージョンをセカンダリに設定すると、米国のユーザーはバージニアのリードレプリカから読み取り、日本のユーザーは東京のプライマリから読み取ります。書き込みは常にプライマリリージョンで処理されるため、書き込みが多いワークロードではプライマリリージョンに近いユーザーが有利です。 Write Forwarding 機能を有効にすると、セカンダリリージョンへの書き込みリクエストが自動的にプライマリに転送されるため、アプリケーション側でのリージョン振り分けロジックが不要になります。 データベース設計の知見を広げたい場合はAmazon の専門書も活用できます。

Global Database の料金

Global Database の追加料金はレプリケーションされたデータの書き込み I/O で発生します。セカンダリリージョンのレプリケーション I/O は 100 万リクエストあたり約 0.20 ドルです。セカンダリリージョンのインスタンスとストレージの料金は通常の Aurora と同じで、リードレプリカのインスタンスクラスはプライマリと同じにする必要はなく、読み取り負荷に応じて小さいインスタンスを選択できます。DR 専用でリードレプリカを使わない場合は最小インスタンスで待機させ、フェイルオーバー時にスケールアップする運用でコストを抑えられます。リージョン間のデータ転送料金は Global Database のレプリケーションには課金されません。

RPO・RTO と切り替えの実際

災害対策では、どれだけのデータ損失を許容できるか (RPO) と、どれだけ早く復旧する必要があるか (RTO) が重要な指標になります。Aurora Global Database は、主リージョンの変更を別リージョンへ高速に複製するため、リージョン障害時のデータ損失をごくわずかに抑えられます。計画的なリージョン切り替えと、緊急時の昇格の両方に対応し、副リージョンを短時間で書き込み可能な主へ昇格させられます。切り替えの手順をあらかじめ整備し、定期的に訓練しておくことで、いざという時に想定どおりの時間で復旧でき、事業継続性を確保できます。

ユースケースと設計上の考慮

Aurora Global Database は、世界中に利用者がいるアプリケーションで力を発揮します。各リージョンの副データベースから読み取らせることで、利用者に近い場所から低遅延でデータを返せます。一方、書き込みは主リージョンに集約されるため、遠隔地からの書き込みには遅延が生じる点を設計で考慮します。また、リージョン間の複製にはわずかな遅延があるため、副リージョンで読んだデータが一瞬古い可能性を踏まえます。最新性が厳密に求められる処理は主リージョンへ向ける、といった振り分けを設計することで、グローバルな性能と整合性のバランスを取れます。

まとめ

Aurora Global Database は 1 秒未満の RPO でマルチリージョン DR を実現し、グローバルな読み取りワークロードのレイテンシを削減するサービスです。計画的フェイルオーバーで RPO ゼロのリージョン切り替え、非計画的フェイルオーバーで 1 分以内の障害復旧を提供します。グローバルアプリケーションのデータ層として最適な選択肢です。