域名迁移不中断服务:提前修改TTL值为300再迁移的平滑过渡方案
域名迁移要做到不中断,关键动作只有一个:动 NS 或换解析之前,先把记录 TTL 提前降到约 300 秒,等旧缓存过期后再切换,切完再调回。下面按环节说明入口、命令和回滚点。
先摸清家底:域名、注册商与解析记录清单
迁移前把四件事列清楚:域名在哪个注册商、NS 指向哪家 DNS 服务商、解析记录有哪些、其中哪些正在对外提供服务。
用 WHOIS 查注册商和当前 NS,用 dig example.com NS +short 拿到 NS 列表,再在 DNS 服务商控制台导出或手动抄一遍记录。
最容易漏的是 MX、TXT 和 CNAME。MX 决定邮件能不能收到,SPF、DKIM、DMARC 这类 TXT 直接决定外发邮件会不会被判垃圾。二级域名的 CNAME 常被忘掉,切完 NS 后某个业务子站就直接 404。
顺手确认注册商有没有开禁止转移锁、域名状态是否正常,避免迁移当天卡在验证环节。
第一步:把要改的记录 TTL 降到约 300 秒
TTL 是递归 DNS 缓存这条记录的时长,单位秒。原来若是 86400,意味着全球各地解析器可能把旧结果缓存一整天。把 TTL 降到约 300 秒,就是把旧答案的保质期压缩到 5 分钟量级。
操作入口大同小异:
- 阿里云:控制台 → 云解析 DNS → 域名解析 → 找到记录 → 修改 → TTL 选最短档(常见约 300 秒量级)或自定义
- 腾讯云 / DNSPod:DNS 解析 → 记录列表 → 编辑 → TTL
- Cloudflare:DNS → Records → Edit → TTL 选 Auto 或最短档(免费版有下限)
注意几点:
- 有的服务商免费套餐 TTL 最小值有限制,可能是 600 秒量级,做不到 300 秒量级就别硬凑,能降多少降多少,以平台页面为准。
- 改 TTL 本身也是一次解析变更,同样需要传播时间,所以别等到迁移前十分钟才动手。
- A、AAAA、CNAME、MX、TXT、NS 这些记录最好统一降,别只改主域名那一条。
- 迁移期间不要顺手改记录内容,一次只动一个变量。
第二步:静待旧缓存自然过期,别急着切
改完 TTL 不等于立刻生效——已经缓存了旧值的解析器,仍会按旧 TTL 继续用旧答案。所以需要等一个旧 TTL 周期,让大部分递归解析器把旧值丢掉。
实操上,若旧 TTL 是 86400 秒,理论等待约 24 小时,但全球缓存不同步,建议提前 2 到 3 天完成降 TTL 这一步,留出冗余。等待期间可以抽查:
dig example.com A +short
nslookup -type=A example.com 8.8.8.8
连续几次查到的 TTL 倒计时逐渐变小、最终归零并开始返回较低值,说明降 TTL 已经在生效。
流程节点:先在新环境配好,再切 NS 或改指向
迁移分两类,风险和处理方式不同。
一类是换解析服务商,也就是改 NS。做法是先在目标 DNS 服务商把全部记录原样建好(含 MX、TXT、子域),先别急着改注册商的 NS,而是用指定服务器直接验证:
dig @ns1.newprovider.com example.com A +short
dig @ns1.newprovider.com example.com MX +short
确认新 NS 返回的结果和旧环境一致后,再去注册商后台替换 NS。NS 变更通常要几小时到一两天不等,量级上以注册商页面提示为准,期间新旧 NS 会交替应答——这正是要提前降 TTL 的原因,TTL 低可以把这段混杂期的窗口压短。
另一类是只换记录指向,比如服务器换 IP、接入 CDN。这种不必动 NS,只要把 A 记录或 CNAME 的值改成新的,配合低 TTL,通常几分钟到十几分钟就能大体完成切换。更稳的做法是让新旧两端并行一小段时间,确认新端稳定后再下线旧端。
收尾阶段:多节点验证、观察日志、把 TTL 调回
切换完成后别立刻收工:
- 用第三方多节点解析检测(DNSPod 的 DNS 检测、17ce 等)看各地返回是否一致;
- 看源站访问日志、CDN 回源日志、邮件投递日志,确认没有异常空白;
- 用
dig example.com NS +short确认 NS 已经全部指向新服务商。
观察期至少覆盖一个旧 TTL 周期。确认稳定后,再把 TTL 调回常态化数值,一般是 3600 秒或 86400 秒,减少解析查询量、提高响应速度。切记别在观察期没结束就把 TTL 调高,一旦有问题,回滚会变得很慢。
容易翻车的地方:几个高频失误
- 只降了主域名 A 记录的 TTL,忘了 www 和邮件记录;
- 新 DNS 服务商里少建了一条 TXT,SPF 校验失败,外发邮件被退;
- 注册商开了转移锁或域名状态异常,改 NS 时被拦下;
- 迁移还没观察完就把 TTL 调回 86400,出问题回滚要等一天;
- 忘了子域名和泛解析,切完 NS 后某个业务入口直接打不开。