DNS轮循(英語:round-robin DNS)是一种用于负载分配负载平衡容错配置多个冗余网际协议(IP)服务主机(例如Web服务器FTP服务器)的技术,通过适当的统计模型管理域名系统 (DNS) 响应客户端计算机对地址的请求。[1]

在其最简单的实现中,DNS轮循响应DNS请求的返回结果是多个服务器对应的潜在IP地址列表,而不是单个潜在IP地址[2][3]。返回列表中IP地址的顺序是术语轮循(英語:round robin)的基础。对于每次DNS响应,列表中的IP地址的顺序都会被置换[4]传统上,IP客户端最初尝试使用从DNS查询返回的第一个地址进行连接, [5]这样在不同的连接尝试中,客户端将接收来自不同服务器的服务,从而将整体负载分配到不同服务器之间。

一些DNS解析器在实现上尝试重新排序列表,以优先考虑IP地址在数字上“更接近”的网络。这种行为在IPv6的定义过程中被标准化[6],但也被指责会破坏基于轮循的负载均衡[7][8]。一些桌面客户端会在连接超时30秒后尝试备用地址。[2]

DNS轮循通常用于在多个Web服务器之间对请求进行负载平衡。例如,一家公司拥有一个域名和相同网页但部署在三个IP地址的三台服务器。这时,设置DNS服务使域名有多个A记录,每个IP地址对应一个。当第一个用户访问网页时,请求将被发送到第一个IP地址。第二个访问主页的用户将被发送到下一个IP地址,第三个用户将被发送到第三个IP地址。在每种情况下,一旦给出IP地址,它就会进入列表的末尾。因此,第四个用户将被发送到第一个IP地址,依此类推。

缺点

尽管易于实现,但DNS轮循有许多缺点,例如DNS的分层结构中的缓存记录,以及客户端地址的缓存和重用,这些缺点的组合可能难以管理。同时,不应仅依赖DNS轮循来保障服务的可用性。如果列表中某个地址的服务故障,DNS仍然会继续分发该地址,客户端仍将尝试连接无法访问的服务。

DNS轮循本身可能不是负载均衡的最佳选择,因为只是在每次查询名称服务器时交替地址记录的顺序。由于DNS轮循不考虑业务时常、服务器负载和网络拥塞,所以它最适将大量连接均匀分配到相同容量的服务器上。在其他情况下,它只会进行负载分配,而不是负载均衡[9]

存在克服这些限制的方法。例如,修改过的DNS服务器(例如 lbnamed[10] )可以定期轮循镜像服务器的可用性和负载因素。如果服务器的回复不符合预设参数,则可以暂时从DNS池中移除该服务器,直到下次报告符合参数。

参见

任播

参考

  1. ^ Round-Robin DNS. Cloudflare. Cloudflare, Inc. [16 August 2019]. (原始内容存档于2023-01-15). "Round-Robin DNS"页面存档备份,存于互联网档案馆). Cloudflare. Cloudflare, Inc. Retrieved 16 August 2019.
  2. ^ 2.0 2.1 Feenberg, Daniel. DNS round robin for web server failover. July 25, 2016 [January 10, 2020]. (原始内容存档于2020-08-06). Feenberg, Daniel (July 25, 2016). "DNS round robin for web server failover"页面存档备份,存于互联网档案馆. Retrieved January 10, 2020.
  3. ^ What is the difference among a multivalue answer routing policy and a simple routing policy?. Amazon Web Services, Inc. August 3, 2018 [January 10, 2020]. (原始内容存档于2023-01-15). 
  4. ^ Liska, A.; Stowe, G. Understanding DNS. 2016: 19. Liska, A.; Stowe, G. (2016). "Understanding DNS". DNS Security. p. 19.
  5. ^ Pan, Jianping; Hou, Y. Thomas; Li, Bo. An overview of DNS-based server selections in content distribution networks. Computer Networks. 2003, 43 (6): 695–711. doi:10.1016/S1389-1286(03)00293-7. Pan, Jianping; Hou, Y. Thomas; Li, Bo (2003). "An overview of DNS-based server selections in content distribution networks". Computer Networks. 43 (6): 695–711. doi:10.1016/S1389-1286(03)00293-7. 
  6. ^ RFC 6724 - Default Address Selection for Internet Protocol Version 6 (IPv6). [2022-11-02]. (原始内容存档于2021-02-17). 
  7. ^ getaddrinfo with round robin DNS and happy eyeballs. [2022-11-02]. (原始内容存档于2022-12-22). 
  8. ^ Rule 9 for IPv4 caused serious operational problems ([the Debian Linux] ftp sites failed!. [2022-11-02]. (原始内容存档于2022-11-02). 
  9. ^ Brisco, Thomas P. RFC 1794 - DNS Support for Load Balancing. April 1995 [24 August 2019]. (原始内容存档于2021-03-12). Brisco, Thomas P. (April 1995). [rfc:1794 "RFC 1794 - DNS Support for Load Balancing"]. Retrieved 24 August 2019.
  10. ^ lbnamed页面存档备份,存于互联网档案馆), a load-balanced DNS server implemented in the Perl programming language