Domain IP Lookup

实际如何选择 TTL

60-300s迁移进行中:传播快,查询更多
3,600s对大多数普通记录来说是合理的默认值
86,400sMX、NS 等很少变动的记录
DNS 基础

什么是 DNS TTL?如何选择合适的值

2 分钟阅读

TTL 是 Time To Live(生存时间)的缩写。它是附加在每条 DNS 记录上的一个秒数,回答的是一个问题:解析器在再次询问之前,可以复用这个应答多久?

它是 DNS 中最容易被忽视的设置。大多数人直接接受服务商设置的默认值,直到紧急迁移时才发现它的存在,而那时想有效地修改已经太晚了。

实际如何选择 TTL

60-300s迁移进行中:传播快,查询更多
3,600s对大多数普通记录来说是合理的默认值
86,400sMX、NS 等很少变动的记录
TTL 高,意味着查询更少、解析更快;TTL 低,意味着变更生效更快。二者不可兼得。

权衡取舍

高 TTL(86400)低 TTL(300)
解析速度更快,通常命中缓存更慢,经常需要重新查询
查询量低高
变更生效时间最长 24 小时最长 5 分钟
DNS 故障时的韧性更好,缓存能为您兜底更差,缓存很快过期
最适合稳定的记录即将变更的记录

核心要点

高 TTL 优化的是速度和韧性,低 TTL 优化的是灵活性。没有哪一个是放之四海而皆准的,正确答案取决于这条记录是否即将变更。

TTL 在实际中的样子

IN 之前的数字就是以秒为单位的 TTL
example.com.    3600    IN    A     93.184.216.34
example.com.   86400    IN    NS    ns1.example.com.

用 dig 查询时,显示的是剩余的 TTL,而不是配置的 TTL。间隔几秒运行两次相同的查询,观察这个数字下降,这就是解析器缓存倒计时的实时视图。

观察缓存记录的过期
dig +noall +answer example.com
# wait 10 seconds, then
dig +noall +answer example.com

按记录类型推荐的值

记录建议的 TTL原因
A / AAAA3600(1 小时)不错的默认值:足够快,能及时纠正错误;也足够长,运行高效。
迁移期间的 A300(5 分钟)提前一天设置,让变更迅速落地。
MX3600-14400邮件会排队并重试,所以速度没那么重要。
TXT(SPF/DKIM/DMARC)3600很少变更;变更时速度也足够。
NS86400 以上委派几乎从不变化,缓存它可以减轻 TLD 的负载。
CNAME与目标保持一致过期得比它所指向的目标更快,没有任何好处。

迁移的标准做法

这是唯一值得牢记的 TTL 工作流程,因为它能把长达一天的中断风险,缩短为五分钟。

  1. 在变更之前至少一个旧 TTL 周期,调低 TTL

    如果当前的 TTL 是 3600,就把它改为 300,并至少等待一小时,其他一概不动。

  2. 确认正在提供的是较短的 TTL

    查询该记录,检查 TTL 是否从 300 开始倒计时。此时,所有持有您这条记录的缓存,都已进入五分钟的计时。

  3. 进行真正的变更

    更新地址。现在任何人最长只需等待五分钟。

  4. 验证,然后恢复 TTL

    流量切到新服务器之后,把 TTL 调回 3600,以免继续承担查询成本。

TTL 与韧性

高 TTL 有一个很少被提及的好处:如果您的 DNS 服务商发生故障,仍缓存着您记录的解析器会继续提供服务。24 小时的 TTL 可以让您的域名在长达数小时的 DNS 故障中基本无感地撑过去。而 60 秒的 TTL 则意味着几乎立刻就会中断。

这是让稳定记录的 TTL 保持在较高水平的有力理由,也说明低 TTL 应当只作为临时的迁移工具,而不是默认的做法。记录变更时您究竟在等待什么,请参阅 DNS 传播。

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

本主题的免费工具

常见问题