私はPythonでこの問題を発見しましたが、基本的なCプログラムでも再現できました。Python(でもCでも)gethostbynameによって変わった並べ替え
私はCentOS 6(7でもテスト済み)ですが、他のLinuxディストリビューションではテストしていません。
私は2つのVMにアプリケーションを持っています。 1つはIPアドレス10.0.13.30で、もう1つは10.0.13.56です。彼らはgethostbynameまたはgetaddrinfo(これはPythonのドキュメントで示唆されているものです)を使用してDNSベースの負荷分散(および高可用性)を可能にする共有FQDNを持っています。
クライアントアプリケーションが別のサブネット(例:10.0.12.x)にある場合、問題はありません。つまり、socket.gethostbyname(FQDN)はランダムに10.0.13.30と10.0.13.56を返しています。 クライアントアプリケーションが同じサブネットワーク上にある場合、常に同じエントリを返します。そして、それは常に "最も近い"ようです:私は10.0.13.31でそれをdepoyedし、常に10.0.13.30を返し、10.0.13.59では常に10.0.13.56を返します。 これらのサーバでは、pingやdigなどのCLIコマンドがほぼ毎回異なる順序で結果を返しています。
私は多くの主題を検索しましたが、これは一種の「優先順位付けglibc "を無効にする方法はありませんでした。 明らかに私のケースでは2つのクライアントと2つのサーバVMがVMware上に1台のルータに接続されているので、サーバのIPの最後のバイトがサーバの最後のバイトに最も近いということはわかりません。クライアントのIPが考慮されます。
これは私だけの異なるサブネット:-(に仮想マシンを移動することはオプションではありませんので、私は、顧客側で持っている問題の複製です....
誰もが持っています私は部分的にVMの設定を変更する必要があるので、私はそれを行うことができます。
マシンが独自のホスト名を検索している場合、常に独自のIPアドレスが返されます。 –