Amazon Relational Database Service
ユーザーガイド

Microsoft SQL Server のマルチ AZ 配置

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

Amazon RDS は、SQL Server データベースミラーリング (DBM) または Always On 可用性グループ (AG) による Microsoft SQL Server のマルチ 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 2017 Enterprise Edition 14.00.3049.1 以降

  • SQL Server 2016 Enterprise Edition 13.00.5216.0 以降

Amazon RDS では、上述の Enterprise Edition のバージョンを除き、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 のいずれもサポートされていません

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

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

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

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

  • 欧州 (ストックホルム): DBM と Always On AG のいずれもサポートされていません

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

AWS マネジメントコンソール を使用して新しい SQL Server DB インスタンスを作成する場合、データベースミラーリング (DBM) または Always On AG によるマルチ AZ を追加できます。これを行うには、[DB 詳細の指定] ページの [マルチ AZ 配置] リストから [Yes (Mirroring / Always On) (はい (ミラーリング/常時稼働))] を選択します。詳細については、「Microsoft SQL Server データベースエンジンを実行する DB インスタンスを作成する」を参照してください。

AWS マネジメントコンソール を使用して既存の SQL Server の DB インスタンスを変更する場合、[DB インスタンスの変更] ページで [マルチ AZ 配置] リストから [Yes (Mirroring / Always On)] を選択して、DBM または AG によるマルチ AZ を追加します。詳細については、「Microsoft SQL Server データベースエンジンを実行する DB インスタンスの変更」を参照してください。

Microsoft SQL Server マルチ AZ 配置の注意事項と推奨事項

以下に示しているのは、Microsoft SQL Server DB インスタンスでマルチ AZ 配置を使用するときのいくつかの制限事項です。

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

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

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

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

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

以下に示しているのは、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 は新しい正常なホストをプロビジョンし、異常のあるホストと置き換えます。

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

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

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

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

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

以下に示しているのは、Microsoft SQL Server DB インスタンスでマルチ AZ 配置を使用するときのいくつかの推奨事項です。

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

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

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

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

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

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

  • SQL Server データベースにアクセスするアプリケーションには、接続エラーを見つける例外処理が必要です。以下のコード例では、通信エラーを見つける try/catch ブロックを示しています。

    for (int iRetryCount = 0; (iRetryCount < RetryMaxAttempts && keepInserting); iRetryCount++) { using (SqlConnection connection = new SqlConnection(DatabaseConnString)) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');"; try { connection.Open(); while (keepInserting) { command.ExecuteNonQuery(); intervalCount++; } connection.Close(); } catch (Exception ex) { Logger(ex.Message); } } } if (iRetryCount < RetryMaxAttempts && keepInserting) { 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 マネジメントコンソール を使用して、セカンダリレプリカの場所を調べることができます。VPC 内のプライマリ DB インスタンスを設定する場合は、セカンダリの場所がわかっている必要があります。


				 セカンダリ AZ

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

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

Microsoft SQL Server Enterprise エディションのバージョン 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 を使用するように変換されます。