gethostbyname() が誤ったクラスタ仮想 IP アドレスを返す

この記事は、以前は次の ID で公開されていました: JP257577
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
アプリケーションが gethostbyname 関数を使用している場合、返された IP アドレスの一覧に、クラスタ サービスによって作成された仮想 IP アドレスが含まれないことがあります。または、この一覧に、現在このノードで保持されていない IP アドレスが表示されることがあります。
原因
クラスタ サービスが仮想 IP アドレスの追加または削除を実行するときに、TCP/IP プロトコルが、IP アドレスを返すキャッシュを更新しません。

状況

Windows 2000

この問題を解決するためのモジュールは、Windows 2000 日本語版 Service Pack 2 以降に含まれております。
Windows 2000 日本語版の最新 Service Pack については、以下 Web サイトから入手できます。
詳細
Windows NT 4.0 では、gethostbyname (ローカル ノード名) により、クラスタ仮想 IP アドレスを含め、サーバー上でインスタンス化されたすべての IP アドレスを含む一覧が返されました。Windows 2000 では、同じ動作により、通常は、永久にサーバーに割り当てられている IP アドレスだけが返されます。しかし、Windows NT 4.0 と同様、一覧全体が返されることもあります。

このように動作が異なるのは、DNS リゾルバ サービスの実装による副作用のためです。リゾルバは、起動時にローカル IP アドレスの一覧をキャッシュに入れます。ローカル ノード名を解決するよう求められた場合、リゾルバは、DNS サーバーに問い合わせを実行することなく、キャッシュにある一覧を返します。ここで問題となるのは、リゾルバが、TCP スタックからの PNP アドレス変更通知をリッスンせず、DHCP クライアントからこれらの通知を受け取ることです。リゾルバは、DHCP から変更通知を受け取ったときに、TCP スタックに問い合わせることにより、ローカル IP アドレスのキャッシュされた一覧を更新します。この結果、クラスタにより、新しいアドレスのインスタントが生成された場合、それに続いて DHCP アドレスの変更が発生しない限り、リゾルバはその新しいアドレスを認識できません。同じことは、クラスタのアドレスが削除された場合にも当てはまります。DHCP アドレスの変更はほとんど発生しないため、gethostbyname は、ローカル ノード名を解決するときに、通常はクラスタ IP アドレスを除外します。

Windows 2000 では、MSMQ は、クラスタのアクティブ/アクティブ シナリオで新しい動作に依存するようになりましたが、修正プログラムの適用によりこの問題を解決できます。MSMP は、クライアント/サーバーの通信に RPC を使用します。サーバー プロセスの起動時に、RPC は、gethostbyname を使って、リッスンすべき IP アドレスの一覧を決定します。そのアクティブ/アクティブ構成で、1 つの MSMQ サーバー プロセスがローカル ノード名に関連付けられ、ほかのサーバー プロセスはクラスタ仮想サーバーに関連付けられます。gethostbyname がローカル ノード名に関連付けられたプロセスに仮想サーバーの IP アドレスを返した場合、両方のプロセスがそのアドレスをリッスンします。その結果、仮想サーバー プロセスに接続しようとしているクライアントが、間違って、ローカル ノードのプロセスに接続される場合があります。このように MSMQ は、クラスタ仮想 IP アドレスが通常は、ローカル ノード名の解決時に gethostbyname によって返されることはないという事実に依存しています。

関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 257577 (最終更新日 2001-02-22) をもとに作成したものです。

MSCS W2000MSCS Virtual Server
プロパティ

文書番号:257577 - 最終更新日: 02/03/2014 21:51:26 - リビジョン: 3.1

Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Datacenter Server

  • kbnosurvey kbarchive kbhotfixserver kbbug kbfix KB257577
フィードバック