virtual_router_id 是 keepalived 中标识 vrrp 实例的唯一数字 id(1–255),用于区分同一网段内不同 vrrp 组,确保广播包仅被同 id 节点响应、避免 vip 冲突与脑裂,同一组内 master 和 backup 必须配置相同值,且不可重复或留空。

virtual_router_id 是 Keepalived 配置中用于标识一个 VRRP 实例的唯一数字 ID,范围是 1–255。
它用来区分同一网段内的不同 VRRP 组
当多套高可用服务(比如多组 Nginx+Keepalived)部署在同一局域网时,它们可能共用同一个广播域。如果没有独立的 virtual_router_id,各组之间会互相干扰——比如主备状态错乱、VIP 抢占冲突、甚至出现脑裂。
这个 ID 就像每组“虚拟路由器”的身份证号,确保:
- VRRP 广播包只被同 ID 的节点识别和响应
- 不同业务集群互不干扰(例如:一组管 Web,一组管 API,ID 分开设)
- 同一组内 master 和 backup 必须配置相同的 ID,否则无法协商主备关系
必须保证同一组内两台机器值一致
比如 web01 和 web02 构成一对高可用 Nginx,它们的 keepalived.conf 中:
- web01 的
virtual_router_id 51 - web02 的
virtual_router_id 51
如果其中一台写成 52,它们就无法组成一个 VRRP 组,VIP 不会漂移,故障切换失效。
不能随意重复或留空
默认值不是自动分配的,必须显式配置。常见错误包括:
- 两台机器用了不同 ID(导致组分裂)
- 与其他 Keepalived 实例用了相同 ID(引发 VIP 冲突)
- ID 超出 1–255 范围(Keepalived 启动失败)
建议按业务维度编号,比如 Web 服务用 51,MySQL 高可用用 61,避免交叉。
它和 router_id 不是一回事
router_id 是单机标识(通常用 hostname),仅用于日志和监控定位;而 virtual_router_id 是逻辑组标识,决定 VRRP 协议层面的通信归属。两者作用层级不同,不能混用或替代。











