一个主机名,多条 A 记录
第 1 个答案
93.184.216.34
第 2 个答案
93.184.216.35
第 3 个答案
93.184.216.36
解析器会返回所有记录,通常按轮换顺序
DNS 轮询详解:在多个 IP 之间分担流量
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 工具。
相关阅读
一个主机名,多条 A 记录
第 1 个答案
93.184.216.34
第 2 个答案
93.184.216.35
第 3 个答案
93.184.216.36
解析器会返回所有记录,通常按轮换顺序
DNS 负载均衡:方法、优势与局限
对比基于 DNS 的流量分配与应用负载均衡器,了解 TTL、健康检查和区域化应答如何影响服务可用性。
为什么查询结果显示的是 CDN,而非源站
访客
查询该域名
CDN 边缘节点
104.21.x.x
DNS 返回的就是它
源站服务器
真实 IP,从不暴露
什么是源站服务器?它与 CDN 有何不同
了解源站服务器在 CDN 或反向代理背后承担什么角色,为什么公共 DNS 可能显示的是边缘节点地址,以及如何安全地排查问题。
为什么查询结果显示的是 CDN,而非源站
访客
查询该域名
CDN 边缘节点
104.21.x.x
DNS 返回的就是它
源站服务器
真实 IP,从不暴露
什么是反向代理?DNS 与 Web 实用指南
了解反向代理如何位于客户端与服务器之间、DNS 如何把用户指向它,以及它如何支持路由、TLS 和安全。