Amazon RDS での Microsoft SQL Server 用のリードレプリカの使用 - Amazon Relational Database Service

Amazon RDS での Microsoft SQL Server 用のリードレプリカの使用

リードレプリカは通常、Amazon RDS の DB インスタンス間でレプリケーションを設定するために使用します。リードレプリカの概要については、「DB インスタンスのリードレプリカの操作」を参照してください。

このセクションでは、Amazon RDS for SQL Server でのリードレプリカの使用に関する特定の情報を確認することができます。

SQL Server リードレプリカの設定

DB インスタンスがレプリケーション用のソース DB インスタンスとして機能するには、ソース DB インスタンスで自動バックアップを有効にする必要があります。そのためには、バックアップ保持期間の値を 0 以外の値に設定します。ソース DB インスタンスは、AlwaysOn 可用性グループ (AG) を持つマルチ AZ 配置である必要があります。このタイプのデプロイを設定すると、自動バックアップが有効になります。

SQL Server リードレプリカを作成する際、プライマリ DB インスタンスを停止する必要はありません。Amazon RDS では、サービスを中断することなく、ソース DB インスタンスとリードレプリカに必要なパラメータとアクセス許可を設定できます。ソース DB インスタンスのスナップショットが作成され、このスナップショットがリードレプリカになります。リードレプリカの削除時にも停止は発生しません。

1 つのソース DB インスタンスから最大 15 つのリードレプリカを作成できます。レプリケーションを効率的に実行するには、各リードレプリカにソース DB インスタンスと同程度のコンピューティングリソースとストレージリソースを設定することをお勧めします。ソースの DB インスタンスをスケールした場合は、リードレプリカもスケールする必要があります。

ソース DB インスタンスとそのすべてのリードレプリカの SQL Server DB エンジンバージョンは同じである必要があります。Amazon RDS では、メンテナンスウィンドウに関係なく、リードレプリカがアップグレードされた後すぐにプライマリがアップグレードされます。DB エンジンバージョンのアップグレードの詳細については、「Microsoft SQL Server DB エンジンのアップグレード」を参照してください。

リードレプリカでソースからの変更を受信して適用できるように、十分なコンピューティングリソースとストレージリソースが必要です。リードレプリカのコンピューティング、ネットワーク、またはストレージがリソースの容量に達すると、リードレプリカはソースからの変更の受信または適用を停止します。リードレプリカのストレージや CPU リソースは、そのソースや他のリードレプリカとは独立して変更することができます。

SQL Server でのリードレプリカの制限

Amazon RDS の SQL Server リードレプリカには、次の制限が適用されます。

  • リードレプリカは、SQL Server Enterprise Edition (EE) エンジンでのみ使用することができます。

  • リードレプリカは、SQL Server バージョン 2016 – 2022 で使用できます。

  • レプリケートするソース DB インスタンスは、AlwaysOn 可用性グループを持つマルチ AZ 配置である必要があります。

  • 1 つのソース DB インスタンスから最大 15 つのリードレプリカを作成できます。ソース DB インスタンスのリードレプリカが 5 つを超えると、レプリケーションで遅延が発生する場合があります。

  • リードレプリカは、4 つ以上の vCPU を持つ DB インスタンスクラスで実行されている DB インスタンスでのみ使用できます。

  • Amazon RDS for SQL Server では、次の機能はサポートされていません。

    • リードレプリカのバックアップ保持

    • リードレプリカからのポイントインタイムリカバリ

    • リードレプリカの手動スナップショット

    • マルチ AZ リードレプリカ

    • リードレプリカのリードレプリカの作成

    • リードレプリカへのユーザーログインの同期

  • Amazon RDS for SQL Server は、ソース DB インスタンスとそのリードレプリカの間の高いレプリカラグを軽減するために介入することはありません。ソース DB インスタンスとそのリードレプリカのサイズが、コンピューティング能力とストレージの観点から、運用負荷に合わせて適切に設定されていることを確認してください。

RDS for SQL Server レプリカのオプションに関する考慮事項

RDS for SQL Server レプリカを作成する前に、次の要件、制限、推奨事項を確認してください。

  • SQL Server レプリカがソース DB インスタンスと同じリージョンにある場合は、そのレプリカがソース DB インスタンスと同じオプショングループに属していることを確認してください。出典オプショングループまたは出典オプショングループメンバーシップへの変更はレプリカに反映されます。これらの変更は、レプリカのメンテナンスウィンドウに関係なく、出典 DB インスタンスに適用された後すぐにレプリカに適用されます。

    オプショングループの詳細については、「オプショングループを使用する」を参照してください。

  • SQL Server クロスリージョンレプリカを作成する場合、Amazon RDS により、そのための専有オプショングループが作成されます。

    SQL Server クロスリージョンレプリカを、その専有オプショングループから削除することはできません。他の DB インスタンスで、SQL Server クロスリージョンレプリカの専有オプショングループを使用することはできません。

    以下のオプションは、レプリケートオプションです。SQL Server クロスリージョンレプリカにレプリケートオプションを追加するには、そのオプションをソース DB インスタンスのオプショングループに追加します。オプションは、すべての出典 DB インスタンスのレプリカにもインストールされます。

    • TDE

    以下のオプションは、レプリケートされないオプションです。専用オプショングループから、レプリケートされないオプションを追加または削除できます。

    • MSDTC

    • SQLSERVER_AUDIT

    • クロスリージョンリードレプリカで SQLSERVER_AUDIT オプションを有効にするには、クロスリージョンリードレプリカの専用オプショングループとソースインスタンスのオプショングループに SQLSERVER_AUDIT オプションを追加します。SQL Server クロスリージョンリードレプリカのソースインスタンスに SQLSERVER_AUDIT オプションを追加することで、ソースインスタンスのクロスリージョンリードレプリカごとにサーバーレベル監査オブジェクトとサーバーレベルの監査仕様を作成できます。クロスリージョンリードレプリカにアクセスして、完成した監査ログを Amazon S3 バケットにアップロードできるようにするには、専用オプショングループに SQLSERVER_AUDIT オプションを追加し、オプション設定を行います。監査ファイルのターゲットとして使用している Amazon S3 バケットは、クロスリージョンリードレプリカと同じリージョンにある必要があります。各クロスリージョンリードレプリカの SQLSERVER_AUDIT オプションのオプション設定を個別に変更して、それぞれがそれぞれのリージョンの Amazon S3 バケットにアクセスできるようにします。

    次のオプションは、クロスリージョンリードレプリカではサポートされていません。

    • SSRS

    • SSAS

    • SSIS

    次のオプションは、クロスリージョンリードレプリカで一部サポートされています。

    • SQLSERVER_BACKUP_RESTORE

    • SQL Server クロスリージョンレプリカのソース DB インスタンスには SQLSERVER_BACKUP_RESTORE オプションがありますが、すべてのクロスリージョンレプリカを削除するまで、ソース DB インスタンスでネイティブ復元を実行できません。クロスリージョンレプリカの作成中は、既存のネイティブリストアタスクはすべてキャンセルされます。SQLSERVER_BACKUP_RESTORE オプションを専用のオプショングループに追加することはできません。

      ネイティブバックアップと復元の詳細については、「ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート」を参照してください。

    SQL Server クロスリージョンリードレプリカを昇格するとき、昇格されたレプリカは、オプションの管理を含め、その他の SQL Server DB インスタンスと同じように動作します。オプショングループの詳細については、「オプショングループを使用する」を参照してください。

データベース ユーザーとオブジェクトを SQL Server リードレプリカと同期する

新しく作成されたリードレプリカには、リードレプリカの作成時にプライマリ DB インスタンスに存在するログイン、カスタムサーバーロール、SQL エージェントジョブ、またはその他のサーバーレベルのオブジェクトが存在することが期待されます。ただし、リードレプリカの作成後にプライマリ DB インスタンスで作成されたサーバーレベルのオブジェクトは自動的にレプリケートされないため、リードレプリカで手動で作成する必要があります。

データベースユーザーは、プライマリ DB インスタンスからリードレプリカに自動的にレプリケートされます。リードレプリカデータベースは読み取り専用モードであるため、データベースユーザーのセキュリティ識別子 (SID) をデータベースで更新することはできません。そのため、リードレプリカに SQL ログインを作成するときは、そのログインの SID がプライマリ DB インスタンスの対応する SQL ログインの SID と一致していることを確認することが不可欠です。SQL ログインの SID を同期しないと、リードレプリカのデータベースにアクセスできなくなります。SQL Server は Active Directory から SID を取得するため、Windows Active Directory (AD) 認証ログインでこの問題は発生しません。

プライマリ DB インスタンスからの SQL ログインをリードレプリカに同期するには
  1. プライマリ DB インスタンスに接続します。

  2. プライマリ DB インスタンスに新しい SQL ログインを作成します。

    USE [master] GO CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD';
    注記

    セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

  3. データベースに SQL ログイン用の新しいデータベースユーザーを作成します。

    USE [REPLACE WITH YOUR DB NAME] GO CREATE USER TestLogin1 FOR LOGIN TestLogin1; GO
  4. プライマリ DB インスタンスで新しく作成された SQL ログインの SID を確認します。

    SELECT name, sid FROM sys.server_principals WHERE name = TestLogin1;
  5. リードレプリカに接続します。新しい SQL ログインを作成します。

    CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=[REPLACE WITH sid FROM STEP #4];
または、リードレプリカデータベースにアクセスできる場合は、孤立したユーザーを次のように修正できます。
  1. リードレプリカに接続します。

  2. データベース内で孤立したユーザーを特定します。

    USE [REPLACE WITH YOUR DB NAME] GO EXEC sp_change_users_login 'Report'; GO
  3. 孤立したデータベースユーザーに SQL ログインを作成します。

    CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=[REPLACE WITH sid FROM STEP #2];

    例:

    CREATE LOGIN TestLogin1 WITH PASSWORD = 'TestPa$$word#1', SID=[0x1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P];
    注記

    セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

SQL Server リードレプリカの問題のトラブルシューティング

Amazon CloudWatch のレプリケーションのラグをモニタリングするには、Amazon RDS ReplicaLag メトリクスを表示します。レプリケーションのラグタイムについては、「リードレプリケーションのモニタリング」を参照してください。

レプリケーションラグが長すぎる場合は、次のクエリを使用してラグに関する情報を取得できます。

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;