Synchronization groups enable multiple VRRP instances to coordinate their state transitions, ensuring that a set of virtual routers moves as a unit between BACKUP and MASTER states.

背景问题

在多 VLAN 或多接口环境中,一台设备可能同时运行多个 VRRP 实例(每个实例对应一个虚拟网关)。如果这些实例各自独立进行主备状态决策:

  • 可能出现某些实例为主(Master),另一些为备(Backup),导致部分业务流量正常,部分中断;
  • 或者造成非对称路由、数据包来回路径不一致,影响防火墙、NAT 等有状态设备的正常工作。

同步组的作用

  1. 状态同步

将多个 VRRP 实例加入同一个 Sync Group 后,它们的主备状态将统一由组内优先级最高的设备决定。一旦某台设备在组内成为 Master,它将在所有关联的 VRRP 实例中都成为 Master;反之亦然。

  1. 联动切换

当主设备发生故障或优先级变化时,整个 Sync Group 内的所有 VRRP 实例会同时切换到备份设备,保证网关角色的一致性。

  1. 提升网络可靠性与一致性

避免“部分网关可用、部分不可用”的割裂状态,保障多业务或多租户环境下的高可用性和转发一致性。

代码实现

代码版本:

VRRP_TSM

  • 当某个 VRRP 实例发生状态变更,且需要与其同步组(sync group)内的其他实例进行协调时,将使用 VRRP_TSM

  • 使用方式可以理解为:VRRP_TSM[from_state][to_state]

1
2
3
4
5
6
7
8
9
10
struct {
void (*handler) (vrrp_rt *);
} VRRP_TSM[VRRP_MAX_TSM_STATE + 1][VRRP_MAX_TSM_STATE + 1] =
{
/* From: To: > BACKUP MASTER FAULT */
/* v */ { {NULL}, {NULL}, {NULL}, {NULL} },
/* BACKUP */ { {NULL}, {vrrp_sync_master_election}, {vrrp_sync_master}, {vrrp_sync_fault} },
/* MASTER */ { {NULL}, {vrrp_sync_backup}, {vrrp_sync_master}, {vrrp_sync_fault} },
/* FAULT */ { {NULL}, {vrrp_sync_backup}, {vrrp_sync_master}, {vrrp_sync_fault} }
};
keepalived