DNS轮循
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池中移除该伺服器,直到下次报告符合参数。
参见
参考
- ^ Round-Robin DNS. Cloudflare. Cloudflare, Inc. [16 August 2019]. (原始内容存档于2023-01-15)."Round-Robin DNS" (页面存档备份,存于互联网档案馆). Cloudflare. Cloudflare, Inc. Retrieved 16 August 2019.
- ^ 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.
- ^ 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).
- ^ Liska, A.; Stowe, G. Understanding DNS. 2016: 19.Liska, A.; Stowe, G. (2016). "Understanding DNS". DNS Security. p. 19.
- ^ 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.
- ^ RFC 6724 - Default Address Selection for Internet Protocol Version 6 (IPv6). [2022-11-02]. (原始内容存档于2021-02-17).
- ^ getaddrinfo with round robin DNS and happy eyeballs. [2022-11-02]. (原始内容存档于2022-12-22).
- ^ Rule 9 for IPv4 caused serious operational problems ([the Debian Linux] ftp sites failed!. [2022-11-02]. (原始内容存档于2022-11-02).
- ^ 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.
- ^ lbnamed (页面存档备份,存于互联网档案馆), a load-balanced DNS server implemented in the Perl programming language