迁移 CDN 时最稳妥的做法是提前降低 DNS 记录的 TTL 值,通过权重或 CNAME 方式切换,并在切换期间持续监控源站负载与错误率。
先说结论:平滑切换的核心在于控制 DNS 缓存生效时间,并做好回滚预案。
- 适合:业务对可用性要求高、无法接受长时间中断的场景
- 先准备:提前 24-48 小时降低 TTL 至 300 秒以上,确认新 CDN 配置无误
- 验收:切换后观察 HTTP 状态码、延迟及源站压力,支持权重灰度更佳
前期准备:TTL 调整与限制确认
DNS 解析存在缓存机制。本地 DNS 服务器(Local DNS)会缓存域名的解析结果,缓存时长由权威 DNS 返回的 TTL(Time To Live)决定。若直接切换解析记录,旧缓存未过期前,部分用户仍会访问到旧 CDN 节点。
操作建议:
- 查询当前 TTL:使用
dig yourdomain.com查看 ANSWER SECTION 中的 TTL 数值。 - 调整 TTL 值:在计划切换前至少 24-48 小时,将域名解析记录的 TTL 值调低。注意:不同 DNS 服务商对最小 TTL 限制不同,部分不支持 60 秒,建议设为 300 秒或 600 秒,并确认生效。
DNS 配置实操:避免直接修改记录类型
部分 DNS 平台不支持直接修改记录类型(如 A 改 CNAME),强行修改可能导致短暂解析中断或删除重建。
推荐操作步骤(以阿里云/腾讯云 DNS 为例):
- 新增记录:不要直接修改旧记录。在 DNS 控制台新增一条主机记录相同的解析线路,指向新 CDN 提供的 CNAME 或 IP。
- 权重切换:若 DNS 服务商支持权重解析(如 DNSPod 智能 DNS),可设置两条记录,旧 CDN 权重 90%,新 CDN 权重 10%。
- 执行切换:逐步调整权重比例(10% -> 50% -> 100%),观察无误后,再删除旧记录。
验证解析生效:dig 命令详解
在不同网络环境下使用 dig 命令查询,确认解析结果已指向新 CDN 的 CNAME 或 IP:
dig @8.8.8.8 yourdomain.com输出示例解读:
;; ANSWER SECTION:
yourdomain.com. 300 IN CNAME newcdn.example.com.
newcdn.example.com. 300 IN A 1.2.3.4300:当前剩余 TTL 秒数,确认是否已降至预期值。CNAME:确认是否指向新 CDN 提供的域名。A:最终解析 IP 是否为新 CDN 节点 IP。
同时观察新 CDN 控制台的流量监控图表,确认是否有请求流入,并检查源站日志确认回源请求是否正常。
灰度切换与权重配置
若 DNS 支持智能解析或权重,建议先切小部分流量验证,而非全量切换。
- 按权重:设置旧记录权重 90,新记录权重 10,观察 10 分钟无异常后调整为 50:50,最后全量。
- 按线路:先切换“境外”或“特定运营商”线路,验证新 CDN 在该线路的可用性。
紧急回滚预案
切换过程中实时监控业务错误率。若发现异常(如 5xx 飙升、延迟大增),立即执行回滚。
- DNS 回滚:将 DNS 解析权重调回旧 CDN 100%,或删除新记录保留旧记录。因 TTL 已调低,回滚生效较快。
- 配置回滚:若新 CDN 配置有误,保留 DNS 指向新 CDN 但修改回源 Host 或规则(需新 CDN 支持快速配置生效)。
- 验证回滚:再次使用
dig确认解析已回到旧 IP,并观察业务监控指标是否恢复。
常见风险与排查
- TTL 未生效:修改 TTL 后,部分地区 Local DNS 可能仍沿用旧 TTL,建议预留足够缓冲时间(至少原 TTL 时长)。
- SSL 证书缺失:新 CDN 节点未部署对应域名证书,导致 HTTPS 握手失败。切换前务必在新 CDN 上传证书并验证。
- 缓存未预热:新 CDN 节点缓存为空,切换瞬间大量请求回源,可能打爆源站。建议切换前进行 URL 预热。
- 权重切换缺失:若 DNS 不支持权重,建议通过子域名先行验证(如
new.yourdomain.com),确认无误后再切主域名。