一、为什么基础主备之外还需要进阶配置

原笔记在完成基础主备高可用和服务监控之后,又继续讲了“进阶用法”。
这说明标准主备虽然能解决单点问题,但在一些更复杂的场景里,默认行为并不总是最合适。

最典型的两个进阶需求就是:

  • 主恢复后不希望自动抢回 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 BACKUP
  • nopreempt

只是优先级更低。

这里的核心逻辑是:

  • 首次选主时仍按优先级决定
  • 但一旦发生主备切换
  • 原主恢复后不会自动再把 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_3BACKUP
  • vip_4MASTER

也就是说:

  • 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 的理解就不再停留在“只有一主一备”的基础层面了。