DNS轮询(英语:round-robin DNS)是一种用于负载分配、负载平衡或容错配置多个冗余网际协议(IP)服务主机(例如Web服务器、 FTP服务器)的技术,通过适当的统计模型管理域名系统 (DNS) 响应客户端计算机对地址的请求。
在其最简单的实现中,DNS轮询响应DNS请求的返回结果是多个服务器对应的潜在IP地址栏表,而不是单个潜在IP地址。返回列表中IP地址的顺序是术语(英语:round robin)的基础。对于每次DNS响应,列表中的IP地址的顺序都会被置换。 传统上,IP客户端最初尝试使用从DNS查询返回的第一个地址进行连接, 这样在不同的连接尝试中,客户端将接收来自不同服务器的服务,从而将整体负载分配到不同服务器之间。
一些DNS解析器在实现上尝试重新排序列表,以优先考虑IP地址在数字上“更接近”的网络。这种行为在IPv6的定义过程中被标准化,但也被指责会破坏基于轮询的负载均衡。一些桌面客户端会在连接超时30秒后尝试备用地址。
DNS轮询通常用于在多个Web服务器之间对请求进行负载平衡。例如,一家公司拥有一个域名和相同网页但部署在三个IP地址的三台服务器。这时,设置DNS服务使域名有多个A记录,每个IP地址对应一个。当第一个用户访问网页时,请求将被发送到第一个IP地址。第二个访问主页的用户将被发送到下一个IP地址,第三个用户将被发送到第三个IP地址。在每种情况下,一旦给出IP地址,它就会进入列表的末尾。因此,第四个用户将被发送到第一个IP地址,依此类推。
尽管易于实现,但DNS轮询有许多缺点,例如DNS的分层结构中的缓存记录,以及客户端地址的缓存和重用,这些缺点的组合可能难以管理。同时,不应仅依赖DNS轮询来保障服务的可用性。如果列表中某个地址的服务故障,DNS仍然会继续分发该地址,客户端仍将尝试连接无法访问的服务。
DNS轮询本身可能不是负载均衡的最佳选择,因为只是在每次查询名称服务器时交替地址记录的顺序。由于DNS轮询不考虑业务时常、服务器负载和网络拥塞,所以它最适将大量连接均匀分配到相同容量的服务器上。在其他情况下,它只会进行负载分配,而不是负载均衡。
存在克服这些限制的方法。例如,修改过的DNS服务器(例如 lbnamed )可以定期轮询镜像服务器的可用性和负载因素。如果服务器的回复不符合预设参数,则可以暂时从DNS池中移除该服务器,直到下次报告符合参数。
任播