柔軟なフェールオーバー ポリシーを使用すると、可用性グループの 自動フェールオーバー を実行する条件をきめ細かく制御できます。 自動フェールオーバーを実行するエラー条件および正常性チェックの頻度を変更することで、自動フェールオーバーの確率値を増減して高可用性の SLA をサポートできます。
可用性グループの柔軟なフェールオーバー ポリシーは、そのエラー条件レベルと正常性チェックのタイムアウトしきい値によって定義されます。 可用性グループがエラー条件レベルまたはその正常性チェックのタイムアウトしきい値を超えていることを検出すると、可用性グループのリソース DLL が Windows Server フェールオーバー クラスタリング (WSFC) クラスターに応答を送り返します。 その後、WSFC クラスターは、セカンダリ レプリカに対する自動フェールオーバーを開始します。
重要
WSFC クラスターでは、可用性グループが WSFC のエラーしきい値を超えると、自動フェールオーバーはその可用性グループに対して実行されません。 また、クラスター管理者が失敗したリソース グループを手動でオンラインにするか、データベース管理者が可用性グループの手動フェールオーバーを実行するまで、可用性グループの WSFC リソース グループはエラー状態のままになります。 WSFC のエラーしきい値 は、特定の期間に可用性グループに対して許容されるエラーの最大数として定義されています。 既定の期間は 6 時間であり、この期間のエラーの最大数の既定値は n-1 です ( n は WSFC ノードの数です)。 特定の可用性グループのエラーしきい値を変更するには、WSFC フェールオーバー マネージャー コンソールを使用します。
正常性チェックのタイムアウトしきい値
可用性グループの WSFC リソース DLL では、プライマリ レプリカをホストする SQL Server のインスタンスで sp_server_diagnostics ストアド プロシージャを呼び出して、プライマリ レプリカの 正常性チェック を実行します。 sp_server_diagnostics は、可用性グループの正常性チェックのタイムアウトしきい値の 3 分の 1 の間隔で結果を返します。 既定の正常性チェックのタイムアウトしきい値は 30 秒であるので、 sp_server_diagnostics では 10 秒間隔で結果が返されます。 sp_server_diagnostics が低速であるか、情報を返さない場合、リソース DLL は正常性チェックのタイムアウトしきい値の間隔が完全に経過するのを待ってから、プライマリ レプリカが無応答であると判断します。 プライマリ レプリカが応答しない場合、自動フェールオーバー (現在サポートされている場合) が開始されます。
重要
sp_server_diagnostics では、データベース レベルでの正常性チェックは実行されません。
エラー条件レベル
sp_server_diagnostics から返される診断データと正常性の情報によって自動フェールオーバーが保証されるかどうかは、可用性グループのエラー条件レベルによって異なります。 エラー条件レベル は、自動フェールオーバーを実行するエラー条件を指定します。 エラー条件レベルの範囲は、最も制限が緩いものから (レベル 1)、最も制限の厳しい指定 (レベル 5) まで 5 つあります。 任意のレベルは、それより制限が緩いすべてのレベルを含みます。 したがって、最も制限の厳しいレベル 5 にはそれより制限が緩い 4 つの条件が含まれます。以下同様です。
重要
破損したデータベースおよび問題があると考えられるデータベースは、すべてのエラー条件レベルで検出されません。 そのため、破損したデータベースや問題があると考えられるデータベースによって、(その原因がハードウェア障害、データ破損、またはその他の問題であるかにかかわらず) 自動フェールオーバーがトリガーされることはありません。
次の表では、各レベルに対応するエラー条件について説明します。
| レベル | エラー状態 | Transact-SQL 値 | PowerShell 値 |
|---|---|---|---|
| 1 | サーバーの停止。 これは最も制限の緩いレベルです。 次のいずれかが発生したときに自動フェールオーバーを開始することを指定します。 SQL Server サービスがダウンした。 WSFC クラスターに接続するための可用性グループのリースが、サーバー インスタンスから ACK を受信しないために期限切れになった。 詳細については、「 しくみ: SQL Server AlwaysOn のリース タイムアウト」を参照してください。 |
1 | OnServerDown |
| 2 | サーバーの応答停止。 次のいずれかが発生したときに自動フェールオーバーを開始することを指定します。 SQL Server のインスタンスがクラスターに接続していず、可用性グループのユーザー指定の正常性チェック タイムアウトしきい値を超えた。 可用性レプリカがエラー状態である。 |
2 | OnServerUnresponsive |
| 3 | 重大なサーバー エラー。 孤立したスピンロック、重大な書き込みアクセス違反、ダンプの量が多すぎるなど、重大な SQL Server 内部エラーで自動フェールオーバーが開始されることを指定します。 これは既定のレベルです。 | 3 | OnCriticalServerError |
| 4 | 中程度のサーバー エラー。 SQL Server 内部リソース プールに永続的なメモリ不足の状態があるなど中程度の SQL Server 内部エラーが発生した場合に自動フェールオーバーを開始することを指定します。 | 4 | OnModerateServerError |
| 5 | 任意の限定されたエラー条件。 これは最も制限の厳しいレベルです。 以下のような任意の限定されたエラー条件に対して自動フェールオーバーを開始することを指定します。 SQL エンジンのワーカー スレッドが枯渇している。 解決不可能なデッドロックが検出された。 |
5 | OnAnyQualifiedFailureConditions |
注
クライアント要求に対して SQL Server のインスタンスが応答しないことは、可用性グループには関係ありません。
関連タスク
自動フェールオーバーを設定するには
可用性レプリカの可用性モードの変更 (SQL Server) (自動フェールオーバーには同期コミット可用性モードが必要)
自動フェールオーバーの条件を制御するように柔軟なフェールオーバー ポリシーを構成する (AlwaysOn 可用性グループ)
関連コンテンツ
こちらもご覧ください
AlwaysOn 可用性グループの概要 (SQL Server)
可用性モード (AlwaysOn 可用性グループ)
フェールオーバーとフェールオーバーモード (AlwaysOn 可用性グループ)
Windows Server フェールオーバー クラスタリング (WSFC) と SQL Server
フェールオーバー クラスター インスタンスのフェールオーバー ポリシー
sp_server_diagnostics (Transact-SQL)