提前把”虚拟IP漂移、路由收敛、DNS生效、健康检查”这四件事做成一套可自动验证的流程,而不是靠切换时临时抢修。大多数切换事故不是硬件坏了,而是网络层面的状态没有跟着业务一起走,比如网关还在老机房、监控还在等旧探测包、防火墙会话没同步,下面按实战顺序拆解整个保障逻辑。
主备机房切换时如何保证网络连通
先想清楚一个问题:机房切换时,你的业务IP变不变?如果不变,靠的是虚拟IP(VIP)漂移;如果变了,靠的是DNS切换或负载均衡调度,两者对网络连通的保障思路完全不同。
- VIP漂移场景:主备机房共用同一段二层网络(比如通过大二层或VXLAN打通),切换时把VIP从主设备移到备设备,此时要重点关注ARP表收敛和交换机MAC地址表刷新,实测中,很多”切换后不通”其实是上行交换机还在往旧端口发流量,等老化超时(通常几十秒)才恢复。
- DNS切换场景:主备机房使用不同IP,切换靠修改DNS解析记录,这要考虑TTL缓存,行业共识认为:TTL设60秒时,全球生效需要几分钟;如果设300秒,切换后最坏有5分钟旧IP访问窗口。
操作建议:提前在域名解析控制台把TTL调低到60秒,切换完成后观察半小时再调回,在备机房的接入交换机上配置预留的VRRP或BGP会话,让VIP能在两条物理路径上同时宣告,实现秒级收敛。
切换前必须完成的网络自检清单
不要等到停机窗口才手忙脚乱,按下面顺序走一遍,能堵住大部分坑:
- 路由核查:在备机房的核心交换机上执行
display ip routing-table或show ip route,确认到业务网段、回程路由、默认路由都指向正确出口。 - VIP健康检查配置:确保负载均衡或交换机上的健康检查是针对应用层端口(比如TCP 443)而不是只ping IP,因为很多故障是服务起来了但端口没监听。
- 防火墙会话同步:如果主备机房之间有防火墙集群,确认会话同步开关已开启,否则切换后,老连接会被防火墙丢掉,客户端必须重新握手。
- 物理链路冗余测试:分别拔掉备机房的运营商主链路和备链路,观察BGP是否快速切换,用
traceroute在切换期间持续探测,确认路径跳数变化在预期范围内。
主备切换瞬间网络中断的常见原因
切换时网络中断几秒到几十秒是正常的,但超过一分钟就要找原因,业内专家指出,绝大多数情况出在以下三个环节:
网关漂移和ARP缓存冲突
当备机接管VIP时,它会发送免费ARP(Gratuitous ARP)通知全网,但部分交换机端口开启了动态ARP检测(DAI),如果信任设置不对,会把这个报文当成攻击丢弃,结果是下行设备还在用旧MAC地址发包。
排查命令:
show arp | include <VIP>
show ip arp inspection interface
如果发现ARP表项还是旧的,手动清一下交换机上对应VLAN的ARP缓存,或者临时关闭DAI策略。
路由优先级抢占导致的回环
备机接管后,如果它同时从BGP收到一条来自主机的更优路由,而主机的路由又指向备机己方,就会形成环路,这种问题最隐蔽,观察网络内持续丢包时,用:
traceroute -n -w 2 <业务IP>
看路径是否在几个IP之间来回跳,如果在备机边界路由器上执行show ip bgp summary,发现邻居状态一直震荡,大概率是路由策略未区分主备优先级,解决方案:给主备链路的BGP邻居设置不同的local-preference或weight值,并保证备机在接管后才会宣告更优路由。
应用健康检查的超时误判
很多负载均衡器在切换时,因为后端的健康检查请求在VIP漂移期间超时,会直接把节点标记为宕机,即使网络路径已恢复,需要等待下一轮健康检查周期(可能10-30秒)才会重新启用节点,这类问题在F5、Nginx Plus、云负载均衡中都常见。
对策是把健康检查的失败阈值调低(2次),成功阈值也调低(1次),并在切换前手动触发一次探测,确认备机能正常返回指定状态码。
主备机房切换网络不通怎么办
如果已经切换了,但业务就是不通,按下面顺序快速定位:
- 先确认VIP在哪:在用户侧执行
ping <VIP>,然后在机房内的接入交换机上执行show ip arp <VIP>,看VIP是否已经出现在备机所在端口,如果没出现,说明VIP没有漂移成功,检查VRRP状态或负载均衡节点的启用状态。 - 再确认路由怎么走:用
traceroute从外部网络发起探测,看路径是否经过了备机房的出口,如果路径还是指向老机房,说明上游运营商的路由没有收敛,这通常是BGP前缀没有及时撤回导致,联系运营商或检查BGP会话状态,必要时手动执行clear ip bgp(注意谨慎操作)。 - 检查安全组和防火墙策略:备机房的防火墙可能没有同步主机的放通规则,重点检查源NAT策略、目的NAT策略、入方向ACL,一个容易遗漏的点:备机房到数据库或Redis的内网路由是否也已切换,很多连不上其实是后端依赖还在主机房。
一套完整的切换后验证序列
切换完成后,不要只看业务页面能打开就结束,按以下步骤执行,并记录结果:
| 验证项 | 命令/操作 | 预期结果 |
|---|---|---|
| VIP可达性 | ping -c 10 <VIP> |
丢包率低于1%,如果持续通说明漂移成功 |
| 端口监听 | ss -lntp 或 netstat -lntp |
业务端口处于LISTEN状态,且绑定地址包含VIP或0.0.0.0 |
| 回程路由 | 在应用服务器上执行 ip route get <外部测试源IP> |
下一跳指向备机房出口网关,而不是主机房 |
| 防火墙会话 | 在防火墙上查看会话表 | 存在大量源IP为业务IP的会话,且协议正确 |
| DNS解析 | dig @备机房DNS <域名> |
返回备机房的A记录或CNAME指向的VIP |
关于主备切换网络连通的常见问题
切换时客户端连接被重置,是否需要改应用代码?
不需要,TCP连接在VIP漂移后必然中断,因为连接的四元组中目的MAC或IP的映射已改变,正确做法是让应用层具备重连机制,或者在负载均衡器上开启TCP会话保持的跨集群同步,对于短连接业务(HTTP请求),影响很小;对于长连接业务(WebSocket、TCP长连接),需要客户端在断线后自动重连,这是行业共识的成熟方案。
主备机房间的链路延迟较大,如何减少切换时的丢包?
如果主备机房间走的是异地专线,延迟超过30ms,健康检查的周期和超时要相应放宽,例如本地的健康检查超时设为2秒,跨地域专线建议设为5秒,不要在备机房的健康检查中依赖乒乓切换,尽量配置主优先模式,避免链路抖动导致频繁切换,更稳妥的方案是在备机房独立部署VIP,通过DNS或全局负载均衡(GSLB)调度,而不是依赖二层漂移。
切换后业务能访问,但支付回调或第三方接口提示异常,是什么原因?
大概率是外网IP发生了变化,第三方平台通常只放行你申报的出口IP,备机房的NAT出口IP不在白名单里,切到备机房前,先确认第三方平台支持按域名鉴权,而不是按IP白名单,如果只能按IP放行,需要提前把备机房的出口IP加入白名单,并测试一次从备机房到第三方的连通性,否则业务看起来正常,但所有依赖外呼回调的功能都会静默失败。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790259.html


