直接答案:日常稳定记录通常不需要长期保持极低 TTL;迁移前应至少提前一个“当前旧 TTL”周期降到便于回滚的值,等旧缓存自然过期后再切 IP。切换后保持新旧服务并行,观察多个递归和两端日志,确认旧地址流量降到可接受水平后再恢复较长 TTL。具体数值取决于 DNS 服务商允许范围、故障恢复目标、查询量和架构,不能用统一的 60 秒承诺全网一分钟生效。
本文讨论 A、AAAA、CNAME 等业务记录的 TTL 与主机迁移。更换注册商或权威 NS 还涉及父区委派、NS/DS 缓存和 DNSSEC,时间边界不同;CDN 代理记录也可能由平台固定 TTL,不能把控制台显示值当全部链路。
本文按 2026 年 9 月可查的官方文档核对。示例命令以只读取证为主;凡涉及删除、覆盖、重启、权限、网络或数据库参数的动作,都应先确认操作对象、备份、维护窗口和带外恢复入口。不同发行版与软件版本的路径可能不同,必须先查询实际配置再改。
先用证据判断故障在哪一层
| 现象或检查点 | 它能说明什么 | 直接证据 | 不要误判为 |
|---|---|---|---|
| 旧 TTL 仍很长 | 部分递归会继续用旧答案 | 切换前的历史查询与剩余 TTL | 新记录没有保存 |
| 权威已更新、用户仍到旧机 | 正常缓存尚未到期或另有 AAAA/CDN | 递归答案与新旧两端日志 | 一定是 DNS 污染 |
| TTL 很短但查询仍旧 | 本地、代理或平台有额外缓存 | 指定解析器查询与客户端对比 | 权威配置错误 |
| TTL 降低后查询量上升 | 缓存命中下降的预期成本 | 权威 QPS、延迟和错误 | DDoS 必然发生 |
| 回滚 DNS 后仍有人访问新机 | 新答案也有自己的缓存窗口 | 两端流量衰减曲线 | 回滚没有执行 |
这张表的用法不是“看到一个关键词就改一个参数”,而是把客户端、DNS或边缘、Web 代理、应用、数据层依次分开。至少保留故障时间、完整 URL、状态码、关键响应头、同一时刻的服务日志和一份正常样本。只有时间能够对齐,才能判断两个现象是否属于同一次故障。
六步排查与修复顺序
1. 记录当前 TTL 与依赖
在变更前从权威和多个递归保存 A、AAAA、CNAME、SOA、NS 与 TTL,列出 CDN 回源、支付回调、API 白名单和证书挑战。必须知道旧 TTL 多长,才能计算最早安全切换时间。
2. 提前降低而不是切换时才降低
假设当前 TTL 是数小时,应先只降低 TTL,保持记录值不变,至少等待旧 TTL 完整走完。这样切换发生时,大多数递归已经持有较短的新 TTL;同一时刻改值和降 TTL 对既有缓存没有追溯作用。
3. 在正式域名外验证新源站
通过 hosts、测试域名或 CDN 预览验证新服务器的 Host、TLS、页面、登录、写入、回调、上传和 404。不要让测试域名被索引;也不要用直接 IP 成功替代正确 SNI 与业务域名测试。
4. 切换单一记录并保留旧端
先切目标 A/AAAA 或 CDN 回源,不同时改 URL、应用版本和数据库。新旧服务器保持可服务;有写入的系统应使用单写、复制或维护窗口,避免 DNS 分流形成两份订单或用户数据。
5. 观察解析与真实流量收敛
按固定间隔查询权威、公共递归和运营商递归,同时比较新旧服务器访问日志、状态码和业务指标。只有旧端真实请求趋近于零,才能判断缓存大体退出;单次 dig 不是用户全局视角。
6. 稳定后恢复长期 TTL
跨过预定观察窗口和一个流量高峰,确认新端备份、监控和回滚均可用,再恢复日常 TTL 并继续观察。若需回滚,记录回滚发生时的 TTL,继续保留两端直到回滚答案同样收敛。
可复制的只读取证命令
以下命令中的域名、服务名、路径和时间范围要替换为自己的真实值。先执行查询命令并保存原始输出;不要把“命令能运行”误当成“业务已恢复”。
text
dig @ns1.dns-provider.tld www.your-domain.tld A +noall +answer
dig @1.1.1.1 www.your-domain.tld A +noall +answer
dig @8.8.8.8 www.your-domain.tld AAAA +noall +answer
curl -I --resolve www.your-domain.tld:443:203.0.113.10 https://www.your-domain.tld/
curl -sS -o /dev/null -w '%{http_code} %{time_connect} %{time_starttransfer}\n' https://www.your-domain.tld/
dig @ns1.dns-provider.tld www.your-domain.tld A +noall +answer:保存权威答案和 TTL 基线dig @1.1.1.1 www.your-domain.tld A +noall +answer:查看一个公共递归当前缓存答案dig @8.8.8.8 www.your-domain.tld AAAA +noall +answer:单独核对 IPv6,避免只切 A 记录curl -I --resolve www.your-domain.tld:443:203.0.113.10 https://www.your-domain.tld/:在不改公共 DNS 的情况下验证新源站 SNI 与响应;替换为真实新 IPcurl -sS -o /dev/null -w '%{http_code} %{time_connect} %{time_starttransfer}\n' https://www.your-domain.tld/:记录正式域名状态和连接、TTFB基线
如命令输出包含公网 IP、用户名、Cookie、令牌、数据库连接串或客户数据,分享工单前先脱敏。对比时保留时间戳、时区和命令本身,否则后来无法复现同一观察条件。
五个最容易扩大故障的误区
- 切 IP 时才把 TTL 从一天改成一分钟:旧递归仍按一天缓存,新的低 TTL 只对之后获得的答案生效。
- 只改 A 忘记 AAAA:IPv6 用户可能继续访问旧主机,形成看似随机的结果。
- TTL 设为零就认为无缓存:平台可能不允许,递归和客户端也可能设置最小缓存;应以实际答案为准。
- 旧服务器过早关机:仍持有旧答案的用户和爬虫会直接失败。
- 双端都允许写入:DNS 传播阶段会产生数据分叉,简单回滚无法合并。
变更、回滚与数据边界
回滚必须同时定义 DNS 和数据两条路径。DNS 可恢复原地址,但在新端已经产生的订单、上传、队列或数据库写入不能靠改回 A 记录自动回到旧端。切换前应设单一写入点、复制或短维护窗口,并保留新旧访问日志。若因新端错误回滚,先停止新写入、处理增量数据,再改 DNS,并覆盖新 TTL 的观察窗口。
如果只能先恢复服务、还不能确认根因,应把措施标记为“临时缓解”,例如限流、摘除单节点、切回上一配置或临时绕过一层代理。恢复后仍要在受控环境复现原因,并验证同类故障不会在下一次重启、发布或高峰重新出现。
统一验收清单
- [ ] 旧 TTL 与降低时间有记录
- [ ] 降低后已等待至少一个旧 TTL 周期
- [ ] A 与 AAAA 均纳入切换
- [ ] 新源站用正式 Host 和 SNI 验证
- [ ] 写入策略避免双主分叉
- [ ] 多个递归答案按预期收敛
- [ ] 新旧服务器日志可解释
- [ ] 恢复日常 TTL 后继续观察一个高峰
验收必须同时覆盖机器内部和真实外部路径。首页返回 200 不能证明上传、长连接、登录、数据库写入或移动端都正常;同样,控制台显示“运行中”也不能证明应用已能处理请求。至少选一个正常请求、一个边界请求和一个失败请求,记录预期与实际结果。
相关内容与隔离测试入口
建议先阅读域名解析与TTL配置、网站迁移完整流程、云服务器换IP,把本问题放回完整请求链路。若生产环境不适合直接试验,可查看美国轻量云的当前规格与库存,搭建与生产隔离的复现环境;测试机不能替代生产备份,价格、库存和可选配置以实时产品页为准。
常见问题
TTL 设 60 秒是不是一分钟全球生效?
不是。旧缓存按此前 TTL 到期,本地和代理还可能有额外缓存;60 秒只是新答案允许缓存的时间之一。
日常 TTL 越低越好吗?
不一定。较低 TTL 提高权威查询量并降低缓存效率,稳定记录可使用较长值;按恢复目标和平台能力权衡。
Cloudflare 橙云记录为什么不能自定义 TTL?
代理记录由平台返回边缘地址并管理 TTL。源站切换还要核对 Cloudflare 的回源配置,不能只看公开 DNS。
回滚为什么也要等?
递归已经缓存了新地址,回滚产生的旧地址同样需要等现有缓存到期,因此两端都要继续服务。
换服务器会影响 SEO 吗?
域名和 URL 不变且迁移期间稳定 200 时影响通常可控;长时间解析失败、5xx 或内容差异才是主要风险。