HA BGP GR 配置实例
HA BGP GR 配置实例
当 FortiGate FGCP HA 集群同时作为 BGP 路由器时,HA 主备切换不仅涉及设备角色变化,还涉及 BGP 邻居重建、路由重新通告及 HA 同步路由的保留时间。只有让这些过程在正确的时间窗口内衔接,才能避免切换期间的流量中断。
测试环境
- HA 集群:2 台 FortiGate 组成 FGCP HA 集群。
- BGP 对等设备:1 台独立 FortiGate。
- 两端通过
198.51.100.0/24建立 AS 65120 内的 iBGP 邻居。 - HA 集群通告
10.20.10.0/24,对等设备通告10.30.10.0/24,并额外通告172.20.1.0/24至172.20.250.0/24共 250 条测试路由。 - 通过持续 Ping 和文件传输观察 HA 切换期间的业务状态。

相关信息
本测试中的“对等设备”是指 HA 集群的 BGP Peer,不表示实际流量方向上的上游或下游设备。
FGCP HA 的 BGP 行为
FGCP HA 集群中的 BGP 与路由同步具有以下特点:
- BGP 路由进程和 BGP 邻居仅在 Primary 设备上运行。
- HA 切换后,新 Primary 需要重新建立 BGP 邻居。
- Primary 按
route-hold间隔向 Secondary 复制路由,默认值为 10 秒。 route-wait控制 Primary 检测到路由表更新后,等待多长时间再将路由复制到 Secondary;默认值为 0 秒,即在路由更新时同步。- 同步到 Secondary 的路由在集群中保留
route-ttl指定的时间,默认值为 10 秒。 - Secondary 上的同步路由可以通过
get router info kernel查看,但不会显示在get router info routing-table database的常规路由表中。 - HA 切换后,如果新 Primary 未能在
route-ttl到期前从 BGP Peer 重新学习并安装路由,同步到 Kernel 的旧路由将被删除。
route-hold、route-wait 和 route-ttl 的参数说明可参考 HA 双机热备 → HA 配置命令集。
Secondary 上的路由显示方式如下:
FGT-HA-2(Secondary) # get router info routing-table database
FGT-HA-2(Secondary) # get router info kernel | grep port2
tab=65534 vf=0 vrf=0 scope=0 type=1 proto=19 prio=2147483649 0.0.0.0/0.0.0.0/0->10.30.10.0/24 pref=0.0.0.0 gwy=198.51.100.2 dev=6(port2)
tab=65534 vf=0 vrf=0 scope=0 type=1 proto=19 prio=2147483649 0.0.0.0/0.0.0.0/0->172.20.1.0/24 pref=0.0.0.0 gwy=198.51.100.2 dev=6(port2)
...HA 切换时的路由恢复过程如下:
- 集群发生 HA 主备切换。
- 新 Primary 重新建立 BGP 邻居。
- BGP Peer 向新 Primary 重新通告路由。
- 新 Primary 接收并安装全部路由后,BGP 恢复正常运行。
如果第 3、4 步未能在 route-ttl 到期前完成,依赖这些 BGP 路由的流量就会中断。
不同配置下的切换结果
默认配置
BGP 默认使用 60 秒 Keepalive、180 秒 Holdtime 和 30 秒 advertisement-interval。HA 切换后,对等设备仍认为原 BGP 会话处于 Established 状态,需要等待 Holdtime 到期后才会重建邻居。
本测试将 HA 切换安排在最后一次 Keepalive 后,观察到以下最差情况:
| 相对时间 | 事件 |
|---|---|
| 0 秒 | 对等设备最后一次收到原 Primary 的 Keepalive |
| 180 秒 | Holdtime 到期,原 BGP 邻居 Down |
| 186 秒 | 对等设备与新 Primary 建立 BGP 邻居 |
| 212 秒 | 对等设备重新通告前缀,新 Primary 收到路由 |
全部路由恢复约需要 3 分 30 秒,而 HA 默认 route-ttl 只有 10 秒,因此新 Primary 会先删除同步路由,造成明显的流量中断。实际时间取决于 HA 切换发生在 Keepalive 周期中的位置,可能比这一最差结果缩短最多约 59 秒。
缩短 Keepalive 和 Holdtime
将对等设备的 Keepalive 和 Holdtime 分别调整为允许的较小值,可使原邻居更快 Down 并开始重建:
config router bgp
set as 65120
set router-id 198.51.100.2
set keepalive-timer 1
set holdtime-timer 3
end本测试中,BGP 邻居约 3 秒后开始重建,但默认 advertisement-interval 仍为 30 秒,因此收到前缀仍需要约 33 秒。该时间仍超过默认 route-ttl,业务依然会中断。
重要
修改 Keepalive 或 Holdtime 会触发 BGP 会话重新建立。过短的 Holdtime 还会使瞬时拥塞或控制平面抖动更容易导致邻居 Down,不应仅为了缩短 HA 切换时间而直接使用最小值。
缩短路由通告间隔
继续将对等设备上指向 HA 集群的 advertisement-interval 调整为 1 秒:
config router bgp
config neighbor
edit "198.51.100.1"
set advertisement-interval 1
next
end
end本测试中的路由收敛时间缩短到约 7 至 8 秒,但在不启用 GR 的情况下,原 BGP 会话仍会被拆除,测试期间仍观察到流量丢失。单纯压缩计时器不能替代 BGP Graceful Restart。
启用 Graceful Restart
GR 使 BGP Peer 在邻居重启期间继续保留路由,具体机制和计时器可参考路由 → 动态路由 → BGP → BGP GR。FortiGate 可以在 BGP 全局或邻居级别启用 GR,本示例仅对指定邻居启用:
在 HA 集群上对 BGP Peer 启用 GR 能力:
config router bgp set as 65120 set router-id 198.51.100.1 config neighbor edit "198.51.100.2" set capability-graceful-restart enable set interface "port2" set remote-as 65120 set update-source "port2" next end end在 BGP Peer 上对 HA 集群启用 GR 能力,并设置路由通告间隔:
config router bgp set as 65120 set router-id 198.51.100.2 config neighbor edit "198.51.100.1" set advertisement-interval 3 set capability-graceful-restart enable set interface "port2" set remote-as 65120 set update-source "port2" next end end根据路由规模和实际收敛时间设置 HA
route-ttl,确保新 Primary 能够在同步路由到期前接收并安装全部 BGP 路由:config system ha set route-ttl 10 end
重要
启用 GR 会重新建立相应的 BGP 会话。修改前应评估现网影响,并在维护窗口执行。
结果验证
在两端确认 IPv4 Unicast 地址族已完成 GR 能力协商:
FGT-PEER # get router info bgp neighbors 198.51.100.1 ... For address family: IPv4 Unicast AF-dependant capabilities: Graceful restart: advertised, received, negotiated Forwarding states are being preserved ... Graceful-restart Status: Remote restart-time is 120 sec在 Secondary 上通过 Kernel 路由表确认 BGP 路由已从 Primary 同步:
get router info kernel持续运行 Ping 和文件传输,再执行计划内 HA 主备切换,同时观察 BGP 邻居、路由数量和业务流量。
确认新 Primary 在
route-ttl到期前收到并安装全部预期路由,且测试流量没有中断。
本测试使用 251 条对等设备通告路由,将 advertisement-interval 设置为 3 秒并保留默认 route-ttl 10 秒后,HA 切换期间没有出现 Ping 丢包,文件传输也未中断。该结果只代表上述路由规模和参数条件,不能直接作为其他环境的固定参数。
参数关系
避免 HA 切换期间丢失 BGP 路由,需要同时满足以下条件:
- HA 集群和 BGP Peer 均支持并协商 GR。
- BGP Peer 不应在新 Primary 建立 BGP 会话前过早拆除原会话,应结合实际环境评估 Keepalive 和 Holdtime。
- BGP Peer 的
advertisement-interval应小于 HA 集群的route-ttl。 route-ttl还必须覆盖邻居重建、全部路由通告、接收和安装所需的最差时间;路由数量较多时,应增加余量。scan-time和connect-timer可用于其他 BGP 收敛优化,但不会解决本场景中的路由保留问题。
提示
Keepalive、Holdtime、advertisement-interval 等参数的作用可参考路由 → 动态路由 → BGP → BGP 计时器。应以抓包、BGP Debug 和连续业务测试测得的最差收敛时间作为 route-ttl 的配置依据。
注意事项
- 本测试验证的是 FortiGate HA 集群内部主备切换,不是链路、BGP Peer 或下一跳真实故障。
- 拓扑中只有一个 BGP Peer。多宿主环境需要单独评估 GR 保留的陈旧路由是否会指向已经失效的下一跳,从而造成黑洞。
route-ttl设置过短会在新 Primary 完成路由学习前删除同步路由;设置过长则可能在外部可达性已经变化时继续保留陈旧路径。- BFD 会快速检测转发路径故障并触发 BGP 邻居 Down,这与本场景希望在 HA 切换期间保留会话和路由的目标相反。Fortinet 不建议将 BFD 与 BGP GR 组合使用,相关机制可参考路由 → BFD → BFD 原理;如业务同时要求快速检测真实链路故障和无损 HA 切换,需要分别验证故障模型及路由策略,不能直接套用本示例。