自動フェールオーバーの条件を制御する柔軟なフェールオーバー ポリシーの構成 (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 の使用
柔軟なフェールオーバー ポリシーを構成するには
プライマリ レプリカをホストするサーバー インスタンスに接続します。
新しい可用性グループの場合は、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 の使用
柔軟なフェールオーバー ポリシーを構成するには
既定 (cd) を、プライマリ レプリカをホストするサーバー インスタンスに設定します。
可用性グループに可用性レプリカを追加する場合は、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 可用性グループ)