12.1.1 Keepalived核心组件与进程模型
Keepalived由多个核心组件协同构成,高可用能力通过进程分工与状态机驱动实现。整体进程模型包含主控进程、VRRP子进程与健康检查子进程三部分:主控进程负责读取配置、派生子进程、维护全局状态与日志;VRRP子进程实现虚拟路由器的状态机与通告报文发送/接收;健康检查子进程负责对后端服务与网络路径进行探测并反馈结果,进而影响VRRP优先级与主备切换决策。
核心组件划分为三块:
1)配置与控制层:解析 /etc/keepalived/keepalived.conf,加载全局参数、vrrp_instance 与 vrrp_script;主控进程初始化运行环境与资源。
2)VRRP协议层:实现 MASTER/BACKUP/FAULT 状态机,维护实例优先级、定时器与通告周期,依据抢占策略与权重调整进行主备选举。
3)健康检查与事件驱动层:通过脚本检查、TCP/HTTP/SSL 探测判定服务健康;检查结果会调整实例优先级或触发进入 FAULT 状态,完成 VIP 漂移。
安装与基本验证(示例)#
# Ubuntu/Debian
apt update
apt -y install keepalived
# CentOS/RHEL
yum -y install keepalived
# 验证版本与启动
keepalived -v
systemctl enable --now keepalived
systemctl status keepalived
进程模型与配置示例(含健康检查)#
# /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_1
}
vrrp_script chk_nginx {
script "/usr/bin/curl -fsS http://127.0.0.1/ >/dev/null"
interval 2
timeout 2
fall 2
rise 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 120
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100/24
}
track_script {
chk_nginx
}
}
预期效果:
- 服务正常时,VIP 绑定在 MASTER;
- nginx 失败连续 2 次后,权重降低,触发降级或切换;
- BACKUP 接收通告后完成 VIP 漂移。
命令解释与观测点#
# 查看进程模型
ps -ef | grep keepalived
# 解释:通常可看到主控进程与子进程(vrrp/healthcheck)
# 查看 VIP 是否已绑定
ip a show dev eth0 | grep 192.168.10.100
# 解释:VIP 存在表示本机为 MASTER
# 查看 VRRP 通告
tcpdump -nn -i eth0 vrrp
# 解释:观察 VRRP 广播报文,确认通告周期与对端存在
常见排错(示例)#
# 1) VRRP 通告不通
tcpdump -nn -i eth0 vrrp
# 解释:没有 VRRP 报文,检查防火墙/交换机组播配置
# 2) VIP 未绑定
journalctl -u keepalived -e
# 解释:查看日志中的状态转换、认证失败、脚本超时
# 3) 健康检查脚本不生效
keepalived -n -l -D -f /etc/keepalived/keepalived.conf
# 解释:前台调试模式,查看脚本执行结果与权重变更
练习(动手验证)#
1)在两台机器配置 MASTER/BACKUP,将 BACKUP 的 priority 设置为 100。
2)在 MASTER 上停止 nginx:
systemctl stop nginx
3)观察 VIP 漂移:
ip a show dev eth0 | grep 192.168.10.100
4)恢复 nginx,再观察是否回切(取决于是否配置 nopreempt)。
以上示例覆盖进程模型、状态机与健康检查的协同工作流程,体现“检测→权重/状态变更→VRRP通告→VIP漂移”的高可用动作链路。