クラスターノード再起動後のノード間通信失敗について

こんにちは。Windows プラットフォーム サポートの古谷です。

本日は、WSFC 環境でパッシブのクラスター ノード再起動後にノード間通信失敗する事象についてご紹介します。

クラスター環境では、各クラスター ノードのメモリ上に他のノードとのコネクション情報を保持しています。
本コネクション情報はノード間通信で使用されますが、クラスターノードが起動したタイミングや他ノードとのネットワークが接続されたタイミングで構成され、ノードが停止したタイミングやネットワークが切断されたタイミングで削除されます。

しかしながら、稀に削除が実施されるべきタイミングで削除が正常に行われず、コネクション情報が残存してしまい、クラスター サービスの起動に問題が発生することが報告されております。

具体的には、パッシブのクラスター ノードを再起動した際に、アクティブのノード上でパッシブ ノードのコネクション情報が残ってしまうために、ノード間通信の失敗が発生する事例が弊社に複数寄せられております。

例として、以下、クラスター 2 ノード (WSFC1、WSFC2) の環境において説明いたします。

通常、パッシブ ノードである WSFC2 を再起動すると、アクティブ ノード WSFC1 では WSFC2 と接続が切断されるため WSFC2 のコネクション情報は削除されます。そして、パッシブ ノード起動後アクティブ ノード WSFC1 はパッシブ ノードとのネットワークが接続されたタイミングで、パッシブ ノード WSFC2 からコネクション情報を受け取り、ノード間通信を行います。

しかしながら、パッシブ ノードを再起動した際にアクティブ ノード WSFC1 上にコネクション情報が残る事象が発生した場合、パッシブ ノードと接続された際にパッシブノードから受け取るコネクション情報が既に保持しているコネクション情報と重複しているためアクティブノードで破棄する処理を行い、再接続を拒否します。
そのため、アクティブ ノードとパッシブ ノードの間で通信が行えない問題が発生します。

node

本事象が発生した際はパッシブ ノードのシステムログ上に以下のログが記録されます。

------------
ログの名前  : System
ソース      : EventLog
イベント ID : 1135
レベル      : 重大
説明:
クラスター ノード '<クラスターノード名>' がアクティブなフェールオーバー クラスター メンバーシップから削除されました。クラスター サービスがこのノードで停止されている可能性があります。また、このノードがフェールオーバー クラスター内の別のアクティブなノードと通信できないことが原因である可能性もあります。構成の検証ウィザードを実行して、ネットワーク構成を確認してください。状況が変化しない場合は、このノードのネットワーク アダプターに関連するハードウェアまたはソフトウェアのエラーがないか確認してください。また、ハブ、スイッチ、ブリッジのような、ノードが接続されている他のネットワーク コンポーネントにエラーがないか確認してください。
------------

また、アクティブ ノードのクラスター ログでは、パッシブとの接続時の処理で以下のログが記録されます。

------------
INFO  [Reconnector-<パッシブ クラスターノード名>] Reconnector from epoch 1 to epoch 2 waited xx so far.
:
:
INFO  [FTI] Got new raw TCP/IP connection.
INFO  [FTI][Follower] This node (<ノード番号>) is not the initiator
// パッシブ ノードから返ってきたコネクションが重複しているため拒否
WARN  [FTI][Follower] Ignoring duplicate connection: route to remote node found
:
:
// コネクションは closed される
WARN  mscs::ListenerWorker::operator (): GracefulClose(1226)' because of 'channel to remote endpoint <パッシブ ノード IP アドレス>:~ <ポート番号> ~ is closed'
------------

========================================
本事象の発生後のクラスター動作について
========================================

本事象が発生した場合は、ノード間通信に失敗するためにノード間通信のリトライ処理が定期的に行われます。しかしながらアクティブ ノードではコネクション情報が残っている状態でリトライ処理が行われるため全て失敗してしまいます。

そのため、クラスターとしてはノード間で通信できない状況のため対象パッシブ ノードは停止していると判断されクラスターに参加できない状態が発生する場合があります。
尚、クラスターは対象パッシブ ノードを除くクラスター ノードとクォーラムで動作します。

=========
対処方法
=========

本事象はアクティブ ノードのメモリ上にコネクション情報が不正に残っているために発生します。そのため、本事象が発生した場合は、アクティブ ノードのクラスター サービスを再起動することにより対処可能です。再起動によりアクティブ ノードが保持していた不正なコネクション情報は削除され、パッシブ ノードとの通信が正常に行われます。

クラスター ログから同様の状況であることが確認できましたら、アクティブ ノードの再起動を試すことをご検討ください。