如何在香港服务器上实现BGP + Keepalived双活架构,保证跨境电商平台的高可用性与快速容灾?

昨天深夜,我们香港IDC的主链路突然中断,影响了跨境电商平台对东南亚用户的订单处理。当我们紧急切换至备用链路时,发现原有的静态路由 + VRRP架构响应迟缓,不足以承载自动容灾的需求。这次事故促使我重新审视了高可用的网络架构设计,最终选定 BGP + Keepalived 实现双活路由与业务连续性保障。本文将基于我在香港两台骨干服务器上的实战部署经验,详述从BGP通告、Keepalived状态同步,到容灾切换全流程的技术细节。
一、整体架构设计
1.1 架构目标
- 双ISP接入,支持自动链路容灾;
- BGP实现动态路由通告与路径收敛;
- Keepalived实现业务VIP漂移与主备状态监测;
- 最终实现双活热备:链路或节点任意故障下,公网访问不中断、内网业务不漂移。
1.2 架构拓扑
+-----------------+
| 用户访问 |
+--------+--------+
|
+-----------+------------+
| |
+----------v----------+ +----------v----------+
| 香港服务器 A (主) | | 香港服务器 B (备) |
| BGP + Keepalived | | BGP + Keepalived |
| 公网IP1 / VIP1 | | 公网IP2 / VIP1 |
| 双ISP: PCCW + HGC | | 双ISP: HKT + HKBN |
+----------+----------+ +----------+----------+
| |
[BGP邻居为ISP边界路由器,使用社区标记引导路径选择]
二、BGP 实现公网路由高可用
2.1 安装 FRRouting (FRR)
我在每台服务器上部署了 FRR 作为 BGP 路由器:
# 安装 FRR (以 Ubuntu 为例)
apt update
apt install frr frr-pythontools -y
# 启用 BGP 守护进程
sed -i 's/bgpd=no/bgpd=yes/' /etc/frr/daemons
systemctl restart frr
2.2 配置 BGP 会话
在 frr.conf 或 vtysh 中配置如下:
router bgp 65001
bgp router-id 192.168.1.1
neighbor 203.198.X.1 remote-as 4788 # PCCW BGP
neighbor 202.64.X.1 remote-as 9304 # HGC BGP
network 103.25.X.0/24 # 公网IP段
bgp always-compare-med
bgp bestpath compare-routerid
我采用 BGP community + local-pref 策略实现路径优先级控制,保证在不同ISP间灵活切换。
三、Keepalived 实现VIP漂移与状态监控
3.1 VIP规划
我将 VIP 规划在公网网段内,通过 keepalived 实现两台BGP服务器间的漂移:
VIP: 103.25.X.100
主节点为 A,备节点为 B
3.2 安装与配置
apt install keepalived -y
主节点配置 /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 88
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass securekey
}
virtual_ipaddress {
103.25.X.100
}
track_script {
chk_bgp
}
}
vrrp_script chk_bgp {
script "/etc/keepalived/check_bgp.sh"
interval 3
weight -30
}
健康检查脚本 /etc/keepalived/check_bgp.sh
#!/bin/bash
# 判断BGP是否与任意ISP处于ESTABLISHED状态
if vtysh -c "show ip bgp summary" | grep -q "Established"; then
exit 0
else
exit 1
fi
chmod +x /etc/keepalived/check_bgp.sh
systemctl restart keepalived
说明: 如果BGP邻居断链,将降低优先级,使VIP切换到备节点。
四、配合ISP配置的关键项
与香港ISP协调是项目成功的关键:
- 申请AS号与独立IP段,或租用BGP通告服务;
- 设置BGP Aggregation策略,避免通告过多小网段;
- 使用 NO_EXPORT/NO_ADVERTISE 标记控制路由传播;
- 设定 health-check IP SLA 由ISP决定是否撤销我方路由(部分ISP支持)。
五、DNS与业务联动
为实现端到端高可用,我将VIP配置为CDN和API网关入口,配合权威DNS设置低TTL:
api.example.com IN A 103.25.X.100
TTL设置为60秒;
CDN缓存控制不依赖DNS,而依赖VIP状态;
内部后端节点通过VIP始终访问主用节点。
六、实战测试与优化要点
6.1 故障演练
我在以下场景中进行了验证:
| 故障类型 | 效果 |
|---|---|
| BGP与PCCW中断 | VIP漂移至B,B通过HKBN继续通告,业务不中断 |
| 主节点宕机 | Keepalived状态切换成功,VIP迁移生效 |
| BGP session抖动 | 状态监测准确,不会误判,避免频繁漂移 |
6.2 收敛与恢复时间
VIP切换时间:约2秒
BGP路由更新:5~10秒视ISP收敛速度而定
DNS依赖控制:设置TTL < 60s 配合实时监测工具(如Zabbix + webhook)
七、总结与建议
通过BGP + Keepalived的双活部署,我实现了以下目标:
- 多ISP链路自动切换,避免单点依赖;
- VIP动态迁移保障公网入口可用性;
- 支持弹性扩展,可挂载更多边缘节点加入BGP互通;
- 与ISP保持协同,保障路径策略一致性。
对于在香港部署跨境电商平台的架构人员,我强烈建议将BGP与高层状态感知机制(如Keepalived)结合,替代传统静态双路由 + 手工切换方案,实现真正意义上的网络自愈与业务高可用。
如有需求,我也可以进一步补充:结合Bird BGP路由器、配置Zabbix自动切换通告策略、使用eBGP与iBGP混合实现更大规模的容灾域等进阶内容。