keepalived 官方配置中不存在 virtual_ipaddress_ex 指令;其 virtual_ipaddress 块原生支持多 vip,上限取决于内核路由容量、vrrp 报文大小及可维护性,大规模场景应拆分 vrrp_instance 并自动化生成配置。

Keepalived 官方配置中并不存在 virtual_ipaddress_ex 这个指令。
这是常见误解,源于对 Keepalived 文档或第三方脚本的误读。截至 2026 年最新稳定版(如 v2.2.8+),Keepalived 的核心 VRRP 实现只支持 virtual_ipaddress 块,且该块本身天然支持绑定多个 VIP——无需任何“扩展”关键字。
真正决定 VIP 数量上限的,是配置方式与系统限制,而非虚构的 _ex 参数。
为什么不需要 virtual_ipaddress_ex?
`virtual_ipaddress` 段本身就是为多 VIP 设计的容器。只要语法正确,一个 `vrrp_instance` 内可声明数十个甚至上百个 VIP,例如:virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:0
192.168.1.101/24 dev eth0 label eth0:1
192.168.1.102/24 dev eth0 label eth0:2
192.168.2.200/24 dev eth1 label eth1:0
}
每行一个 VIP,支持指定子网掩码、绑定网卡、打标签(用于 ip addr show 中区分),完全满足跨网段、多服务隔离等需求。
实际能配多少个 VIP?关键看这三点
- **内核路由表容量**:每个 VIP 会作为 host 路由加入内核(`ip route show | grep local`)。现代 Linux 一般支持数万条,254 个 VIP(如 C 类网段全用)毫无压力。 - **VRRP 通告报文大小**:VIP 过多会导致单个 VRRP 报文超长(MTU 限制)。建议单实例不超过 50–80 个 VIP;若需更多,应拆分为多个 `vrrp_instance`(如 `VI_WEB`、`VI_API`、`VI_MGMT`),各自独立选举、独立漂移。 - **管理可维护性**:手工写 200 行 VIP 易出错。生产环境推荐用模板生成(Jinja2 / Ansible)或脚本批量生成配置,参考 CSDN 博客中为 254 个 VIP 自动生成配置的 Python 脚本思路。想突破单实例限制?用多个 vrrp_instance
这才是官方推荐、稳定可靠的“扩容”方式:- 每个
vrrp_instance有独立virtual_router_id、priority、state和健康检查逻辑; - VIP 彼此解耦:Web VIP 故障不影响数据库 VIP 漂移;
- 支持不同网卡、不同网段、不同服务 SLA 策略。
示例结构:
vrrp_instance VI_WEB {
interface eth0
virtual_router_id 51
priority 100
virtual_ipaddress { 192.168.1.100/24 ... }
}
vrrp_instance VI_DB {
interface eth1
virtual_router_id 52
priority 95
virtual_ipaddress { 10.0.0.50/24 ... }
}











