一、为什么基础主备之外还需要进阶配置¶
原笔记在完成基础主备高可用和服务监控之后,又继续讲了“进阶用法”。
这说明标准主备虽然能解决单点问题,但在一些更复杂的场景里,默认行为并不总是最合适。
最典型的两个进阶需求就是:
- 主恢复后不希望自动抢回 VIP
- 两台 LB 同时承担部分主职责,分摊压力
对应的就是:
- 非抢占模式
- 双主模式
二、什么是 Keepalived 的非抢占模式¶
原笔记先解释了默认行为:
- Keepalived 默认是抢占式的
- 主节点挂掉后,备节点接管 VIP
- 如果主节点恢复,它又会把 VIP 抢回去
但有些场景下,运维并不希望主节点一恢复就立刻重新接管流量。
此时更合适的策略是:
- 谁当前在服务,就先让谁继续服务
这就是非抢占模式要解决的问题。
三、非抢占模式怎么配置¶
原笔记给出的关键点有两个:
- 主备都改成
state BACKUP - 增加
nopreempt
示例:
vrrp_instance vip_3 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.3 dev eth0 label eth0:0
}
}
另一台节点同样也是:
state BACKUPnopreempt
只是优先级更低。
这里的核心逻辑是:
- 首次选主时仍按优先级决定
- 但一旦发生主备切换
- 原主恢复后不会自动再把 VIP 抢回来
四、如何验证非抢占模式确实生效¶
原笔记的验证流程很清晰:
1、两台节点重启 Keepalived
systemctl restart keepalived
2、在原主节点上停止 Keepalived
systemctl stop keepalived
3、在备节点上确认 VIP 已经漂移过去
ip -4 a | grep 1.3
4、再把原主节点上的 Keepalived 启动回来
systemctl restart keepalived
如果此时 VIP 仍然保留在当前服务节点,而不是被原主抢回,就说明非抢占模式已经生效。
五、什么是双主模式¶
原笔记把双主模式定义为:
- 应对更高并发时的一种设计
它的思想不是“两个节点争抢同一个 VIP”,而是:
- 准备两个不同的 VIP
- 每台 LB 各自主用一个 VIP,同时互为对方备份
这样带来的直接效果是:
- 两台机器都能承担主流量
- 同时仍然保留故障切换能力
六、双主模式怎么配置¶
原笔记在两台节点上都定义了两个 vrrp_instance。
例如在 lb01 上:
vrrp_instance vip_3 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.3 dev eth0 label eth0:0
}
}
vrrp_instance vip_4 {
state BACKUP
interface eth0
virtual_router_id 52
priority 60
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.4 dev eth0 label eth0:1
}
}
而在 lb02 上则相反:
vip_3做BACKUPvip_4做MASTER
也就是说:
192.168.1.3主要由lb01持有192.168.1.4主要由lb02持有
七、双主模式如何验证结果¶
原笔记的验证方式还是查看 IP:
在 lb01 上:
ip a | grep '1.[34]'
看到的是:
192.168.1.3
在 lb02 上执行同样命令,看到的是:
192.168.1.4
这就说明两台机器分别持有不同 VIP,形成了双主分担结构。
八、什么时候该选非抢占,什么时候该选双主¶
结合原笔记内容,可以把这两种模式的使用思路简单区分为:
- 非抢占模式:更关注切换后稳定,不希望恢复节点来回抢占资源
- 双主模式:更关注并发能力和资源利用率,希望两台 LB 都承担部分主流量
也就是说:
- 非抢占偏向“切换稳定性”
- 双主偏向“流量分担能力”
九、小结¶
Keepalived 的进阶配置,核心不是参数更多,而是更贴近真实业务诉求。
原笔记中的两个模式刚好对应两类很常见的运维目标:
nopreempt让切换后不反复震荡- 双主模式让两台 LB 同时承担主职责
掌握这两种思路后,对 Keepalived 的理解就不再停留在“只有一主一备”的基础层面了。