网站迁移 DNS 切换方案:TTL 控制与无缝换服务器

网站迁移 DNS 切换封面图

换服务器最让人紧张的时刻,不是数据拷贝,而是按下 DNS 切换按钮的那一瞬间:部分用户已经落到新服务器,部分用户还停留在旧服务器,两边的数据库如果不同步,就会出现订单丢失、评论错乱、登录态失效。这篇文章将用一个可复用的迁移方案,教你如何通过控制 DNS(域名解析服务)的 TTL(解析记录缓存生存时间),把切换窗口压缩到分钟级,实现接近无感的换服务器过程。我们会覆盖前置准备、TTL 调整时机、灰度切换顺序、验证与回滚,帮你把一次高风险操作拆成多个低风险步骤。

为什么 DNS 切换是迁移中最容易翻车的环节

理解 DNS 的工作方式,是理解迁移风险的第一步。当用户访问你的域名时,本地运营商的递归 DNS 服务器会先查询域名的 A 记录或 CNAME 记录,拿到旧服务器 IP 后,还会按照记录的 TTL 值把这个结果缓存一段时间。TTL 的单位是秒,很多域名默认值是 3600(1 小时)甚至 86400(24 小时)。

这意味着你在 DNS 服务商后台把 IP 改成新服务器后,已经缓存了旧记录的运营商仍会把用户送到旧机器,缓存多久生效就取决于修改前的 TTL 值——而不是修改后的。大量”改了 DNS 半天没生效”的故障,根源都在这里:切换前 TTL 太长,缓存迟迟不过期。

另一个常见错误是”停旧服再解析”。有的站长担心数据不一致,直接把旧服务器关机,然后改 DNS,结果全球缓存了旧 IP 的用户连续几小时打不开网站,搜索引擎爬虫也收到大量连接失败。正确的思路恰好相反:让新旧两台服务器在切换期间同时在线、内容一致,用户无论被解析到哪一台,看到的都是正确的站点。

迁移前的准备工作清单

一次稳妥的迁移,八成功夫花在切换之前。下面的准备项建议在切换日之前的 2-3 天陆续完成。

  • 降低 TTL:切换前至少 24-48 小时,把主域名和 www 等 A/CNAME 记录的 TTL 从默认值改成 300 秒(5 分钟)或更低,让全球缓存快速收敛。
  • 完整备份:对旧服务器做全量备份,包括网站文件、数据库 dump 和 Nginx/Apache 配置;数据库用 mysqldump --single-transaction 导出,避免锁表。
  • 新环境就绪:在新服务器部署相同的运行环境,确认 PHP 版本、扩展、Web 服务器配置与旧机一致,避免切换后才暴露兼容性问题。
  • 数据预同步:提前把文件和数据库同步到新服务器,切换窗口内只做增量同步,把停写时间压缩到几分钟。
  • 监控与回滚预案:准备好 curl 探测脚本、监控告警渠道,以及”DNS 改回旧 IP”的回滚路径,确认旧服务器至少保留 7 天不下线。

准备工作里最容易被忽略的是 TTL 降级。请注意时间顺序:必须在切换前至少一个完整 TTL 周期之前把值调低。假如原 TTL 是 86400,那么至少提前一天调整;否则运营商缓存的还是”24 小时”的旧记录,切换时依然会长时间不生效。

分阶段切换:把高风险操作拆成低风险步骤

准备就绪后,切换本身应该是一个平静的、可验证的流程。我们建议按下面五个阶段执行,每个阶段都有明确的通过标准。

第一阶段:冻结写入与增量同步。选择业务低峰期(例如凌晨),在旧服务器上暂停或通知用户短暂停写,执行最后一次数据库增量同步和文件 rsync(rsync -avz --delete /var/www/ new-server:/var/www/)。同步完成后,在新服务器本地验证站点能正常访问,例如用 curl -H "Host: yourdomain.com" http://新服务器IP/ 检查返回 200 和页面内容。

第二阶段:修改 DNS 解析。在 DNS 服务商后台把 A 记录指向新服务器 IP,保持 TTL 仍为 300 秒。由于提前降过 TTL,全球解析会在 5-10 分钟内基本收敛。这个阶段不要修改任何其他记录,避免 MX(邮件)解析意外受影响。

第三阶段:灰度验证。解析收敛期间,新旧两台服务器都在服务流量。用 dig yourdomain.com @8.8.8.8dig yourdomain.com @1.1.1.1 对比不同公共 DNS 的返回结果,同时在新服务器日志中确认请求量逐步上升。抽查核心功能:首页、登录、下单或表单提交、后台管理,确认数据写入的是新服务器的数据库。

长 TTL 与短 TTL 切换收敛对比

第四阶段:观察期。切换后保持 24-48 小时的双服务器在线,旧服务器只读不写。期间持续观察错误率、数据库写入量和用户反馈,确认没有功能异常。

第五阶段:收尾。观察期结束且指标稳定后,可以逐步停掉旧服务器的 Web 服务,把 DNS TTL 恢复到较长值(如 3600)以减轻解析压力,并保留旧机快照至少 30 天作为最后兜底。

如何处理切换后的回滚与异常

即使准备充分,也要预设”切换失败怎么办”。回滚的核心逻辑与切换相同:把 DNS A 记录改回旧服务器 IP,TTL 仍是 300 秒,解析会在几分钟内回到旧机。要让这条路始终可行,必须守住两条底线。

第一条底线是旧服务器在观察期内保持完整可用:Web 服务、数据库都处于能立即接流的状态,只是不再写入新数据。如果观察期内发现问题,先判断问题类型——纯新环境问题(如 PHP 扩展缺失、配置错误)可以就地修复,不必回滚;数据一致性问题(如订单丢失、数据库不同步)则应该立即回滚 DNS,回旧机修复后再重新走切换流程。

第二条底线是回滚后的数据对账。假设切换期间有少量数据写入了新服务器(例如灰度期间部分用户的评论),回滚后需要把这些增量数据从新库导回旧库,否则会出现”用户的评论消失了”这类体验问题。对账的字段范围至少包括用户表、订单表、评论表这类带自增 ID 的业务核心表。

实际上,如果前置的”冻结写入 + 增量同步”执行到位,灰度期间落在旧服务器的写入量应该接近于零,回滚成本会非常低。这也是为什么我们强调切换窗口要短、步骤要拆细——每一步出错的影响范围都足够小。

迁移观察期双服务器状态监控与回滚开关

常见问题与最佳实践

TTL 应该降到多少? 300 秒是平衡点:切换收敛够快,又不会给 DNS 基础设施带来明显压力。部分 DNS 服务商支持 60 秒甚至更低,适合对停机时间极端敏感的业务,但要注意部分运营商会对极低 TTL 做最低值限制,实际收敛时间未必等于设定值。

邮件服务会受影响吗? 只改 A 记录不会影响 MX 记录,但如果你的邮件服务器和网站在同一台机器上,迁移时要么同步迁移邮件服务并更新 MX/A 记录,要么提前把邮件服务剥离到独立服务上。混合在同一台服务器上的站点,建议在本次迁移中顺手完成拆分。

CDN 场景怎么办? 如果域名前面挂了 CDN(内容分发网络),源站切换对用户完全透明:只需在 CDN 控制台把回源 IP 改成新服务器,CDN 节点会按自身配置更新回源,甚至不需要动 DNS。这也是为什么我们建议架构上引入 CDN——它让后续每一次迁移都变成一次后台配置修改。关于源站响应速度对整体加载的影响,可以参考我们之前整理的 TTFB 优化与主机选择指南

如果你在为迁移挑选新服务器,或者想了解不同主机形态在迁移成本上的差异,这些内容可能有帮助:VPS(虚拟专用服务器)主机方案 适合中小型站点快速完成环境复刻;独立服务器 适合数据库较大、rsync 时间较长的业务;准备迁移 WordPress 站点的读者也可以先看 WordPress 主机 的环境一致性说明,减少切换后才发现兼容问题的概率。Hostease 的中文技术支持可以在迁移窗口期协助核对配置。

总结

网站迁移的风险不在”搬家”,而在”切换”。只要做到三点:提前 24-48 小时降低 TTL、切换前完成数据预同步并只做增量、观察期保持双服务器在线可回滚,DNS 切换就会从一个”听天由命”的操作变成一个分钟级、可验证、可回退的流程。建议你在下一次迁移前,把本文的准备清单和五阶段流程整理成自己的操作手册,并先在测试域名上演练一遍 TTL 调整与解析收敛。如果你需要更稳定的目标环境或迁移过程中的技术支持,也可以考虑 Hostease 虚拟主机 与配套支持服务。

发表评论