Python(也是C)奇怪的排序是由gethostbynam完成的

2024-05-15 21:42:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中发现了这个问题,但我也能够用一个基本的C程序重现它。你知道吗

我在CentOS 6(也在7上测试过),我还没有在其他Linux发行版上测试过。你知道吗

我在两个虚拟机上有一个应用程序。一个IP地址为10.0.13.30,另一个IP地址为10.0.13.56。它们有一个共享的FQDN,允许使用gethostbyname或getaddrinfo(这是Python文档中建议的)基于DNS的负载平衡(和高可用性)。你知道吗

如果我的客户机应用程序在不同的子网(例如10.0.12.x)上,我没有问题:socket.gethostbyname(FQDN)随机返回10.0.13.30和10.0.13.56。 但是如果我的客户机应用程序在同一个子网络上,它总是返回相同的条目。它似乎总是“最接近的”:我在10.0.13.31作证,它总是返回10.0.13.30,在10.0.13.59它总是返回10.0.13.56。 在这些服务器上,CLI命令(如ping和dig)几乎每次都以不同的顺序返回结果

我搜索了很多主题,我得出的结论是,这似乎是一种“优先顺序,以提高成功的机会所做的glibc”,但我没有找到任何方法来禁用它。 因为很明显,在我的例子中,2个客户机和2个服务器vm位于连接到单个路由器的VMware上,所以我不知道如何考虑服务器的IP的最后一个字节与客户机的IP的最后一个字节最接近的事实。你知道吗

这是一个复制的问题,我在客户端,所以它不是一个选项,我只是移动虚拟机到一个不同的子网:-(。。。。你知道吗

有人想到在同一个子网中进行正确的负载平衡吗?我可以部分控制VM配置,因此如果必须更改设置,我可以这样做。你知道吗


Tags: 文档程序ip服务器应用程序客户机字节顺序