1.
概要与准备
- 需求:两条ISP(例如ISP-A/ISP-B),同机房双网卡(eth0连ISP-A,eth1连ISP-B),目标:主动均衡与自动故障切换。
- 准备:两条公网网关信息、公共IP或BGP前缀(若可)、一台或两台负载均衡节点、SSH与防火墙访问。
2.
网络与物理接入配置
- 物理:将eth0连接ISP-A,eth1连接ISP-B,分别配置静态IP与网关,不要默认只用一个默认路由。
- 示例:在Linux上配置 /etc/network/interfaces 或 netplan,分别设置IP并禁用自动添加默认路由(metric设置或ip route删除)。
3.
多路径路由(ECMP/策略路由)实现
- 建议:若无BGP,用策略路由把不同源IP走不同网关。
- 操作步骤:添加两个路由表(ip route add default via GW_A dev eth0 table ispA;ip route add default via GW_B dev eth1 table ispB),并用ip rule based on src(ip rule add from
table ispA或按端口/用户区分)。
4.
会话保持与NAT
- 如果有双向出站需保会话,设置iptables SNAT策略:对从内网到外网的不同流量使用对应的源地址(iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 公网A_IP)。
- 对入站服务使用DNAT并结合HAProxy做反向代理以维持会话和健康检查。
5.
负载均衡与健康检查(HAProxy + Keepalived)
- 部署HAProxy监听公网VIP,后端为本地服务或集群。
- Keepalived实现虚拟IP漂移(VRRP):在主节点设置优先级高,配置vrrp_script执行HTTP/TCP检查(curl或nc),当检测失败时降级并触发VIP漂移到备节点。
- 配置示例:vrrp_instance里track_script,notify脚本可调整路由策略(切换默认路由或禁用某接口)。
6.
DNS与外部故障切换
- 辅助策略:DNS短TTL(60s)+监测型DNS(或云DNS API)实现当两条链路都异常时把域名切到备用数据中心。
- 实施:配置外部监控(例如自写脚本或第三方服务)检测站点可达性,触发DNS A记录修改或启用备用IP。测试时注意TTL生效时间。
7.
测试与验证
- 测试步骤:1) 单线断开ISP-A,观察会话是否自动走ISP-B、VIP是否漂移;2) 恢复并检查会话回流或平滑切换;3) 模拟后端服务宕机,验证HAProxy健康检查和Keepalived切换。
- 验证工具:tcpdump、ip route show、ss/netstat、curl -v,记录延迟与丢包。
8.
运维与监控建议
- 监控项:链路丢包/延迟、BGP会话(若使用)、VIP状态、HAProxy后端健康。
- 日志与报警:Prometheus+Grafana抓取节点指标,Prometheus Alertmanager或钉钉/邮件报警,当链路或服务异常立即通知并自动执行预置脚本。
9.
常见问题问答
问:双ISP会导致源地址不一致造成会话断开吗? 答:通常会。如果不同ISP分配不同公网IP,需用SNAT绑定出接口源IP或使用状态同步与HAProxy保持会话;否则可用BGP带来同一前缀。
来源:台湾双isp服务器带来的流量均衡与故障切换实现方法