Keepalived-工作模式
抢占模式
工作原理
抢占模式是 Keepalived 的默认行为。当优先级更高的节点恢复在线时,它会立即尝试重新获取 VIP 控制权。
bash
vrrp_instance VI_1 {
state MASTER
priority 100 # 主节点优先级
# 不设置 nopreempt 即为抢占模式
preempt_delay 0 # 立即抢占(默认)
}工作流程
- 主节点故障
- 备节点(优先级90)接管 VIP
- 原主节点恢复
- 原主节点立即发送 VRRP 通告
- 备节点检测到更高优先级节点
- 备节点释放 VIP
- 原主节点重新获得 VIP
特点
| 特性 | 说明 |
|---|---|
| 切换速度 | 快(毫秒级) |
| VIP 稳定性 | 可能频繁切换 |
| 适用场景 | 主节点性能明显优于备节点 |
| 配置要求 | 默认模式,无需特殊配置 |
非抢占模式
工作原理
启用 nopreempt参数后,即使主节点恢复,也不会主动抢回 VIP 控制权。
bash
vrrp_instance VI_1 {
state BACKUP # 建议所有节点设为BACKUP
priority 100 # 主节点初始优先级
nopreempt # 关键参数:启用非抢占模式
preempt_delay 300 # 延迟时间(可选)
}工作流程
- 主节点故障
- 备节点接管 VIP
- 原主节点恢复
- 原主节点不会立即抢占 VIP
- 备节点继续持有 VIP
- 需要手动干预或等待备节点故障才会切换
特点
| 特性 | 说明 |
|---|---|
| 切换速度 | 故障切换快,恢复切换慢 |
| VIP 稳定性 | 高(VIP 不会频繁移动) |
| 适用场景 | 稳定服务优先于快速恢复 |
| 配置要求 | 必须设置 nopreempt |
混合模式:延迟抢占
工作原理
结合抢占模式和非抢占模式的优点,设置抢占延迟时间。
bash
vrrp_instance VI_1 {
state BACKUP
priority 100
# 不设置 nopreempt
preempt_delay 300 # 等待300秒后再抢占
}工作流程
- 主节点故障
- 备节点接管 VIP
- 原主节点恢复
- 原主节点等待
preempt_delay秒 - 延迟结束后,原主节点尝试重新获取 VIP
适用场景
- 需要主节点提供服务,但允许短暂延迟
- 避免服务刚恢复就立即切换导致的不稳定
- 典型配置:
preempt_delay 300(5分钟)
模式对比表
| 特性 | 抢占模式 | 非抢占模式 | 延迟抢占 |
|---|---|---|---|
| 配置参数 | 默认 | nopreempt | preempt_delay |
| 主节点恢复行为 | 立即抢占 | 不抢占 | 延迟后抢占 |
| VIP稳定性 | 低 | 高 | 中 |
| 故障切换速度 | 快 | 快 | 快 |
| 恢复切换速度 | 快 | 慢(需手动) | 可配置 |
| 适用场景 | 主节点性能优先 | 服务稳定性优先 | 平衡稳定与恢复 |
| 典型配置 | 数据中心内部 | 生产环境 | 大多数场景 |
