在循环 DNS 中,与域关联的每个 IP 被客户端选中的概率相同。
但如果我想在两个 IP 上设置循环域,但不是以 50%-50% 的方式,该怎么办?
例如,我可以为 IP X 添加 3 条 A 记录,为 IP Y 添加 2 条 A 记录。这样,客户端选择 X 和 Y 的概率为 60%-40%,而不是 50-50(如果我为每个 IP 只添加 1 条 A 记录的话)。
理论上这听起来是可能的。但这真的能如预期的那样工作吗?
如果它在特定的 DNS 服务器(即 BIND)上工作,那么其他永久缓存请求的 DNS 服务器(例如 ISP DNS)又会怎样呢?
假设这在服务器端工作,客户端如何处理具有相同 IP 的多个 A 记录?
答案1
以下是加权循环 DNS 的实现: https://web.archive.org/web/20100126053705/http://www.mccartney.ie/wordpress/2008/08/19/wrr-dns-with-powerdns
由于 RFC3484 的实现,返回多个答案是危险的: http://drplokta.livejournal.com/109267.html
答案2
由于缓存,并且客户端上的 DNS 解析器实际上会选择要选择哪个 IP 地址,因此循环调度对于从预期负载平衡中获得任何类型的“平衡”来说都是一个糟糕的选择。尝试对其进行调整以统计负载趋势不会产生任何有用的效果。
从根本上讲,“A”记录并非设计用于执行您要查找的操作。(相比之下,SRV RR 确实具有“加权”功能,但遗憾的是,没有人使用它们。)我想可以实现一个 DNS 服务器,使用某种统计指标对返回的 IP 地址列表进行排列,但考虑到大量客户端将收到查找服务器的缓存结果(服务器端假设的统计指标永远不会“看到”),实际上也没有办法做到这一点。
答案3
我对 DNS 循环的理解是,返回的 IP 由服务器控制(每个客户端每个请求只返回一个 IP),而不是由客户端控制。当客户端解析器查询 DNS 时,服务器返回第一个记录并将该记录发送到队列的后面,下一个客户端请求将获取第二个记录,依此类推。
没有“等权重”算法(或者我知道的任何其他算法)。这只是有多少条记录的问题,这些记录按列表顺序返回(从第一个到最后一个)。我说得对吗?