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 2019: Standard および Enterprise Edition

  • SQL Server 2017: Enterprise Edition 14.00.3049.1 以降

  • SQL Server 2016 Enterprise Edition 13.00.5216.0 以降

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

  • SQL Server 2017: Standard および Enterprise Edition

  • SQL Server 2016: Standard および Enterprise Edition

  • SQL Server 2014: Standard および Enterprise Edition

  • SQL Server 2012: Standard および Enterprise Edition

Amazon RDS では、次の例外を除くすべての AWS リージョンで SQL Server のマルチ AZ がサポートされています。

  • アジアパシフィック (大阪): DBM と Always On AG のいずれもサポートされていません

  • アジアパシフィック (シドニー): 仮想プライベートクラウド (VPC) の DB インスタンスでサポートされています。

  • アジアパシフィック (東京): VPC の DB インスタンスでサポートされています。

    詳細については、「VPC 内の DB インスタンスの使用」を参照してください。

  • 南米 (サンパウロ): m1 および m2 以外のすべての DB インスタンスクラスタイプ でサポートされています。

次の 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 (Mirroring)

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

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

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

注記

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

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

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

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

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

  • データベースの読み取りアクティビティを受け入れるように、セカンダリ 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 のエージェントジョブが 100 に制限されています。

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

以下は、RDS for Microsoft 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 は、単一のスタンバイレプリカをサポートします。

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

  • SQL Server Agent のジョブがある場合は、それらをセカンダリ上で再作成します。これは、これらのジョブが msdb データベースに格納されているためです。また、データベースミラーリング (DBM) または Always On 可用性グループ (AG) を使用してこのデータベースを複製することはできません。最初に元のプライマリにジョブを作成してから、フェイルオーバーし、新しいプライマリに同じジョブを作成します。

  • 同期的データレプリケーションのため、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 を使用するように変換されます。