keepalived多实例双主架构是通过两个独立vrrp_instance实现双活,每台节点在不同virtual_router_id下互为master/backup;需确保router_id唯一、advert_int一致、防火墙放行ip协议112、关闭vrrp_strict,并配合健康检查与lvs/nginx完成流量分发。

Keepalived 多实例双主架构不是“两台都当主”,而是通过配置两个独立的 vrrp_instance,让每台服务器在不同虚拟路由器组中分别担任 MASTER,从而同时对外提供服务、分担流量。关键在于:两个 VIP 分属不同 virtual_router_id,且在两台节点上互为 MASTER/BACKUP 关系,形成“你主我备、我主你备”的对称结构。
双主架构的核心设计逻辑
传统主备只用一个 VIP 和一个 vrrp_instance,资源利用率低;双主则定义两个 VIP(如 192.168.1.100 和 192.168.1.101),对应两个 virtual_router_id(如 51 和 52)。每台服务器在 instance VI_1 中优先级高,在 VI_2 中优先级低——这样两台机器就能同时绑定一个 VIP,实现真正的双活流量承接。
- 节点 A:VI_1(VIP1)为 MASTER(priority 150),VI_2(VIP2)为 BACKUP(priority 100)
- 节点 B:VI_1(VIP1)为 BACKUP(priority 100),VI_2(VIP2)为 MASTER(priority 150)
- 客户端可轮询访问两个 VIP,或由前端 DNS/SLB 做分流,也可配合 Nginx 做七层聚合
- 任意节点宕机,另一个节点自动接管两个 VIP,保障整体可用性
配置要点与避坑细节
多实例双主成败取决于参数隔离和网络连通性。以下为必须校验的硬性要求:
- virtual_router_id 必须不同:VI_1 设为 51,VI_2 设为 52;相同 ID 会导致 VRRP 组冲突,出现脑裂或选举异常
- advert_int 保持一致:两台机器上所有实例的心跳间隔(如 1 秒)需完全相同,否则 Backup 可能误判 Master 失联
-
防火墙放行 VRRP 协议:UDP 端口不重要,关键是允许 IP 协议号 112(非端口!),命令示例:
iptables -A INPUT -p 112 -j ACCEPT -
关闭 vrrp_strict 模式:该模式强制要求单播、全协议栈匹配,会阻断双主场景下的非对称配置,配置中注释掉或设为
vrrp_strict off - 两台节点的
router_id必须唯一,如lvs-node-a和lvs-node-b,否则日志报错并拒绝启动
典型 keepalived.conf 多实例配置(节点 A 示例)
以下为节点 A 的完整核心配置片段(节点 B 仅需交换 priority 和 state 值):
global_defs {
router_id lvs-node-a
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:1
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress {
192.168.1.101/24 dev eth0 label eth0:2
}
}
注意:label 参数用于区分同一网卡上的多个别名接口,避免 ifconfig 中地址混叠;两个实例使用不同 auth_pass 是安全建议,非强制,但推荐分离。
健康检查与流量分发协同
双主本身只解决 VIP 漂移问题,要真正实现负载均衡,需叠加 LVS 或 Nginx 层:
- 若走 LVS-DR 模式:在 keepalived.conf 中添加
virtual_server块,绑定到某个 VIP(如 192.168.1.100),后端挂真实服务器;另一 VIP 可绑定另一组 RS 或相同组(视业务隔离需求) - 若走 Nginx 反向代理:每台节点运行 Nginx,分别监听各自 MASTER 的 VIP(或监听 0.0.0.0,靠路由策略区分),upstream 配置统一后端池,实现逻辑集中、物理分散
- 务必配置
track_script检查本地 Nginx/LVS 进程,例如检测nginx -t && systemctl is-active --quiet nginx,失败则降低本实例 priority,触发 VIP 切出
双主不是配置堆砌,而是对 VRRP 协议角色关系的精准编排。只要 virtual_router_id、priority、state 三者形成镜像对称,再配好网络与检查机制,就能稳稳跑起来。










