Amazon RDS for Microsoft SQL Server のマルチ AZ 配置 - Amazon Relational Database Service

Amazon RDS for Microsoft SQL Server のマルチ AZ 配置

マルチ AZ 配置は、DB インスタンスの拡張された可用性、データ堅牢性、および耐障害性を提供します。予定されたデータベースメンテナンスまたは予期しないサービス障害時に、Amazon RDS は自動的に最新のセカンダリ DB インスタンスにフェイルオーバーします。この機能により、データベースオペレーションを手動介入なしで速やかに再開できます。プライマリインスタンスおよびスタンバイインスタンスは、同じエンドポイントを使用します。このエンドポイントの物理的なネットワークアドレスは、フェイルオーバープロセスの一環としてセカンダリレプリカに移行します。フェイルオーバーが発生した場合、アプリケーションを再構成する必要はありません。

Amazon RDS は、Microsoft SQL Server で SQL Server データベースミラーリング (DBM) または Always On 可用性グループ (AG) によるマルチ AZ 配置をサポートしています。Amazon RDS は、マルチ AZ 配置のヘルス状態をモニタリングし、維持します。問題が発生した場合、RDS は異常のある DB インスタンスを自動的に修正し、同期を再確立して、フェイルオーバーをスタートします。フェイルオーバーは、スタンバイとプライマリが完全に同期している場合にのみスタートします。何も管理する必要はありません。

SQL Server マルチ AZ をセットアップすると、RDS は DBM または AG を使用するよう、インスタンス上のすべてのデータベースを自動的に設定します。Amazon RDS では、プライマリ、モニタリング、およびセカンダリ DB インスタンスが処理されます。設定は自動的に行われるため、RDS はデプロイする SQL Server のバージョンに基づいて、DBM または常時稼働 AG を選択します。

Amazon RDS では、SQL Server の以下のバージョンおよびエディションの常時稼働 AG によるマルチ AZ がサポートされます。

  • SQL Server 2022:

    • Standard Edition

    • Enterprise Edition

  • SQL Server 2019:

    • Standard Edition 15.00.4073.23 以降

    • Enterprise Edition

  • SQL Server 2017:

    • Standard Edition 14.00.3401.7 以降

    • Enterprise Edition 14.00.3049.1 以降

  • SQL Server 2016: Enterprise Edition 13.00.5216.0 以降

Amazon RDS では、上述のバージョンを除き、SQL Server の以下のバージョンおよびエディションの DBM によるマルチ AZ がサポートされます。

  • SQL Server 2019: Standard Edition 15.00.4043.16

  • SQL Server 2017: Standard および Enterprise Edition

  • SQL Server 2016: Standard および Enterprise Edition

次の SQL クエリを使用して、SQL Server DB インスタンスがシングル AZ、DBM によるマルチ AZ、または Always On AGs によるマルチ AZ のいずれであるかを特定できます。

SELECT CASE WHEN dm.mirroring_state_desc IS NOT NULL THEN 'Multi-AZ (Mirroring)' WHEN dhdrs.group_database_id IS NOT NULL THEN 'Multi-AZ (AlwaysOn)' ELSE 'Single-AZ' END 'high_availability' FROM sys.databases sd LEFT JOIN sys.database_mirroring dm ON sd.database_id = dm.database_id LEFT JOIN sys.dm_hadr_database_replica_states dhdrs ON sd.database_id = dhdrs.database_id AND dhdrs.is_local = 1 WHERE DB_NAME(sd.database_id) = 'rdsadmin';

出力は次のようになります。

high_availability Multi-AZ (AlwaysOn)

Microsoft SQL Server DB インスタンスへのマルチ AZ の追加

AWS Management Console を使用して新しい SQL Server DB インスタンスを作成する場合、データベースミラーリング (DBM) または Always On AG によるマルチ AZ を追加できます。これを行うには、[マルチ AZ 配置] から [Yes (Mirroring/Always On)] を選択します。詳しくは、「Amazon RDS DB インスタンスの作成」を参照してください。

コンソールを使用して既存の SQL Server DB インスタンスを変更する場合、[Modify DB instance] (DB インスタンスを変更) ページの [Multi-AZ deployment] (マルチ AZ 配置) から [Yes (Mirroring / Always On)] (はい (ミラーリング/常時)) を選択して、DBM または AG によるマルチ AZ を追加できます。詳しくは、「Amazon RDS DB インスタンスを変更する」を参照してください。

注記

DB インスタンスが Always On 可用性グループ (AG) ではなくデータベースのミラーリング (DBM) を実行している場合は、マルチ AZ を追加する前に、インメモリ最適化を無効にする必要が生じることがあります。DB インスタンスで SQL Server 2016、または 2017 Enterprise Edition が実行され、インメモリ最適化が有効になっている場合は、マルチ AZ を追加する前に DBM でのインメモリ最適化を無効にします。

DB インスタンスが AG を実行している場合、このステップは必要ありません。

Microsoft SQL Server DB インスタンスからのマルチ AZ の削除

AWS Management Console を使用して既存の SQL Server DB インスタンスを変更する場合、DBM または AG を使用してマルチ AZ を削除できます。これを行うには、Modify DB instance ページで Multi-AZ deployment から [No (Mirroring / Always On)] (いいえ (ミラーリング/常時オン)) を選択します。詳しくは、「Amazon RDS DB インスタンスを変更する」を参照してください。

Microsoft SQL Server マルチ AZ 配置の制限、注意事項、および推奨事項

以下は、RDS for SQL Server DB インスタンスでマルチ AZ 配置を使用する際の、いくつかの制限事項です。

  • クロスリージョンマルチ AZ はサポートされていません。

  • マルチ AZ 配置の RDS for SQL Server DB インスタンスはサポートされていません。

  • データベースの読み取りアクティビティを受け入れるように、セカンダリ DB インスタンスを設定することはできません。

  • Always On 可用性グループ (AG) を備えたマルチ AZ は、メモリ内最適化をサポートします。

  • Always On 可用性グループ (AG) を使用するマルチ AZ は、可用性グループリスナーでの Kerberos 認証をサポートしていません。これは、リスナーにサービスプリンシパル名 (SPN) がないためです。

  • SQL Server マルチ AZ 配置内の SQL Server DB インスタンス上のデータベースの名前を変更することはできません。そのようなインスタンスのデータベースの名前を変更する必要がある場合、まず DB インスタンスのマルチ AZ を無効にし、それから名前を変更します。最後に、DB インスタンスのマルチ AZ を再び有効にします。

  • 完全な復旧モデルを使用してバックアップされているマルチ AZ DB インスタンスのみ復元できます。

  • マルチ AZ 配置は、SQL Server エージェントジョブの数が 10,000 に制限されています。

    制限の引き上げが必要な場合は、AWS Support に連絡して緩和をリクエストしてください。AWS Support センターのページを開き、必要に応じてサインインし、[ケースの作成] を選択します。[Service Limit increase] (サービス制限の緩和) を選択します。フォームに入力して送信します。

  • SQL Server マルチ AZ 配置内の SQL Server DB インスタンス上にオフラインのデータベースを配置することはできません。

以下は、RDS for SQL Server DB インスタンスでマルチ AZ 配置を使用する際の、いくつかの注意事項です。

  • Amazon RDS は常時稼働 AG 可用性グループのリスナーエンドポイントを公開します。エンドポイントはコンソールに表示され、DescribeDBInstances API オペレーション によってエンドポイントフィールドのエントリとして返されます。

  • Amazon RDS は 可用性グループのマルチサブネットフェイルオーバーをサポートします。

  • 仮想プライベートクラウド (VPC) 内の SQL Server DB インスタンスで SQL Server のマルチ AZ を使用するには、まず、少なくとも 2 つの異なるアベイラビリティーゾーンにサブネットを持つ DB サブネットグループを作成します。次に、その DB サブネットグループを SQL Server DB インスタンスのプライマリレプリカに割り当てます。

  • マルチ AZ 配置にするために DB インスタンスが変更されている場合、変更中は、[変更中] のステータスになります。Amazon RDS によりスタンバイが作成され、プライマリ DB インスタンスのバックアップが作成されます。このプロセスが完了した後で、プライマリ DB インスタンスのステータスが [利用可能] になります。

  • マルチ AZ 配置では、すべてのデータベースが同じノードにあります。プライマリホストのデータベースがフェイルオーバーする場合は、すべての SQL Server データベースが 1 つのアトミックユニットとしてスタンバイホストにフェイルオーバーします。Amazon RDS により新しい正常なホストがプロビジョニングされ、異常なホストに置き換わります。

  • DBM または AG を使用したマルチ AZ は、単一のスタンバイレプリカをサポートします。

  • ユーザー、ログイン、アクセス許可はセカンダリに自動的にレプリケートされます。それらを再作成する必要はありません。ユーザー定義のサーバーロールは マルチ AZ 配置で Always On AG を使用する DB インスタンスでのみレプリケーションされます。

  • マルチ AZ 配置では、RDS for SQL Server は SQL Server ログインを作成して Always On AG またはデータベースミラーリングを許可します。RDS が作成するログインのパターンは、db_<dbiResourceId>_node1_logindb_<dbiResourceId>_node2_logindb_<dbiResourceId>_witness_login です。

  • RDS for SQL Server は、リードレプリカへのアクセスを許可する SQL Server ログインを作成します。RDS が作成するログインのパターンは、db_<readreplica_dbiResourceId>_node_login です。

  • マルチ AZ 配置では、ジョブのレプリケーション機能がオンになっているとき、SQL Server エージェントジョブは、プライマリホストからセカンダリホストにレプリケートされます。詳しくは、「SQL Server エージェントジョブレプリケーションをオンにする」を参照してください。

  • 同期的データレプリケーションのため、1 つのアベイラビリティーゾーン内のスタンダード DB インスタンスのデプロイと比較した場合、レイテンシーが長くなる可能性があります。

  • フェイルオーバー時間は、復旧プロセスの完了までにかかる時間の影響を受けます。大量のトランザクションがあると、フェイルオーバー時間はより長くなります。

  • SQL Server マルチ AZ 配置では、フェイルオーバー再起動でプライマリ DB インスタンスのみを再起動します。フェイルオーバー後、プライマリ DB インスタンスは新しいセカンダリ DB インスタンスになります。マルチ AZ インスタンスのパラメータは更新されない可能性があります。フェイルオーバーなしの再起動の場合、プライマリ DB インスタンスとセカンダリ DB インスタンスの両方が再起動し、再起動後にパラメータが更新されます。DB インスタンスが応答しない場合は、フェイルオーバーなしで再起動することをお勧めします。

以下は、RDS for Microsoft SQL Server DB インスタンスでマルチ AZ 配置を使用するときのいくつかのレコメンデーションです。

  • 本稼働または本稼働前に使用するデータベースでは、以下のオプションを使用することをお勧めします。

    • 高可用性を重視したマルチ AZ 配置

    • 高速で安定したパフォーマンスを実現する「プロビジョンド IOPS」

    • 「汎用」ではなく「メモリ最適化」

  • セカンダリ用のインスタンスにはアベイラビリティーゾーン (AZ) を選択することができません。アプリケーションホストをデプロイするときには、この点を考慮してください。データベースが別の AZ にフェイルオーバーする可能性があるため、アプリケーションホストがデータベースと同じ AZ に含まれない場合があります。このため、特定の AWS リージョン内のすべての AZ 間で、アプリケーションホストのバランスをとることをお勧めします。

  • 最高のパフォーマンスのために、 大量のデータを更新するオペレーション中はデータベースミラーリングや Always On AG を有効にしないでください。できる限り高速でデータを更新する必要がある場合は、DB インスタンスをマルチ AZ 配置に変換する前にデータの更新を終了します。

  • SQL Server データベースにアクセスするアプリケーションには、接続エラーを見つける例外処理が必要です。以下のコード例では、通信エラーを見つける try/catch ブロックを示しています。この例では、接続が成功した場合に break ステートメントは while ループを終了しますが、例外がスローされた場合は最大 10 回再試行します。

    int RetryMaxAttempts = 10; int RetryIntervalPeriodInSeconds = 1; int iRetryCount = 0; while (iRetryCount < RetryMaxAttempts) { using (SqlConnection connection = new SqlConnection(DatabaseConnString)) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');"; try { connection.Open(); command.ExecuteNonQuery(); break; } catch (Exception ex) { Logger(ex.Message); iRetryCount++; } finally { connection.Close(); } } } Thread.Sleep(RetryIntervalPeriodInSeconds * 1000); }
  • マルチ AZ インスタンスを使用する場合、Set Partner Off コマンドは使用しないでください。例えば、以下は実行しないでください。

    --Don't do this ALTER DATABASE db1 SET PARTNER off
  • 復旧モードを simple に設定しないでください。例えば、以下は実行しないでください。

    --Don't do this ALTER DATABASE db1 SET RECOVERY simple
  • マルチ AZ DB インスタンスに新しいログインを作成するときは、DEFAULT_DATABASE パラメータは使用しないでください。これらの設定は、スタンドバイ用ミラーには適用できないためです。例えば、以下は実行しないでください。

    --Don't do this CREATE LOGIN [test_dba] WITH PASSWORD=foo, DEFAULT_DATABASE=[db2]

    また、以下の操作をしないでください。

    --Don't do this ALTER LOGIN [test_dba] SET DEFAULT_DATABASE=[db3]

セカンダリの場所を確認する

AWS Management Console を使用して、セカンダリレプリカの場所を調べることができます。VPC 内のプライマリ DB インスタンスを設定する場合は、セカンダリの場所がわかっている必要があります。

セカンダリ AZ

AWS CLI の describe-db-instances コマンド、または RDS API の DescribeDBInstances オペレーションを使用して、セカンダリのアベイラビリティーゾーンを表示することもできます。その出力には、スタンバイミラーが配置されているセカンダリ AZ が表示されます。

データベースミラーリングから Always On 可用性グループへの移行

Microsoft SQL Server Enterprise Edition のバージョン 14.00.3049.1 では、Always On 可用性グループ (AG) はデフォルトで有効になっています。

データベースミラーリング (DBM) から AG に移行するには、まずバージョンを確認します。Enterprise Edition 13.00.5216.0 より前のバージョンの DB インスタンスを使用している場合は、インスタンスにパッチを適用して 13.00.5216.0 以降に変更します。Enterprise Edition 14.00.3049.1 より前のバージョンの DB インスタンスを使用している場合は、インスタンスにパッチを適用して 14.00.3049.1 以降に変更します。

AG を使用するようにミラーリングされた DB インスタンスをアップグレードする場合は、初期にアップグレードを実行し、インスタンスを変更して マルチ AZ を削除してから、もう一度変更してマルチ AZ を追加します。これにより、インスタンスは Always On AG を使用するように変換されます。