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