[Linux][Windows] フェイルオーバーの仕組みについて
対象製品:以下製品の全バージョン
・SIOS Protection Suite for Linux
・SIOS Protection Suite for Windows
フェイルオーバーには 2 種類の動作があります。
LifeKeeper にて異常を検知した際は、必ず、2 種類の内のどちらかの動作により、フェイルオーバーが処理されます。
該当の 2 種類の内容は次のとおりです。
1)ノード障害に伴うフェイルオーバー
コミュニケーションパスによるハートビートにて、対向先ノードからの応答を得られない場合、対向先ノード自体に障害が発生したと判断し、フェイルオーバーを開始します。
(当状況が発生する主な原因は、OS の予期せぬ電源断や再起動、LifeKeeper サービスの異常発生、ネットワーク異常の影響等が考えられます。)
この処理では、管理下における、すべてのリソースを対象にフェイルオーバーを実施します。
また、この処理では、リソースの停止処理は発生しません。
例えば、ネットワーク異常の影響によりフェイルオーバーが発生した場合、それぞれのノードにおいて、「対向先ノードにて異常が発生していることから、自身が稼働系ノードとなる必要がある」と判断します。
そのため、それぞれのノードにおいて、「自身にて起動しているリソースを停止する」との判断は伴いません。
2)リソース障害に伴うフェイルオーバー
リソースの監視処理にて障害を検知して、回復処理が失敗、もしくは回復処理が無効となる場合、リソースに障害が発生したと判定(判断)しフェイルオーバーを開始します。
この処理では、障害が発生したリソース及び依存関係が設定されたリソースを対象にフェイルオーバーを実施します。
障害が発生していないリソースではフェイルオーバーは処理されません。
また、この処理では、ノード障害とは異なり、自身における障害検知がフェイルオーバーの契機となるため、「自身にて異常が発生していることから、対向先ノードにてリソースを起動する必要があるため、自身ではリソースを停止する必要がある」と判断し、リソースを停止します。
※リソースの停止に成功することにより、対向先ノードでのリソース起動が可能となります。
<補足1>
フェイルオーバーによるリソース起動の仕様として、Linux 版と Windows 版では動作が異なります。
それぞれ次のとおりです。なお、リソース障害、ノード障害の共通の仕様です。
【Linux 版】
依存関係が設定されているリソース群のフェイルオーバーにあたり、一部のリソースが起動に失敗した場合、リソース起動処理はエラー終了となりますが、エラー終了が発生する前に起動できていたリソースは起動状態を維持できます。
起動が失敗したリソース及び、上位に依存関係が設定されているリソースは停止状態です。
ノード障害によるフェイルオーバーにおいても、リソースが起動に失敗した場合、依存関係が設定されているリソース群では起動処理がエラー終了となります。(上記と同様の動作です。)
ただし、依存関係が設定されていないリソースへの影響はありません。依存関係が設定されていない他のリソースでは、起動処理が実施されます。
【Winodws 版】
依存関係が設定されているリソース群のフェイルオーバーにあたり、一部のリソースが起動に失敗した場合、リソース起動処理はエラー終了となりますが、失敗発生前に起動が成功していたリソースも停止します。
そのため、フェイルオーバーに失敗した場合、両ノードにおいて、起動が失敗したリソース及び依存関係が設定されているすべてのリソースは停止状態になります。
ノード障害によるフェイルオーバーにおいても、一部のリソースが起動に失敗した場合、依存関係が設定されているリソース群ではすべてが停止となります。(上記と同様の動作です。)
ただし、依存関係が設定されていないリソースへの影響はありません。依存関係が設定されていない他のリソースでは、起動処理が実施されます。
なお、手動作業でのスイッチオーバーでは、Linux 版と同様の動作となります。
リソース群の起動において、一部のリソースが起動に失敗した場合、リソース起動処理はエラー終了となりますが、失敗発生前に起動が成功していたリソースは起動を維持します。
フェイルオーバーの場合とは異なり、停止することはありません。
<補足2>
ネットワークの影響により両ノードの通信が切断された場合、フェイルオーバーに伴い、クラスタ内のすべてのノードにてリソースが起動する(スプリットブレインが発生する)場合があります。
スプリットブレインが発生した際の状況につきまして、Linux 版と Windows 版では動作が異なります。
Linux 版の場合
コミュニケーションパスによる通信が復旧した後も、スプリットブレインの状態が続きます。
スプリットブレインの解消にあたり、待機系とするノードのリソースを手動で停止させる対処が必要となります。
※リソースの停止方法は、通常運用時と同様であり、LifeKeeper GUI もしくは perform_action コマンドより実行してください。
Winodws 版の場合
コミュニケーションパスによる通信が復旧した後、各リソースに設定されている優先順位を基準に、優先順位が低く設定されている(設定値が大きい)ノードでは、次の記録の出力と共に、リソースを自動的に停止します。
※次の記録は、Windows のイベントログ「アプリケーション」に出力されます。
Process: commup_resrem.exe(XXX]) *ERROR* (No. 1705) Resource (リソース名) is in-service on local system and (ホスト名) system. Removing it from service on local system because it is lower in prioirty.
ただし、データレプリケーションリソースは、自動的に停止できません。
そのため、LifeKeeper GUI 上にて、データレプリケーションリソースを右クリックのうえ、「スプリットブレインリカバリー」を選択し、スプリットブレインを回避する必要があります。