零宕机切换策略
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read549 words

零宕机切换策略

零宕机切换的核心是:新旧服务器同时运行,通过 DNS 逐步将流量从旧迁到新,确认无误后再关闭旧服务器。


切换时序总览

timeline title 服务器迁移时序 T-24h : 把所有关键 DNS 记录 TTL 降到 300 T-1h : 确认 TTL 已在全球传播(300 秒已生效) T-0 : 修改 A 记录,指向新服务器 IP T+5m : 验证新服务器已开始接收流量 T+30m : 监控错误率、响应时间,确认无异常 T+2h : 确认稳定,开始关闭旧服务器 T+24h : 把 TTL 恢复到 3600,旧服务器下线

切换步骤

Step 1:修改 A 记录

# 切换前确认(旧 IP)
dig @8.8.8.8 example.com A
# → 203.0.113.5(旧服务器)
# 在 DNS 后台修改 A 记录
# 旧: 203.0.113.5
# 新: 203.0.113.6

Step 2:验证新 IP 已传播

# 切换后立刻查(可能还是旧 IP,因为缓存未过期)
dig @8.8.8.8 example.com A
# 等 5 分钟后再查(TTL=300)
dig @8.8.8.8 example.com A
# → 203.0.113.6(新服务器)✅

用多个 DNS 服务器交叉验证:

dig @1.1.1.1 example.com A    # Cloudflare DNS
dig @8.8.8.8 example.com A    # Google DNS
dig @208.67.222.222 example.com A  # OpenDNS

Step 3:监控新服务器

切换后的 30 分钟是关键窗口:

# 持续检查响应状态
watch -n 5 "curl -s -o /dev/null -w '%{http_code} %{time_total}s' https://example.com"
# 查看新服务器错误日志(Nginx)
tail -f /var/log/nginx/error.log

告警阈值: - 错误率 > 1% → 立刻评估是否回滚 - 响应时间 > 3s → 检查新服务器性能 - 5xx 错误率上升 → 可能是应用配置问题


多种切换策略

策略 1:直接切换(最简单)

直接把 A 记录的 IP 改掉。适合: - 小型站点 - 新旧服务器配置完全一致 - 流量不大,可接受短暂异常

策略 2:蓝绿切换(推荐)

同时维护两套环境(蓝 = 旧,绿 = 新),通过 DNS 切换流量:

graph LR A[DNS] -->|当前指向| B[蓝环境
旧服务器] A -.->|切换后指向| C[绿环境
新服务器] B -.->|切换后保留 30 分钟| D[随时可回滚]

切换操作:把 DNS A 记录从蓝色 IP 改为绿色 IP。出问题时,改回蓝色 IP(5 分钟 TTL,快速回退)。

策略 3:灰度切换(流量大时使用)

把新服务器加入负载均衡,先分配 10% 流量,观察正常后逐步提高到 100%。

这需要你有负载均衡层(如 Nginx upstream 或 Cloudflare Load Balancing)。


Cloudflare Load Balancing 实现灰度

如果你使用 Cloudflare,可以用 Load Balancing(付费功能)实现流量比例切换:

流量池:
- 旧服务器 (203.0.113.5): 权重 90
- 新服务器 (203.0.113.6): 权重 10
→ 90% 流量到旧服务器,10% 到新服务器
→ 逐步调整比例:50/50 → 10/90 → 0/100
→ 确认 100% 正常后,删除旧服务器,取消负载均衡

旧服务器保留策略

DNS 切换后,不要立刻关闭旧服务器

时间点 旧服务器状态 原因
切换后 0–2h 继续运行,接受流量 还有旧缓存用户在访问
切换后 2–24h 运行,但可以只读 应急回滚用
切换后 24–48h 确认稳定后停止服务 全球 TTL 已刷新
切换后 1 周 数据备份后销毁实例 确认无遗漏

下一节迁移后验证与回滚——如何系统验证迁移是否成功,以及出问题时的回滚操作。