Domain IP Lookup

一个主机名,多条 A 记录

第 1 个答案

93.184.216.34

第 2 个答案

93.184.216.35

第 3 个答案

93.184.216.36

解析器会返回所有记录,通常按轮换顺序

基础设施与运维

DNS 轮询详解:在多个 IP 之间分担流量

4 分钟阅读

DNS 轮询是一种简单的技术:DNS 为同一个名称发布多条地址记录,并可能在各次响应中轮换它们的顺序。这样,客户端和解析器看到的就是若干个可能的目的地,而不是一个固定的 IP。它常用于在多台服务器之间分配连接,或提供基本的冗余。然而,DNS 并不会针对每个客户端观察每台服务器是否健康,而且由于存在缓存,解析器在 TTL 期间可以继续使用某个应答。因此,轮询是一种轻量的分流方法,而不是具备健康感知、并能保证故障切换的完整负载均衡系统。

客户端可能看到什么

一个 DNS 应答可以包含不止一条 A 或 AAAA 记录。递归解析器可能会缓存这一整组记录,而由操作系统或应用程序决定如何尝试所返回的各个地址。有些系统使用第一个地址,有些会重新排序或同时尝试多个连接,现代浏览器的网络栈还可能按照各自的连接策略,在不同地址族之间竞速。仅凭 DNS 响应的顺序,无法证明最终是哪台服务器处理了用户的请求。重复查询可能显示不同的顺序或子集,但这种行为取决于权威服务商和解析器。

属性DNS 轮询
输入带有多个地址的 A 或 AAAA 记录
健康感知普通的 DNS 轮换并不具备
缓存影响旧的应答集合可能持续到 TTL 过期
最适合各端点始终可用的简单分流
局限不是逐请求的决策,也不保证即时故障切换

一个重要的后果是,故障的服务器可能会一直留在缓存的应答中,直到相关的 TTL 过期,或解析器刷新数据。在计划迁移之前调低 TTL,可以缩短预期的缓存窗口,但不会抹去已按旧 TTL 缓存的应答。客户端自身也可能有缓存或连接复用行为。基于这些原因,当服务需要快速、可靠的基于健康状态的故障切换时,不应把 DNS 轮询作为防范服务器故障的唯一手段。

与负载均衡器相比如何

专用的负载均衡器可以在连接层或应用层做出决策,运行健康检查,并只把流量发送给满足配置条件的端点。DNS 服务商也可能提供健康检查和动态应答,但这些能力因服务商而异,并且仍然会受到递归缓存的影响。基础的轮询记录集只是提供多个选择,本身没有反馈回路。这两种设计可以组合使用,例如由 DNS 把用户导向某个区域的负载均衡器,再由该负载均衡器选择健康的后端。请选择能够观察到您需要应对的故障模式的那一层。

  • 确保轮询集合中的每个地址都能为该主机名提供服务。
  • 独立监控每个端点,DNS 轮换不是健康检查。
  • 在规划切换或故障切换之前,先了解 TTL 和客户端缓存。
  • 需要快速排除故障端点时,使用具备健康感知的负载均衡器。
  • 对比指定解析器多次返回的应答,并记录每次查询的时间。

如何排查多个应答

如果一个域名解析到多个 IP 地址,首先要确认这是否为有意为之。到权威区域或服务商的控制台查看完整的记录集,再对比递归应答。参照服务商文档,而不是只依靠反向查询,来判断这些地址是否属于预期的托管、CDN 或负载均衡器基础设施。如果您是管理员,请通过预期的主机名和 TLS 配置测试每个端点。直接对 IP 发起请求可能得到不同的结果,因为虚拟主机取决于主机名,所以不要把裸 IP 测试当作正常流量的完美替代。

DNS 轮询很容易配置,但这种运维上的简单性,可能掩盖关于缓存时长和端点健康的重要假设。想了解更多背景,请参阅为什么一个域名会有多个 IP和 CDN 如何使用 DNS。域名 IP 查询可以显示当前的公开应答集合;请把这一观察与监控和针对具体服务的检查结合起来,以判断流量分配是否按预期运行。

保持所有目标之间的一致性

在向轮询集合中添加多个地址之前,先确认每个端点都能安全地提供相同的主机名和相同版本的应用。检查证书覆盖范围、健康状况、数据一致性以及任何关于会话状态的假设。如果用户可能落到任何一个地址上,那么内容不完整或登录配置不同的服务器,就会造成看似随机的间歇性故障。通过正确的 Host 请求头和 TLS 名称监控每个地址,并对比应用层的错误,而不要只依靠 ping。移除故障目标时,要考虑已缓存的 DNS 应答和已经建立的连接。DNS 可以让新的查询不再通告某个地址,但无法立即终止每个客户端已有的会话或缓存的连接。

需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。