Always On 可用性グループに柔軟な自動フェールオーバー ポリシーを構成するConfigure a flexible automatic failover policy for an Always On availability group

適用対象: はいSQL Server (Windows only) いいえAzure SQL Database いいえAzure Synapse Analytics (SQL DW) いいえParallel Data Warehouse APPLIES TO: YesSQL Server (Windows only) NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

このトピックでは、SQL Server で Transact-SQLTransact-SQL または PowerShell を使用して Always On 可用性グループの柔軟なフェールオーバー ポリシーを構成する方法について説明します。This topic describes how to configure the flexible failover policy for an Always On availability group by using Transact-SQLTransact-SQL or PowerShell in SQL Server. 柔軟なフェールオーバー ポリシーを使用すると、可用性グループの 自動フェールオーバー を実行する条件をきめ細かく制御できます。A flexible failover policy provides granular control over the conditions that cause automatic failover for an availability group. 自動フェールオーバーを実行するエラー条件および正常性チェックの頻度を変更することで、自動フェールオーバーの確率値を増減して高可用性の SLA をサポートできます。By changing the failure conditions that trigger an automatic failover and the frequency of health checks, you can increase or decrease the likelihood of an automatic failover to support your SLA for high availability.

可用性グループの柔軟なフェールオーバー ポリシーは、そのエラー条件レベルと正常性チェックのタイムアウトしきい値によって定義されます。The flexible failover policy of an availability group is defined by its failure-condition level and health-check timeout threshold. 可用性グループがエラー条件レベルまたはその正常性チェックのタイムアウトしきい値を超えていることを検出すると、可用性グループのリソース DLL が Windows Server フェールオーバー クラスタリング (WSFC) クラスターに応答を送り返します。On detecting that an availability group has exceeded its failure condition level or its health-check timeout threshold, the availability group's resource DLL responds back to the Windows Server Failover Clustering (WSFC) cluster. その後、WSFC クラスターは、セカンダリ レプリカに対する自動フェールオーバーを開始します。The WSFC cluster then initiates an automatic failover to the secondary replica.

注意

可用性グループの柔軟なフェールオーバー ポリシーは、 SQL Server Management StudioSQL Server Management Studioを使用して構成できません。The flexible failover policy of an availability group cannot be configured by using SQL Server Management StudioSQL Server Management Studio.

自動フェールオーバーの制限Limitations on Automatic Failovers

  • 自動フェールオーバーが行われるには、現在のプライマリ レプリカおよび 1 つのセカンダリ レプリカが自動フェールオーバーを使用する同期コミット可用性モード用に構成され、セカンダリ レプリカがプライマリ レプリカと同期している必要があります。For an automatic failover to occur, the current primary replica and one secondary replica must be configured for synchronous-commit availability mode with automatic failover and the secondary replica must be synchronized with the primary replica.

  • 自動フェールオーバーでサポートされるレプリカは 3 つだけです。Only three replicas are supported for automatic failover.

  • WSFC クラスターでは、可用性グループが WSFC のエラーしきい値を超えると、自動フェールオーバーはその可用性グループに対して実行されません。If an availability group exceeds its WSFC failure threshold, the WSFC cluster will not attempt an automatic failover for the availability group. また、クラスター管理者が失敗したリソース グループを手動でオンラインにするか、データベース管理者が可用性グループの手動フェールオーバーを実行するまで、可用性グループの WSFC リソース グループはエラー状態のままになります。Furthermore, the WSFC resource group of the availability group remains in a failed state until either the cluster administrator manually brings the failed resource group online or the database administrator performs a manual failover of the availability group. WSFC のエラーしきい値 は、特定の期間に可用性グループに対して許容されるエラーの最大数として定義されています。The WSFC failure threshold is defined as the maximum number of failures supported for the availability group during a given time period. 既定の期間は 6 時間であり、この期間のエラーの最大数の既定値は n-1 です ( n は WSFC ノードの数です)。The default time period is six hours, and the default value for the maximum number of failures during this period is n-1, where n is the number of WSFC nodes. 特定の可用性グループのエラーしきい値を変更するには、WSFC フェールオーバー マネージャー コンソールを使用します。To change the failure-threshold values for a given availability group, use the WSFC Failover Manager Console.

前提条件Prerequisites

  • プライマリ レプリカをホストするサーバー インスタンスに接続されている必要があります。You must be connected to the server instance that hosts the primary replica.

PermissionsPermissions

タスクTask アクセス許可Permissions
新しい可用性グループの柔軟なフェールオーバー ポリシーを構成するTo configure the flexible failover policy for a new availability group sysadmin 固定サーバー ロールのメンバーシップと、CREATE AVAILABILITY GROUP サーバー権限、ALTER ANY AVAILABILITY GROUP 権限、CONTROL SERVER 権限のいずれかが必要です。Requires membership in the sysadmin fixed server role and either CREATE AVAILABILITY GROUP server permission, ALTER ANY AVAILABILITY GROUP permission, or CONTROL SERVER permission.
既存の可用性グループのポリシーを変更するTo modify the policy of an existing availability group 可用性グループの ALTER AVAILABILITY GROUP 権限、CONTROL AVAILABILITY GROUP 権限、ALTER ANY AVAILABILITY GROUP 権限、または CONTROL SERVER 権限が必要です。Requires ALTER AVAILABILITY GROUP permission on the availability group, CONTROL AVAILABILITY GROUP permission, ALTER ANY AVAILABILITY GROUP permission, or CONTROL SERVER permission.

正常性チェックのタイムアウトしきい値Health-Check Timeout Threshold

可用性グループの WSFC リソース DLL では、プライマリ レプリカをホストする SQL Server のインスタンスで sp_server_diagnostics ストアド プロシージャを呼び出して、プライマリ レプリカの 正常性チェック を実行します。WSFC resource DLL of the availability group performs a health check of the primary replica by calling the sp_server_diagnostics stored procedure on the instance of SQL Server that hosts the primary replica. sp_server_diagnostics は、可用性グループの正常性チェックのタイムアウトしきい値の 3 分の 1 の間隔で結果を返します。sp_server_diagnostics returns results at an interval that equals 1/3 of the health-check timeout threshold for the availability group. 既定の正常性チェックのタイムアウトしきい値は 30 秒であるので、 sp_server_diagnostics では 10 秒間隔で結果が返されます。The default health-check timeout threshold is 30 seconds, which causes sp_server_diagnostics to return at a 10-second interval. sp_server_diagnostics が低速であるか、情報を返さない場合、リソース DLL は正常性チェックのタイムアウトしきい値の間隔が完全に経過するのを待ってから、プライマリ レプリカが無応答であると判断します。If sp_server_diagnostics is slow or is not returning information, the resource DLL will wait for the full interval of the health-check timeout threshold before determining that the primary replica is unresponsive. プライマリ レプリカが応答しない場合、自動フェールオーバー (現在サポートされている場合) が開始されます。If the primary replica is unresponsive, an automatic failover is initiated, if currently supported.

重要

sp_server_diagnostics では、データベース レベルでの正常性チェックは実行されません。sp_server_diagnostics does not perform health checks at the database level.

エラー条件レベルFailure-Condition Level

sp_server_diagnostics から返される診断データと正常性の情報によって自動フェールオーバーが保証されるかどうかは、可用性グループのエラー条件レベルによって異なります。Whether the diagnostic data and health information returned by sp_server_diagnostics warrants an automatic failover depends on the failure-condition level of the availability group. エラー条件レベル は、自動フェールオーバーを実行するエラー条件を指定します。The failure-condition level specifies what failure conditions trigger an automatic failover. エラー条件レベルの範囲は、最も制限が緩いものから (レベル 1)、最も制限の厳しい指定 (レベル 5) まで 5 つあります。There are five failure-condition levels, which range from the least restrictive (level one) to the most restrictive (level five). 任意のレベルは、それより制限が緩いすべてのレベルを含みます。A given level encompasses the less restrictive levels. したがって、最も制限の厳しいレベル 5 にはそれより制限が緩い 4 つの条件が含まれます。以下同様です。Thus, the strictest level, five, includes the four less restrictive conditions, and so forth.

重要

破損したデータベースおよび問題があると考えられるデータベースは、すべてのエラー条件レベルで検出されません。Damaged databases and suspect databases are not detected by any failure-condition level. そのため、破損したデータベースや問題があると考えられるデータベースによって、(その原因がハードウェア障害、データ破損、またはその他の問題であるかにかかわらず) 自動フェールオーバーがトリガーされることはありません。Therefore, a database that is damaged or suspect (whether due to a hardware failure, data corruption, or other issue) never triggers an automatic failover.

次の表では、各レベルに対応するエラー条件について説明します。The following table describes the failure-conditions that corresponds to each level.

LevelLevel エラー状態Failure Condition Transact-SQLTransact-SQL の値Value PowerShell 値PowerShell Value
1 つOne サーバーの停止。On server down. 次のいずれかが発生した場合に自動フェールオーバーを開始することを指定します。Specifies that an automatic failover is initiated when one the following occurs:

SQL ServerSQL Server サービスがダウンした。The SQL ServerSQL Server service is down.

WSFC クラスターに接続するための可用性グループのリースが、サーバー インスタンスから ACK を受信しないために期限切れになった。The lease of the availability group for connecting to the WSFC cluster expires because no ACK is received from the server instance. 詳細については、「 動作方法: SQL Server Always On のリース タイムアウト」を参照してください。For more information, see How It Works: SQL Server Always On Lease Timeout.



これは最も制限の緩いレベルです。This is the least restrictive level.
11 OnServerDownOnServerDown
2 つTwo サーバーの応答停止。On server unresponsive. 次のいずれかが発生した場合に自動フェールオーバーを開始することを指定します。Specifies that an automatic failover is initiated when one of the following occurs:

SQL ServerSQL Server のインスタンスがクラスターに接続していず、可用性グループのユーザー指定の正常性チェック タイムアウトしきい値を超えた。The instance of SQL ServerSQL Server does not connect to cluster, and the user-specified health check timeout threshold of the availability group is exceeded.

可用性レプリカがエラー状態である。The availability replica is in failed state.
22 OnServerUnresponsiveOnServerUnresponsive
3Three 重大なサーバー エラー。On critical server error. 孤立したスピンロック、深刻な書き込みアクセス違反、ダンプが多すぎるなどの深刻な SQL ServerSQL Server 内部エラーが発生した場合に自動フェールオーバーを開始することを指定します。Specifies that an automatic failover is initiated on critical SQL ServerSQL Server internal errors, such as orphaned spinlocks, serious write-access violations, or too much dumping.

これは既定のレベルです。This is the default level.
33 OnCriticalServerErrorOnCriticalServerError
4Four 中程度のサーバー エラー。On moderate server error. SQL ServerSQL Server 内部リソース プールに永続的なメモリ不足の状態があるなど中程度の SQL ServerSQL Server 内部エラーが発生した場合に自動フェールオーバーを開始することを指定します。Specifies that an automatic failover is initiated on moderate SQL ServerSQL Server internal errors, such as a persistent out-of-memory condition in the SQL ServerSQL Server internal resource pool. 44 OnModerateServerErrorOnModerateServerError
5Five 任意の限定されたエラー条件。On any qualified failure conditions. 以下のような任意の限定されたエラー条件に対して自動フェールオーバーを開始することを指定します。Specifies that an automatic failover is initiated on any qualified failure conditions, including:

スケジューラ デッドロックの検出。Detection of Scheduler deadlock.

解決不可能なデッドロックが検出された。Detection of an unsolvable deadlock.



これは最も制限の厳しいレベルです。This is the most restrictive level.
55 OnAnyQualifiedFailureConditionsOnAnyQualifiedFailureConditions

注意

クライアント要求に対して SQL ServerSQL Server のインスタンスが応答しないことは、可用性グループには関係ありません。Lack of response by an instance of SQL ServerSQL Server to client requests is irrelevant to availability groups.

Transact-SQL の使用Using Transact-SQL

柔軟なフェールオーバー ポリシーを構成するにはTo configure the flexible failover policy

  1. プライマリ レプリカをホストするサーバー インスタンスに接続します。Connect to the server instance that hosts the primary replica.

  2. 新しい可用性グループの場合は、 CREATE AVAILABILITY GROUPTransact-SQLTransact-SQL ステートメントを使用します。For a new availability group, use the CREATE AVAILABILITY GROUPTransact-SQLTransact-SQL statement. 既存の可用性グループを変更する場合は、 ALTER AVAILABILITY GROUPTransact-SQLTransact-SQL ステートメントを使用します。If you are modifying an existing availability group, use the ALTER AVAILABILITY GROUPTransact-SQLTransact-SQL statement.

    • フェールオーバーの条件レベルを設定するには、FAILURE_CONDITION_LEVEL = n オプションを使用します。ここで、 n は 1 ~ 5 の整数です。To set the failover condition level, use the FAILURE_CONDITION_LEVEL = n option, where, n is an integer from 1 to 5.

      たとえば、次の Transact-SQLTransact-SQL ステートメントでは、既存の可用性グループ AG1のエラー条件レベルをレベル 1 に変更します。For example, the following Transact-SQLTransact-SQL statement changes the failure-condition level of an existing availability group, AG1, to level one:

      
      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);  
      

      これらの整数値とエラー条件レベルの関係は次のとおりです。The relationship of these integer values to the failure condition levels is as follows:

      Transact-SQLTransact-SQL の値Value LevelLevel 自動フェールオーバーが開始される条件Automatic Is Failover Initiated When...
      11 1 つOne サーバーの停止。On server down. フェールオーバーまたは再起動のため、SQL Server サービスが停止した場合。The SQL Server service stops because of a failover or restart.
      22 2 つTwo サーバーの応答停止。On server unresponsive. 下限値の任意の条件が満たされた場合、SQL Server サービスがクラスターに接続され正常性チェックのタイムアウトしきい値を超えた場合、または現在のプライマリ レプリカがエラー状態になった場合。Any condition of lower value is satisfied, the SQL Server service is connected to the cluster and the health check timeout threshold is exceeded, or the current primary replica is in a failed state.
      33 3Three 重大なサーバー エラー。On critical server error. 下限値の任意の条件が満たされるか、重大な内部サーバー エラーが発生した場合。Any condition of lower value is satisfied or an internal critical server error occurs.

      これは既定のレベルです。This is the default level.
      44 4Four 中程度のサーバー エラー。On moderate server error. 下限値の任意の条件が満たされるか、中程度のサーバー エラーが発生した場合。Any condition of lower value is satisfied or a moderate Server error occurs.
      55 5Five 任意の限定されたエラー条件。On any qualified failure conditions. 下限値の任意の条件が満たされるか、限定されたエラー条件が発生した場合。Any condition of lower value is satisfied or a qualifying failure condition occurs.

      詳細については、「可用性グループの自動フェールオーバーのための柔軟なフェールオーバー ポリシー (SQL Server)」を参照してください。For more information about the failover condition levels, see Flexible Failover Policy for Automatic Failover of an Availability Group (SQL Server).

    • 正常性チェックのタイムアウトしきい値を構成するには、HEALTH_CHECK_TIMEOUT = n オプションを使用します。ここで n は 15000 ミリ秒 (15 秒) ~ 4294967295 ミリ秒の整数です。To configure the health check timeout threshold, use the HEALTH_CHECK_TIMEOUT = n option, where, n is an integer from 15000 milliseconds (15 seconds) to 4294967295 milliseconds. 既定値は 30000 ミリ秒 (30 秒) です。The default value is 30000 milliseconds (30 seconds)

      たとえば、次の Transact-SQLTransact-SQL ステートメントでは、既存の可用性グループ AG1の正常性チェックのタイムアウトしきい値が 60,000 ミリ秒 (1 分) に変更されます。For example, the following Transact-SQLTransact-SQL statement changes the health-check timeout threshold of an existing availability group, AG1, to 60,000 milliseconds (one minute).

      
      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

PowerShell の使用Using PowerShell

柔軟なフェールオーバー ポリシーを構成するにはTo configure the flexible failover policy

  1. 既定 (cd) を、プライマリ レプリカをホストするサーバー インスタンスに設定します。Set default (cd) to the server instance that hosts the primary replica.

  2. 可用性グループに可用性レプリカを追加する場合は、 New-SqlAvailabilityGroup コマンドレットを使用します。When adding an availability replica to an availability group, use the New-SqlAvailabilityGroup cmdlet. 既存の可用性レプリカを変更する場合は、 Set-SqlAvailabilityGroup コマンドレットを使用します。When modifying an existing availability replica, use the Set-SqlAvailabilityGroup cmdlet.

    • フェールオーバーの条件レベルを設定するには、 FailureConditionLevellevel パラメーターを使用します。この level は次の値のいずれかになります。To set the failover condition level, use the FailureConditionLevellevel parameter, where, level is one of the following values:

      Value LevelLevel 自動フェールオーバーが開始される条件Automatic Is Failover Initiated When...
      OnServerDownOnServerDown 1 つOne サーバーの停止。On server down. フェールオーバーまたは再起動のため、SQL Server サービスが停止した場合。The SQL Server service stops because of a failover or restart.
      OnServerUnresponsiveOnServerUnresponsive 2 つTwo サーバーの応答停止。On server unresponsive. 下限値の任意の条件が満たされた場合、SQL Server サービスがクラスターに接続され正常性チェックのタイムアウトしきい値を超えた場合、または現在のプライマリ レプリカがエラー状態になった場合。Any condition of lower value is satisfied, the SQL Server service is connected to the cluster and the health check timeout threshold is exceeded, or the current primary replica is in a failed state.
      OnCriticalServerErrorOnCriticalServerError 3Three 重大なサーバー エラー。On critical server error. 下限値の任意の条件が満たされるか、重大な内部サーバー エラーが発生した場合。Any condition of lower value is satisfied or an internal critical server error occurs.

      これは既定のレベルです。This is the default level.
      OnModerateServerErrorOnModerateServerError 4Four 中程度のサーバー エラー。On moderate server error. 下限値の任意の条件が満たされるか、中程度のサーバー エラーが発生した場合。Any condition of lower value is satisfied or a moderate Server error occurs.
      OnAnyQualifiedFailureConditionsOnAnyQualifiedFailureConditions 5Five 任意の限定されたエラー条件。On any qualified failure conditions. 下限値の任意の条件が満たされるか、限定されたエラー条件が発生した場合。Any condition of lower value is satisfied or a qualifying failure condition occurs.

      詳細については、「可用性グループの自動フェールオーバーのための柔軟なフェールオーバー ポリシー (SQL Server)」を参照してください。For more information about the failover condition levels, see Flexible Failover Policy for Automatic Failover of an Availability Group (SQL Server).

      たとえば、次のコマンドでは、既存の可用性グループ AG1のエラー条件レベルをレベル 1 に変更します。For example, the following command changes the failure-condition level of an existing availability group, AG1, to level one.

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg `   
      -FailureConditionLevel OnServerDown  
      
    • 正常性チェックのタイムアウトしきい値を設定するには、 HealthCheckTimeoutn パラメーターを使用します。ここで n は 15000 ミリ秒 (15 秒) ~ 4294967295 ミリ秒の整数です。To set the health check timeout threshold, use the HealthCheckTimeoutn parameter, where, n is an integer from 15000 milliseconds (15 seconds) to 4294967295 milliseconds. 既定値は 30000 ミリ秒 (30 秒) です。The default value is 30000 milliseconds (30 seconds).

      たとえば、次のコマンドでは、既存の可用性グループ AG1の正常性チェックのタイムアウトしきい値が 120,000 ミリ秒 (2 分) に変更されます。For example, the following command changes the health-check timeout threshold of an existing availability group, AG1, to 120,000 milliseconds (two minutes).

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

注意

コマンドレットの構文を表示するには、 PowerShell 環境で Get-Help SQL ServerSQL Server コマンドレットを使用します。To view the syntax of a cmdlet, use the Get-Help cmdlet in the SQL ServerSQL Server PowerShell environment. 詳細については、「 Get Help SQL Server PowerShell」を参照してください。For more information, see Get Help SQL Server PowerShell.

SQL Server PowerShell プロバイダーを設定して使用するにはTo set up and use the SQL Server PowerShell provider

自動フェールオーバーを設定するにはTo configure automatic failover

参照See Also

AlwaysOn 可用性グループの概要 (SQL Server) Overview of Always On Availability Groups (SQL Server)
可用性モード (AlwaysOn 可用性グループ) Availability Modes (Always On Availability Groups)
フェールオーバーとフェールオーバー モード (AlwaysOn 可用性グループ) Failover and Failover Modes (Always On Availability Groups)
Windows Server フェールオーバー クラスタリング (WSFC) と SQL Server Windows Server Failover Clustering (WSFC) with SQL Server
フェールオーバー クラスター インスタンスのフェールオーバー ポリシー Failover Policy for Failover Cluster Instances
sp_server_diagnostics (Transact-SQL)sp_server_diagnostics (Transact-SQL)