我目前正在运行一个网站,该网站的流量目前分布在 7 个镜像服务器中(使用 DNS 循环)。但鉴于流量不断增长,很快将需要更多镜像。
使用循环 DNS 时,对于与给定域名关联的 IP 地址数量是否有任何实际的建议限制?
此外,当镜子数量较多(例如超过 10 或 20 个镜子)时,您会推荐什么样的解决方案?
谢谢。
答案1
需要记住的是,默认情况下,DNS 查找使用 UDP。如果响应大于单个数据报的容量,则将返回尽可能多的数据报,并在标头中设置 TC(截断)位。
请求者可以选择使用返回的内容,或者使用 TCP 重新尝试查询。
缓存 DNS 服务器不应该缓存截断的响应,因为它们不知道返回的记录集有多完整(响应不会说“我给你 28 条记录中的 12 条”)。
因此,记录的最大数量是 UDP 数据报中可以保留多少记录的一个因素。请记住,响应需要包含授权部分,该部分的大小将根据区域的 SOA 记录而有所不同。
如果您使用 CNAME 记录,这也会增加响应的大小,因为您会收到指向的事物的 CNAME 和 A 记录。
最好的办法是使用 dig 或“host -v”尝试各种数量的 A 记录,以查看查询何时超过 UDP 响应的最大大小。
答案2
没有硬性限制,但大多数站点运行的镜像不超过 5 个或 10 个。如果站点在地理上分开,则通过 DNS 循环进行镜像最有用,这样除了负载共享之外还有冗余。
随着镜像数量的增加,使用 DNS 轮询作为负载共享的效率会降低,因为 DNS 轮询不会考虑需要更多资源的不同请求。最好使用前端负载平衡来按 CPU 负载和服务器可用性分配工作负载,这也会简化维护,因为服务器可以立即关闭而无需更改 DNS,从而导致客户端尝试从缓存的 DNS 记录访问已关闭的服务器。
答案3
我回答这个问题晚了,但我觉得最好提一下你能做什么的实际限制。据我所知没有理论上的限制,但有几家 ISP 不会接受超过 36 个服务器。实际上,如果你包含的服务器数量超过这个数字,它不仅不会包含额外的服务器,他们还会完全忽略你。Verizon 和 Comcast 是我遇到问题的两个公司,但我相信其他公司也会受到影响。
也就是说,如果您的流量足以保证 36 个镜像,请不要使用循环 DNS。
答案4
我们做了一些非常相似的事情,但我们使用硬件负载平衡器(顺便说一下,Cisco ACE),这样唯一的限制就是子网大小(如果有的话)。