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

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

  • 作業を開始する準備:

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

    前提条件

    セキュリティ

  • 柔軟なフェールオーバー ポリシーを構成するために使用するもの:

    Transact-SQL

    PowerShell

    注意

    可用性グループの柔軟なフェールオーバー ポリシーは、SQL Server Management Studio を使用して構成できません。

作業を開始する準備

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

  • 自動フェールオーバーが行われるには、現在のプライマリ レプリカおよび 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 GROUP Transact-SQL ステートメントを使用します。 既存の可用性グループを変更する場合は、ALTER AVAILABILITY GROUP Transact-SQL ステートメントを使用します。

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

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

      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1); 
      

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

      Transact-SQL の値

      レベル

      自動フェールオーバーが開始される場合

      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 コマンドレットを使用します。

    • フェールオーバーの条件レベルを設定するには、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
      
    • 正常性チェックのタイムアウトしきい値を設定するには、HealthCheckTimeout n パラメーターを使用します。ここで n は 15000 ミリ秒 (15 秒) ~ 4294967295 ミリ秒の整数です。 既定値は 30000 ミリ秒 (30 秒) です。

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

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

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

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

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連項目

参照

sp_server_diagnostics (Transact-SQL)

概念

AlwaysOn 可用性グループの概要 (SQL Server)

可用性モード (AlwaysOn 可用性グループ)

フェールオーバーとフェールオーバー モード (AlwaysOn 可用性グループ)

Windows Server フェールオーバー クラスタリング (WSFC) と SQL Server

フェールオーバー クラスター インスタンスのフェールオーバー ポリシー