Amazon Web Services ブログ

Amazon Relational Database Service for SQL Server によるクロスリージョンレプリカの利用

2023年8月:この投稿はレビューされ、透過的なデータ暗号化のセクションを含むように更新されました。

本日より、Amazon Relational Database Service (Amazon RDS) for SQL Server を使用してクロスリージョンリードレプリカを作成できるようになりました。この機能によって、読み取り専用の DB インスタンスをセカンダリ AWS リージョンにデプロイできます。クロスリージョンリードレプリカでは、プライマリデータベースインスタンスからクロスリージョンのリードレプリカにほぼリアルタイムでデータが非同期的に送信され、読み取りスケールアウトが行われます。さらに、災害対策ソリューションを作成でき、既存のデータベースを新しい AWS リージョンに移行することもできます。ソースデータベースごとに、リージョン内レプリカとクロスリージョンレプリカを合わせて合計 5 つまで作成できます。

プライマリ AWS リージョンで災害が発生した場合、クロスリージョンリードレプリカを使用すると、リードレプリカを新しいシングル AZ インスタンスとして手動で昇格させることができます。DB インスタンスがシングル AZ インスタンスとして昇格された後は、リードレプリカインスタンスにはならないことに注意してください。ただし、この昇格したシングル AZ インスタンスをマルチ AZ インスタンスに変換して、スタンドアロンインスタンスから新しいリードレプリカを作成することはできます。クロスリージョンリードレプリカを使用すると、障害復旧時の目標復旧時間 (RTO) を低く抑えることができます。

この投稿では、Amazon RDS for SQL Server でクロスリージョンリードレプリカを使用する方法を示します。

ソリューション概要

次の図は、1 つのリージョン内のリードレプリカと 1 つのクロスリージョンリードレプリカを含む Always On 可用性グループを使用するマルチ AZ 構成の Amazon RDS for SQL Server の概要を示しています。プライマリインスタンスとセカンダリインスタンスは、リージョン内リードレプリカ DB インスタンスとともに同じ AWS リージョン内の異なるアベイラビリティーゾーンでホストされています。クロスリージョンリードレプリカは別の AWS リージョンでホストされます。プライマリ DB インスタンスに対するデータ変更は、セカンダリ DB インスタンスに同期的にレプリケートされ、リードレプリカには非同期でレプリケートされます。

アプリケーションユーザーが世界中に分散している場合は、クロスリージョンリードレプリカを利用して、ユーザーに近い AWS リージョンからの読み取りクエリを処理できます。これにより、ユーザーがアプリケーションを操作する際のネットワークレイテンシーが軽減され、アプリケーションをグローバルに拡張できます。

クロスリージョンリードレプリカを使用すると、アプリケーションからの読み取りクエリを別のリージョンのリードレプリカにルーティングすることで、読み取りの多いデータベースの負荷を軽減できます。Amazon Route 53 加重レコードセットを使用すると、リードレプリカ全体に読み取りリクエストを分散できます。Route 53 がホストするアベイラビリティーゾーン内では、リードレプリカに関連付けられた DNS リードレプリカエンドポイントごとに個別のレコードセットを作成し、それらに同じ重みを与えることができます。その後、選択した個々のリードレプリカエンドポイントに直接リクエストを送信できます。リードレプリカを作成する際に注意すべきもう 1 つの点は、リードレプリカを作成すると、プライマリ DB インスタンス内の既存のログイン、カスタムサーバーロール、SQL ジョブがコピーされるということです。必要に応じて、クロスリージョンリードレプリカを作成した後に、クロスリージョンリードレプリカからジョブ、ログイン、またはサーバーロールを無効にするか削除する必要があります。ただし、サーバーレベルのオブジェクトはリージョン内レプリカやクロスリージョンレプリカにレプリケートされないため、後でプライマリ DB インスタンスでサーバーレベルのオブジェクトを作成する場合は、リードレプリカごとに手動で再作成する必要があります。

Amazon RDS for SQL Server クロスリージョンリードレプリカをデプロイするには、以下の設定の詳細に注意すること

  1. ソースインスタンスはエンタープライズエディションのマルチ AZ でなければなりません。次の図は、プライマリインスタンスがクロスリージョンリードレプリカをデプロイするための要件を示しています。
  2. ソースインスタンスとクロスリージョンリードレプリカは、次のバージョンの SQL Server Enterprise Edition で実行されている必要があります。
    • RDS for SQL Server 2019 (Version 15.00.4073.23 以降)
    • RDS for SQL Server 2017 (Version 14.00.3049.1 以降)
    • RDS for SQL Server 2016 (Version 13.00.5216.0 以降)
  3. ソース DB インスタンスとそのすべてのリードレプリカの SQL Server DB エンジンバージョンは同じである必要があります。Amazon RDS は、メンテナンスウィンドウに関係なく、リードレプリカをアップグレードした直後にプライマリをアップグレードします。DB エンジンのバージョンアップグレードの詳細については、「Microsoft SQL Server DB エンジンのアップグレード」を参照してください。
  4. Amazon RDS for SQL Server は、分散型可用性グループを使用してクロスリージョンのリードレプリカを設定します。
  5. ソースインスタンスとリードレプリカインスタンスタイプは独立しており、同じである必要はありません。
  6. ログインは、プライマリインスタンスとクロスリージョンリードレプリカでは独立しています。
  7. このソリューションでは、非同期レプリケーションを使用します。
  8. Windows 認証が必要な場合、クロスリージョンリードレプリカは AWS マネージドアクティブディレクトリまたはセルフマネージドアクティブディレクトリの一部である必要があります。

Amazon RDS for SQL Server クロスリージョンリードレプリカには制限があることに注意すること

  1. Amazon RDS for SQL Server クロスリージョンリードレプリカにフェイルオーバーやフェイルバックすることはできません。
  2. Amazon RDS for SQL Server クロスリージョンリードレプリカをスタンドアロンのシングル AZ インスタンスとして利用するには、手動で昇格させる必要があります。
  3. 1 つのソースインスタンスについて、サポートされているすべてのリージョンで合計最大 5 つのリードレプリカを作成できます。
  4. Amazon RDS for SQL Server クロスリージョンリードレプリカは、最初のレプリカ作成後は新しいログインやジョブをレプリケートしません。
  5. クロスリージョンリードレプリカは、必要に応じていつでも削除して再作成できます。
  6. サービスプリンシパル名 (SPN) と Kerberos には、Amazon RDS for SQL Server と同じ設定を使用する必要があります。

AWS コンソールで Amazon RDS for SQL Server クロスリージョンリードレプリカを作成

Amazon RDS for SQL Server のクロスリージョンリードレプリカは、AWS マネジメントコンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して作成できます。各リードレプリカには、接続する独自のエンドポイントがあります。

コンソールを使用して Amazon RDS for SQL Server のクロスリージョンリードレプリカを作成するには、次の手順を実行します。

  1. Amazon RDS コンソールで、[データベース] を選択します。
  2. ソースインスタンスを選択します。
  3. 「アクション」メニューで、[リードレプリカの作成] を選択します。以下の画像は、クロスリージョンリードレプリカをデプロイする方法を示しています。
  4. インスタンスクラスセクションで、お好みの DB インスタンスクラスを選択します。
  5. お好みのストレージタイプを選択します。
  6. 「プロビジョンド IOPS」には、IOPS 値を入力します。
  7. 「AWS リージョン」で、目的のリージョン (およびオプションでアベイラビリティーゾーン) を選択します。以下の画像は、リードレプリカのターゲットリージョンを選択する場所を示しています。
  8. 「一般公開」で [いいえ] を選択します。
  9. 暗号化、データベースオプション (ポート 1433)、モニタリングと設定された値を確認します。
  10. [リードレプリカの作成] を選択します。以下の画像は、リードレプリカのオプションと構成を示しています。

AWS CLI を使用した Amazon RDS for SQL Server クロスリージョンリードレプリカの作成

AWS CLI を使用してクロスリージョンリードレプリカを作成するには、AWS CLI がインストールされているマシンから以下のコードを実行します。

aws rds create-db-instance-read-replica 
         --db-instance-identifier <READ REPLICA NAME> 
         --source-db-instance-identifier <ARN of the Source DB instance>
         --region <target-region-name>
         --source-region <source-region-name> 
         --db-subnet-group-name <db-subnet-group-name>

例:

aws rds create-db-instance-read-replica 
         --db-instance-identifier mydbinstancecfreplica
         --source-db-instance-identifier arn:aws:rds:us-east-1:123456789:db:mydbinstancecf 
         --region us-west-2
         --source-region us-east-1 
         --db-subnet-group-name default

透過的なデータ暗号化

Amazon RDS は Microsoft SQL Server の透過的データ暗号化 (TDE) をサポートしており、保存されたデータを自動的に暗号化および復号化してセキュリティを強化します。TDE は、データやログファイルなどの保存中のデータを保護します。詳細については、「SQL サーバーの透過的なデータの暗号化サポート」を参照してください。

ソースインスタンスでデータベースを TDE で暗号化すると、RDS 自動化によってクロスリージョンリードレプリカ上のデータベースが自動的に暗号化されます。ユーザーが手動で操作する必要はありません。下のスクリーンショットでは、sample データベースがクロスリージョンリードレプリカで TDE で暗号化されています。

Amazon RDS for SQL Server リードレプリカのモニタリング

Amazon CloudWatch を使用してレプリケーションラグをモニタリングできます。レプリケーションステータスはコンソールまたは AWS CLI でモニタリングできます。プライマリ DB インスタンスに対して SQL クエリを実行して、現在のレプリケーションラグを確認することもできます。Amazon RDS コンソールの Replication Error フィールドまたはイベントログで確認できるレプリケーションでエラーが発生しない限り、レプリケーションステータスは Replicating または Replication degraded です。AWS CLI の describe-db-instances コマンドまたは Amazon RDS API の DescribedDBInstances オペレーションを使用してリードレプリカのステータスを確認することもできます。

以下の画像は、リードレプリカのレプリケーションステータスを示しています。

プライマリインスタンスで次の SQL クエリを実行すると、すべてのリードレプリカ (クロスリージョンと自リージョン) のラグを監視できます。

SELECT AR.replica_server_name
	, DB_NAME (ARS.database_id) '<DATABASE NAME>'
	, AR.availability_mode_desc
	, ARS.synchronization_health_desc
	, ARS.last_hardened_lsn
	, ARS.last_redone_lsn
	, ARS.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states ARS
INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
WHERE DB_NAME(ARS.database_id) = '<DATABASE NAME>'
ORDER BY AR.replica_server_name;

例 :

SELECT AR.replica_server_name
	, DB_NAME (ARS.database_id) 'DB_Name'
	, AR.availability_mode_desc
	, ARS.synchronization_health_desc
	, ARS.last_hardened_lsn
	, ARS.last_redone_lsn
	, ARS.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states ARS
INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
WHERE DB_NAME(ARS.database_id) = 'SAP'
ORDER BY AR.replica_server_name;

次の図は、すべてのレプリカ間のレイテンシーを示しています。

クロスリージョンリードレプリカの昇格

ビジネスニーズに応じて、クロスリージョンのリードレプリカをスタンドアロンのシングル AZ インスタンスとして昇格できます。また、昇格されたインスタンスに接続するようにアプリケーション設定を変更することもできます。

以下の画像は、クロスリージョンリードレプリカを昇格させる方法を示しています。

クロスリージョンリードレプリカを昇格させると、クロスリージョンリードレプリカはレプリケーションチェーンから削除され、読み取りと書き込みのアクセス権を持つ Amazon RDS for SQL Server シングル AZ インスタンスになることに注意してください。

以下の図は、クロスリージョンリードレプリカをシングル AZ インスタンスに昇格させるプロセスを示しています。

  1. この図は昇格前の現在の状態を示しています。
  2. この図は、昇格後の新しいシングル AZ インスタンスを示しています。

クリーンアップ

実際に災害が発生し、リードレプリカをプライマリインスタンスに昇格させた場合、以前のプライマリインスタンスを使用しないのであれば、料金が発生しないように必ず終了してください。テスト環境でこのブログ投稿の内容を試した後は、必ず AWS リソースをすべてクリーンアップしてください。

まとめ

Amazon RDS for SQL Server のクロスリージョンリードレプリカを使用すると、読み取りの多いワークロードを 5 つの異なるリージョンにスケールアウトできます。この記事では、Amazon RDS for SQL Server のクロスリージョンリードレプリカを作成する手順について説明しました。

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。


著者について

Gene Mays は、AWS のシニア・マイクロソフト・スペシャリスト・ソリューション・アーキテクトです。SQL Server を 15 年以上使用しており、さまざまな業界で豊富な経験を持っています。彼は、多くのお客様が SQL Server の高可用性と障害復旧ソリューションを設計し、AWS での大規模な移行を調整するのを支援してきました。AWS で働く前は、金融業界や医療業界の企業顧客をサポートした経験があります。

Alex Pawvathil は AWS のテクニカルアカウントマネージャーです。Alex は Amazon RDS for SQL Server を担当しています。彼は SQL Server を 12 年以上使用してきました。AWS エンタープライズサポートチームの一員として、顧客がベストプラクティスを使用してソリューションを計画および構築し、環境を運用上健全に保てるよう支援しています。

Swarndeep Singh は AWS のシニアソリューションアーキテクトです。Amazon RDS チームと共同で、商用データベースエンジンと SQL Server を担当しています。Amazon RDS で技術的な課題に取り組むことを楽しんでおり、AWS のお客様との協力、カスタマイズされたソリューションの構築、チームメイトとの知識の共有に情熱を注いでいます。

Sid Vantair は AWS のソリューションアーキテクトで、戦略的アカウントを担当しています。リレーショナルデータベースを扱ってきた 10 年以上の経験を持つ彼は、複雑な技術的問題を解決して顧客のハードルを克服することに長けています。仕事以外では、家族と過ごす時間を大切にし、子供たちの好奇心を育むことを大切にしています。