演练把 100% 流量切到备机房,40 分钟后回切,DNS 权重从 100 改回 0 的命令执行成功,监控显示备机房仍在承接 62% 的请求。回切拖了两个小时,最后靠手工改负载均衡配置收场。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,切流走了 DNS 权重,回切只改了权威解析,递归 DNS 和客户端还在按旧 TTL 缓存。备机房的入口没有做权重回收,长连接也不会因为解析变化断开。

「切流回切失败」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

dig +short api.example.com @8.8.8.8
dig +trace api.example.com | grep -A2 'ANSWER SECTION'
curl -s lb-api/status | jq '.pools[] | {name,active}'

具体做法是,切流前把 TTL 从 3600 降到 60 至少提前一个 TTL 周期;回切顺序改成先摘长连接入口再改解析 最后确认连接数归零;写一份回切检查单 把解析 权重 连接数列成必须核对的项;演练后统计回切耗时 超过 15 分钟就算不合格。

最后用这个标准收尾,回切后 5 分钟内备机房活跃连接降到 0,主机房承接 100% 流量,dig 只返回主机房地址。

作者 9823189