gpt4 book ai didi

Python(还有 C)由 gethostbyname 完成的奇怪排序

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:00 25 4
gpt4 key购买 nike

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

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

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

如果我的客户端应用程序在不同的子网上(例如 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。在这些服务器上,ping 和 dig 等 CLI 命令几乎每次都以不同的顺序返回结果

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

这是我在客户方遇到的一个问题的复制,所以我不能选择将 VM 移动到不同的子网:-( ....

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

最佳答案

与其希望标准库为您做负载平衡,不如使用 socket.getaddrinfo()并明确地随机选择其中一个结果主机。如果您尝试的第一个主机不可用,这也将使故障转移到其他主机变得容易。

关于Python(还有 C)由 gethostbyname 完成的奇怪排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45712809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com