主题
第 5 章 Keepalived 与高可用 IP
5.1 VRRP 协议原理
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议,用于在多台路由器/服务器之间提供一个虚拟 IP 地址(VIP)。
VRRP 基本概念
┌─────────────────────────────────────┐
│ Virtual Router 51 │
│ VIP: 10.0.0.100 │
└──────────────────┬──────────────────┘
│
┌────────────┼────────────┐
│ │ │
┌─────▼─────┐ ┌────▼─────┐ ┌────▼─────┐
│ Master │ │ Backup │ │ Backup │
│ Priority │ │ Priority │ │ Priority │
│ 100 │ │ 90 │ │ 80 │
└───────────┘ └──────────┘ └──────────┘| 概念 | 说明 |
|---|---|
| VRID | 虚拟路由标识,同一广播域内唯一 |
| VIP | 虚拟 IP,客户端访问的入口 |
| Master | 当前持有 VIP 的节点 |
| Backup | 备份节点,Master 故障时接管 VIP |
| Priority | 优先级,数值大的优先成为 Master |
| Advertisement | 心跳广播,Master 定期发送 |
工作流程
- 集群启动后,Priority 最高的节点成为 Master,持有 VIP
- Master 定期发送 VRRP 广播(默认 1 秒一次)
- Backup 节点监听广播,如果超时未收到,则认为 Master 故障
- Priority 最高的 Backup 升级为 Master,接管 VIP
- 原 Master 恢复后,根据配置决定是否抢回 VIP
5.2 Keepalived 核心组件
Keepalived 是一个基于 VRRP 的高可用解决方案,主要包含两个进程:
| 进程 | 说明 |
|---|---|
| keepalived 主进程 | 读取配置,管理 VRRP 和健康检查 |
| VRRP 子进程 | 处理 VRRP 协议 |
| healthchecker 子进程 | 执行健康检查脚本 |
5.3 Master/Backup 选举机制
初始选举
- 所有节点同时启动时,Priority 最高的节点成为 Master
- 如果 Priority 相同,IP 地址大的节点成为 Master
抢占机制
preempt默认开启- 当原 Master 恢复且 Priority 更高时,会重新抢回 VIP
- 生产环境中通常保持默认,确保高优先级节点优先服务
状态切换
Keepalived 在状态切换时可以执行脚本:
notify_master:变为 Master 时执行notify_backup:变为 Backup 时执行notify_fault:变为 Fault 时执行
5.4 健康检查脚本设计
Keepalived 可以通过 vrrp_script 执行健康检查,根据检查结果调整节点优先级。
示例:检测 NFS-Ganesha 是否运行
conf
vrrp_script check_ganesha {
script "/usr/bin/systemctl is-active nfs-ganesha"
interval 2
weight -50
fall 2
rise 2
}参数说明
| 参数 | 说明 |
|---|---|
script | 执行的检查命令或脚本 |
interval | 检查间隔(秒) |
weight | 检查失败时优先级调整值 |
fall | 连续失败几次才判定为失败 |
rise | 连续成功几次才判定为成功 |
脚本返回码
0:检查成功- 非
0:检查失败
当检查失败时,Priority 会减去 weight 的值,可能导致 VIP 漂移。
5.5 VIP 漂移与客户端无感知切换
VIP 漂移过程
阶段 1:正常
Client ──► VIP(10.0.0.100) ──► Node1(Master)
阶段 2:Node1 Ganesha 故障
Client ──► VIP(10.0.0.100) ──► Node2(新 Master)客户端影响
- TCP 连接会短暂中断
- 客户端通常会自动重连(NFS hard 挂载)
- 对于短暂 IO 操作,影响在秒级
减少切换影响的建议
- 使用
hard挂载,避免 soft 挂载导致的 IO 错误 - 设置合理的
timeo和retrans - 确保 Keepalived 检查间隔足够短
- 应用程序具备重试机制
5.6 本章小结
- VRRP 提供虚拟 IP,实现服务入口高可用
- Keepalived 是 VRRP 的 Linux 实现
- Master/Backup 通过 Priority 选举
- 健康检查脚本可以在服务异常时触发 VIP 漂移
- VIP 漂移期间客户端会有短暂中断,但可自动恢复
练习题
- VRRP 中的 VRID、VIP、Priority 分别是什么意思?
- Keepalived 的健康检查脚本返回什么值表示成功?
- 如果 Master 节点恢复后希望不抢回 VIP,应该如何配置?
- 为什么生产环境 NFS 挂载推荐
hard而不是soft?