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