自動フェールオーバーの条件を制御する柔軟なフェールオーバー ポリシーの構成 (AlwaysOn 可用性グループ)

このトピックでは、SQL Server 2014 で Transact-SQL または PowerShell を使用して AlwaysOn 可用性グループの柔軟なフェールオーバー ポリシーを構成する方法について説明します。 柔軟なフェールオーバー ポリシーを使用すると、可用性グループの自動フェールオーバーを実行する条件をきめ細かく制御できます。 自動フェールオーバーを実行するエラー条件および正常性チェックの頻度を変更することで、自動フェールオーバーの確率値を増減して高可用性の SLA をサポートできます。

> [!NOTE]  
>  The flexible failover policy of an availability group cannot be configured by using [!INCLUDE[ssManStudioFull](../../../includes/ssmanstudiofull-md.md)].  

はじめに

自動フェールオーバーの制限

  • 自動フェールオーバーが行われるには、現在のプライマリ レプリカおよび 1 つのセカンダリ レプリカが自動フェールオーバーを使用する同期コミット可用性モード用に構成され、セカンダリ レプリカがプライマリ レプリカと同期している必要があります。

  • WSFC クラスターでは、可用性グループが WSFC のエラーしきい値を超えると、自動フェールオーバーはその可用性グループに対して実行されません。 また、クラスター管理者が失敗したリソース グループを手動でオンラインにするか、データベース管理者が可用性グループの手動フェールオーバーを実行するまで、可用性グループの WSFC リソース グループはエラー状態のままになります。 WSFC のエラーしきい値 は、特定の期間に可用性グループに対して許容されるエラーの最大数として定義されています。 既定の期間は 6 時間であり、この期間のエラーの最大数の既定値は n-1 です ( n は WSFC ノードの数です)。 特定の可用性グループのエラーしきい値を変更するには、WSFC フェールオーバー マネージャー コンソールを使用します。

前提条件

  • プライマリ レプリカをホストするサーバー インスタンスに接続されている必要があります。

セキュリティ

アクセス許可

タスク アクセス許可
新しい可用性グループの柔軟なフェールオーバー ポリシーを構成する sysadmin 固定サーバー ロールのメンバーシップと、CREATE AVAILABILITY GROUP サーバー権限、ALTER ANY AVAILABILITY GROUP 権限、CONTROL SERVER 権限のいずれかが必要です。
既存の可用性グループのポリシーを変更する 可用性グループの ALTER AVAILABILITY GROUP 権限、CONTROL AVAILABILITY GROUP 権限、ALTER ANY AVAILABILITY GROUP 権限、または CONTROL SERVER 権限が必要です。

Transact-SQL の使用

柔軟なフェールオーバー ポリシーを構成するには

  1. プライマリ レプリカをホストするサーバー インスタンスに接続します。

  2. 新しい可用性グループの場合は、CREATE AVAILABILITY GROUPTransact-SQL ステートメントを使用します。 既存の可用性グループを変更する場合は、ALTER AVAILABILITY GROUPTransact-SQL ステートメントを使用します。

    • フェールオーバーの条件レベルを設定するには、FAILURE_CONDITION_LEVEL = n オプションを使用します。ここで、 n は 1 ~ 5 の整数です。

      たとえば、次の Transact-SQL ステートメントでは、既存の可用性グループ AG1 のエラー条件レベルをレベル 1 に変更します。

      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);  
      

      これらの整数値とエラー条件レベルの関係は次のとおりです。

      Transact-SQL 値 Level 自動フェールオーバーが開始される条件
      1 1 つ サーバーの停止。 フェールオーバーまたは再起動のため、SQL Server サービスが停止した場合。
      2 2 つ サーバーの応答停止。 下限値の任意の条件が満たされた場合、SQL Server サービスがクラスターに接続され正常性チェックのタイムアウトしきい値を超えた場合、または現在のプライマリ レプリカがエラー状態になった場合。
      3 3 重大なサーバー エラー。 下限値の任意の条件が満たされるか、重大な内部サーバー エラーが発生した場合。

      これは既定のレベルです。
      4 4 中程度のサーバー エラー。 下限値の任意の条件が満たされるか、中程度のサーバー エラーが発生した場合。
      5 5 任意の限定されたエラー条件。 下限値の任意の条件が満たされるか、限定されたエラー条件が発生した場合。

      フェールオーバー条件レベルの詳細については、「可用性グループの自動フェールオーバーのための柔軟なフェールオーバー ポリシー (SQL Server)」を参照してください。

    • 正常性チェックのタイムアウトしきい値を構成するには、HEALTH_CHECK_TIMEOUT = n オプションを使用します。ここで n は 15000 ミリ秒 (15 秒) ~ 4294967295 ミリ秒の整数です。 既定値は 30000 ミリ秒 (30 秒) です。

      たとえば、次の Transact-SQL ステートメントでは、既存の可用性グループ AG1 の正常性チェックのタイムアウトしきい値が 60,000 ミリ秒 (1 分) に変更されます。

      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

PowerShell の使用

フレキシブル フェールオーバー ポリシーを構成するには**

  1. 既定 (cd) を、プライマリ レプリカをホストするサーバー インスタンスに設定します。

  2. 可用性グループに可用性レプリカを追加する場合は、New-SqlAvailabilityGroup コマンドレットを使用します。 既存の可用性レプリカを変更する場合は、Set-SqlAvailabilityGroup コマンドレットを使用します。

    • フェールオーバー条件レベルを設定するには、level パラメーターをFailureConditionLevel使用します。ここで、level は次のいずれかの値です。

      Level 自動フェールオーバーが開始される条件
      OnServerDown 1 つ サーバーの停止。 フェールオーバーまたは再起動のため、SQL Server サービスが停止した場合。
      OnServerUnresponsive 2 つ サーバーの応答停止。 下限値の任意の条件が満たされた場合、SQL Server サービスがクラスターに接続され正常性チェックのタイムアウトしきい値を超えた場合、または現在のプライマリ レプリカがエラー状態になった場合。
      OnCriticalServerError 3 重大なサーバー エラー。 下限値の任意の条件が満たされるか、重大な内部サーバー エラーが発生した場合。

      これは既定のレベルです。
      OnModerateServerError 4 中程度のサーバー エラー。 下限値の任意の条件が満たされるか、中程度のサーバー エラーが発生した場合。
      OnAnyQualifiedFailureConditions 5 任意の限定されたエラー条件。 下限値の任意の条件が満たされるか、限定されたエラー条件が発生した場合。

      フェールオーバー条件レベルの詳細については、「可用性グループの自動フェールオーバーのための柔軟なフェールオーバー ポリシー (SQL Server)」を参照してください。

      たとえば、次のコマンドでは、既存の可用性グループ AG1のエラー条件レベルをレベル 1 に変更します。

      Set-SqlAvailabilityGroup `
       -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg `
       -FailureConditionLevel OnServerDown  
      
    • 正常性チェックタイムアウトしきい値を設定するには、n パラメーターをHealthCheckTimeout使用します。ここで、n は 15000 ミリ秒 (15 秒) から4294967295 ミリ秒までの整数です。 既定値は 30000 ミリ秒 (30 秒) です。

      たとえば、次のコマンドでは、既存の可用性グループ AG1の正常性チェックのタイムアウトしきい値が 120,000 ミリ秒 (2 分) に変更されます。

      Set-SqlAvailabilityGroup `
       -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAG `
       -HealthCheckTimeout 120000  
      

Note

コマンドレットの構文を表示するには、SQL Server PowerShell 環境で コマンドレットを使用Get-Helpします。 詳細については、「 Get Help SQL Server PowerShell」を参照してください。

SQL Server PowerShell プロバイダーを設定して使用するには

参照

AlwaysOn 可用性グループの概要 (SQL Server)
可用性モード (AlwaysOn 可用性グループ)
フェールオーバーとフェールオーバー モード (AlwaysOn 可用性グループ)
Windows Server フェールオーバー クラスタリング (WSFC) と SQL Server
Failover Policy for Failover Cluster Instances
sp_server_diagnostics (Transact-SQL)