リソースの異常を検知し、フェイルオーバするまでの流れは以下となる。
- リソースDLLのLooks Aliveポーリングでリソースの異常検知 OR
リソースDLLのIs Aliveポーリングでリソースの異常検知
※リソースの異常はAliveポーリングのみでなく、リソース起動時、停止時に時間がかかっている場合にも異常検知し失敗状態となる。異常と判定される時間はリソースのプロパティ[ポリシー]タブの「保留タイムアウト」の時間となる。 - リソースは失敗状態となり、リソースのプロパティ[ポリシー]タブの「リソースが失敗状態になった場合は、再起動しない」にチェックを入れている場合、失敗状態のままとなり、再度起動を行う際は手動で行う必要がある。
「リソースが失敗状態になった場合は、現在のノードで再起動」にチェックを入れている場合、リソースが失敗状態のままではなく再起動を行う。 - 再起動時に失敗した場合、再度再起動を試みます。再起動はリソースのプロパティ[ポリシー]タブの「指定期間内での再起動の試行回数」の数だけ行う。
再起動の試行回数は再起動を開始してからリソースのプロパティ[ポリシー]タブの「再起動期間」の時間が経過するとリセットされる。 - 再起動に失敗し再度再起動を行う際、リソースのプロパティ[ポリシー]タブの「再起動の遅延」の時間分、間隔を空ける。
- リソースのプロパティ[ポリシー]タブの「再起動に失敗した場合は、この役割のすべてのリソースをフェールオーバーする」にチェックを入れている場合、繰り返し実行される再起動が全て失敗した際に、別ノードにフェールオーバーし、移動先ノードにて再起動を試みる。
「再起動に失敗した場合は、この役割のすべてのリソースをフェールオーバーする」 にチェックを入れていない場合、フェールオーバーせず失敗状態のままとなりリソースのプロパティ[ポリシー]タブの「再起動がすべて失敗した場合は、指定した期間後にもう一度再起動を開始する」の時間後に再起動を試みる。 - 「再起動に失敗した場合は、この役割のすべてのリソースをフェールオーバーする」 にチェックを入れており、別ノードにリソースがフェールオーバーした後、移動先のノードにおいても「指定期間内での再起動の試行回数」の数だけ再起動に失敗した場合、失敗状態となり、「再起動がすべて失敗した場合は、指定した期間後にもう一度再起動を開始する」の時間後に再起動を試みる。「再起動がすべて失敗した場合は、指定した期間後にもう一度再起動を開始する」の時間後の再起動にも失敗しますと再度別ノードへフェールオーバーする。
- 上記⑥にて再度別ノードへフェールオーバーを開始するが、フェールオーバーを行う回数は一定時間制限されている。失敗したリソースが所属する役割(リソースグループ)のプロパティ[フェールオーバー]タブにある、「期間(時間)」の間の最大フェールオーバー回数は、同じく[フェールオーバータブ]にある「指定した期間内の最大エラー数」の指定値となる。 一定時間内に最大フェールオーバー回数を超えようとしますと、リソースはフェールオーバーが行われず、失敗状態となります。
参考)
ハートビート通信不通時の(NW障害、片ノードのクラスタサービスorノードダウン等)フェールオーバーの流れは以下となる。
- ハートビートパケット(既定は1秒毎×5回)の応答無しを確認。
- 起動しているノードは通信を取り合えるノードと所有しているクォーラムディスクの数を計算し、合計が全ノード数の半分以下を下回りますとクラスタサービスを停止いたします。
- 合計が全ノード数の半分を超えていますとクラスタサービスは継続稼働し、通信が取れないノードが所有しているリソースは失敗状態となり、稼働中のノードへフェールオーバーする。