上一篇 下一篇 分享链接 返回 返回顶部

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

发布人:Minchunlin 发布时间:2025-07-15 09:37 阅读量:999

昨天深夜,我们香港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混合实现更大规模的容灾域等进阶内容。

目录结构
全文