クロスリージョンリードレプリカは災害対策やレイテンシの低減、負荷分散などのシナリオで利用されます。
"Amazon RDS for SQL Server"はクロスリージョンリードレプリカ機能が使えます。しかし、クロスリージョンリードレプリカ機能を利用できるエディションが限定されているため、事前に調査が必要です。
今回の記事は、東京リージョンに配置した"Amazon RDS for SQL Server"のプライマリDBインスタンスを、大阪リージョンにクロスリージョンレプリケーションしてみるハンズオンです。また、大阪リージョンに作成したリードレプリカの昇格もやってみます。
クロスリージョンリードレプリカについて調べてみた。
1. クロスリージョンレプリケーションについて
まずはクロスリージョンレプリケーションについて、ユースケースを簡単にまとめてみました。
クロスリージョンレプリケーションは、データの耐久性、可用性、アクセス性を高めるために大規模プロジェクトやグローバルシステムに利用されています。以下は、クロスリージョンレプリケーションのユースケースです。
ユースケース1. データバックアップと災害復旧
主要なユースケースの一つが、災害復旧のためのデータバックアップです。特定の地域に発生した自然災害やシステム障害から回復するために、重要なデータを異なる地域のデータセンターに複製します。これにより、一方のリージョンがダウンした場合でも、他のリージョンにあるレプリカから迅速にサービスを復旧させることができます。
例えば東京リージョンでシステムを稼働していて、災害対策として大阪リージョンにレプリケーションすることが考えられます。
ユースケース2. 地理的なレイテンシの低減
ユーザーにより近い地域にデータをレプリケートすることで、アプリケーションのレスポンス時間を短縮し、エンドユーザー体験を改善します。例えば、ヨーロッパのユーザーに対して米国東海岸にホストされているデータベースのコピーをヨーロッパのデータセンターに作成することができます。
例えば、本社が東京であったとしても、提供するサービスの想定ユーザーがアメリカの方だった場合、バージニア北部・オハイオ・北カリフォルニア・オレゴンリージョンが候補に挙がるかと思います。
ユースケース3. 負荷分散とスケーラビリティ
高トラフィックの状況において、複数のリージョンにデータをレプリケートすることで、一つのリージョンに集中する負荷を分散させ、全体的なシステムの耐久性を高めます。また、ピーク時の需要に応じてリソースをスケールアップすることが可能になります。
このケースの例でいえば、オンラインゲームや映画・ドラマを配信するコンテンツ配信サービスです。全世界が対象であれば、先述のレイテンシの低減とともに負荷を分散する必要があります。
2. クロスリージョンリードレプリカの基本
AWSのデータベースサービスあるRDSにもクロスリージョンレプリケーション機能があります。それがクロスリージョンリードレプリカです。
正確には、リードレプリカを作成する際に他リージョンを選択するだけなので、機能名としてはリードレプリカですね。
"Amazon RDS リードレプリカ"とは、DB インスタンスの読み取り専用コピーです。クエリをアプリケーションからリードレプリカにルーティングすることにより、プライマリ DB インスタンスの負荷を軽減できます。こうすることにより、単一 DB インスタンスの容量制約にとらわれることなく伸縮自在にスケールアウトし、読み取り負荷の高いデータベースワークロードに対応できます。(AWS公式ドキュメントより)
そして、リードレプリカを他のリージョンに作成することを"クロスリージョンリードレプリカ"と言います。
●クロスリージョンリードレプリカが利用できるエンジン
クロスリージョンリードレプリカは災害復旧において重要な役割を果たします。AWSでは以下のRDSデータベースエンジンでクロスリージョンリードレプリカ機能を提供しています。
のちほどハンズオンで利用する"RDS for SQL Server"もクロスリージョンリードレプリカを利用できますが、いくつか制限があります。
●Amazon RDS for SQL Serverでのクロスリージョンレプリケーションのサポート範囲
"RDS for SQL Server"のクロスリージョンリードレプリカは、"Microsoft SQL Server Enterprise Edition"のみで提供されています。また、"Microsoft SQL Server Enterprise Edition"の以下のバージョンで使用できます。(2024/03時点)
- RDS for SQL Server 2019 (バージョン 15.00.4073.23 以降)
- RDS for SQL Server 2017 (バージョン 14.00.3281.6 以降)
- RDS for SQL Server 2016 (バージョン 13.00.6300.2 以降)
RDS for SQL Server を使用したクロスリージョンリードレプリカは、次を除く以下のすべてのリージョンで使用できます。(2024/03時点)
- アフリカ (ケープタウン)
- アジアパシフィック (香港)
- アジアパシフィック (ハイデラバード)
- アジアパシフィック (ジャカルタ)
- アジアパシフィック (メルボルン)
- ヨーロッパ (ミラノ)
- 欧州 (スペイン)
- 欧州 (チューリッヒ)
- 中東 (バーレーン)
さらに詳しく知りたいかたはこちら
3. クロスリージョンリードレプリカの設定
"Amazon RDS for SQL Server"でクロスリージョンリードレプリカを設定する手順を、ステップバイステップで説明します。各VPC間の接続設定は必要ありません。
●事前準備
ハンズオンを実施する前に、RDSの作成と大阪リージョンにVPCがあるかかくにんしてください。RDSの要件は以下の通りで、他の値はデフォルトで構いません。ちなみに今回利用するデータベースは料金が高いです。※消し忘れに注意ください。
- Amazon RDS for SQL Server
項目 | 設定値 |
---|---|
エンジン | Microsoft SQL Server |
エディション | SQL Server Enterprise Edition |
バージョン | SQL Server 2019 15.00.4355.3.v1 |
マルチAZ | あり |
自動バックアップ | ☑ |
- 大阪リージョンにVPCの作成(デフォルトVPCでも可)
それでは東京リージョンにあるDBインスタンスのリードレプリカを大阪リージョンに作成していきましょう。
↓DBインスタンスが"利用可能"でエンジンは"SQL Server Enterprise Edition"となっているか確認してください。
↓エンジンバージョンとマルチAZの設定も確認してください。マルチAZの設定がされていないと、リードレプリカは作成できません。
↓リードレプリカ作成時にデータベースのバックアップが実行されるため。自動バックアップが有効になっている必要があります。
↓確認が終わりましたら、DBインスタンスを選択し、[アクション]から[リードレプリカの作成]をクリックします。
↓作成画面に遷移します。
↓[送信先リージョン]で[Asia Pacific(Osaka)]を選択してください。
↓その他の設定はデフォルトでかまいません。[リードレプリカの作成]をクリックします。
↓問題なければ、ページ上部に[正常に作成されました]と表示されます。
↓大阪リージョンに移り、データベースを見てみましょう。[作成中]のデータベースがありますね。[ロール]を見てみると、[レプリカ]と表示されています。
↓インスタンスサイズに寄るかと思いますが、20分で[利用可能]となりました。
リードレプリカの作成は以上です。
●リードレプリカの昇格
このままリードレプリカの昇格を実施してみましょう。
↓レプリカインスタンスを選択し、[アクション]から[昇格]をクリックします。
↓実際に昇格する際には、[自動バックアップを有効にします]には☑を必ず入れておきましょう。昇格する=メインリージョンに障害、かと思いますので、昇格するDBインスタンスに何かあった場合にはどうしようもありません。[リードレプリカの昇格]をクリックします。
↓注意分もしっかり読んでおきましょう。
↓まずは[バックアップ中]というステータスになります。
↓わたしの環境では10分で[利用可能]となりました。
リードレプリカの昇格は以上です。
4. クロスリージョンリードレプリカに関するアレコレ
クロスリージョンリードレプリカについて調べた際、わたしが気になったことを調べました。
- クロスリージョンリードレプリカを作成する場合、各リージョンにあるVPC間で別途のピアリングが必要か
→必要ありません。Amazon RDS によりプライマリ DB インスタンスとリードレプリカ間の安全な通信チャネルが設定されます。(引用元)
- 他リージョンに作成したリードレプリカを昇格した場合、メインリージョンへのフェイルバックは可能か。
→フェイルバック機能は現時点では実装されていません。昇格した段階でプライマリとなり、旧プライマリとの同期から外れます。
昇格した DB インスタンスはリードレプリカではなくなったため、レプリケーションターゲットとしては使用できません。(引用元)
- フェイルバックはどうすればいいか
齊藤が考えた案としては、昇格したDBインスタンスのスナップショットを作成しリージョン間コピーを実施。コピーされたスナップショットからDBインスタンスを復元し、稼働中のDBインスタンスとAWS DMSで同期し、差分を埋めるとかでしょうか。
- 昇格したリードレプリカはエンドポイントが変わるか
→変わりません。
まとめ
システムの災害対策で他リージョンにデータをバックアップしたり、トラフィックの集中を避けるために負荷分散したりすることがあります。RDSにはクロスリージョンリードレプリカ機能がありますので、システム要件と照らし合わせて選択肢の一つとして挙げてみてください。
参考リンク:AWS公式ドキュメント、ディザスタリカバリブループリントを備えたクロスリージョンリードレプリカを使用して、マルチリージョン Amazon RDS for SQL Server をデプロイする – 第 1 部、Amazon Relational Database Service for SQL Server によるクロスリージョンレプリカの利用
↓ほかの協栄情報メンバーのRDSについての記事を公開しています。ぜひ参考にしてみてください。
■AWS RDS for Oracleメモリー不足際の解決案(dapeng)
■【AWS初心者向け】RDSリネーム後、PITR&AWS Backupリカバリー手順(Kuroda)
■オンプレミスからAWS RDSへMSSQLの移行方法(zhangying)