2 ノードのサーバー クラスタにおけるネットワーク障害の検出とフェールオーバー動作について

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

日々のサポート業務の中で、お問い合わせを頂く内容についてご紹介します。

Windows Server 2008 ベースのクラスター環境においてパブリック ネットワークにデフォルト ゲートウェイを設定していない事によってクラスターのフェールオーバーが意図通りに発生しないというお問い合わせをいただく事があります。これは Windows Server 2003 と2008 におけるネットワークの正常性確認の動きが違う事に起因して発生します。今回はその仕組みについてご紹介します。

まずそれぞれの OS のネットワーク障害の検出と回復についての基本的な動作については、以下のURL をご確認ください。

 

- 参考 Windows Server での正常性確認について:

・Windows Server 2003 ベース

2 ノードのサーバー クラスタにおけるネットワーク障害の検出と回復

https://support.microsoft.com/kb/242600/ja

・Windows Server 2008 ベース

2 ノードのサーバー クラスタにおけるネットワーク障害の検出と回復(2008 ベース)

https://support.microsoft.com/kb/2862888

 

クラスターのネットワーク障害の検出は、クラスターがサービスを提供するパブリック ネットワークでノード間通信が正常に行われない場合に実施されます。その際、ネットワークのどこで障害が発生したかを検知するために、各ノード共通でアクセス可能なアドレスに疎通確認を行います。Windows Server 2003 ベースでは PING を送信する宛先リスト(PINGLIST)を作成し、このリストに従い複数のアドレスに疎通確認を行います。しかしWindows Server 2008では複数の PING の送信先を持たず、デフォルト ゲートウェイのみに疎通確認を行います。そのため、Windows Server  2008 においてはサービスを提供するネットワーク(大体はパブリック ネットワークとして構成)に必ずデフォルト ゲートウェイを設定する必要があります。

デフォルト ゲートウェイを設定しない場合にはノード間通信に失敗した際にどのネットワーク インターフェースで障害が起きたか検知されません。つまりネットワークで障害が発生した場合にどちらのノードが正常か判断できないため、例えば NIC の障害が発生したノードでリソースを持っていても、正常なノードにフェールオーバーされません。

以下の簡単なシナリオをご参考ください。

 

シナリオ:デフォルト ゲートウェイの設定が無い場合(2008 ベース)

• ノード A のネットワーク インターフェースでネットワーク障害が発生します。

• ノード A とノード B は通信できません。

結果

• ノード A とノード B 両方のネットワーク インターフェースの状態は到達不能となり、ネットワークの状態はパーティション分割になります。

• リソース グループはフェールオーバーせず、オンラインのまま現在の所有者のノードに留まります。

 

Windows Server 2003においては PINGLIST が作成され、優先順位の高いものから順番に PING が送信されます。PINGLIST には両ノードからアクセス可能なアドレスが選ばれます(PINGLIST の詳細については上記URLの2003 ベースを確認してください)。しかし Windows Server 2008からはネットワーク障害が検知されてからなるべく早く正常なノードへフェールオーバーを行う観点から、デフォルト ゲートウェイのみに PING が送信されます。Windows Server 2008において PING の送信先をレジストリなどから変更することはできません。

また Windows Server 2003においては PINGLIST のすべてのアドレスからの応答がなかった場合には、一定時間後に再度優先順位の高いアドレスに PING が再送されていましたが、Windows Server 2008においては再送される設定はありません。

上記においてバージョンにおけるネットワークの障害の検出方法を比較しましたが、Windows Server 2008 でデフォルト ゲートウェイが設定されていれば、通常運用においては Windows Server 2003 と大きな違いはありません。