13.7.3 Keepalived配置要点(健康检查、权重与优先级)
Keepalived在HAProxy高可用中通过VRRP实现VIP漂移,本节聚焦健康检查、权重与优先级的配置要点,并给出可直接落地的示例、排错与练习。
原理草图(VIP漂移与权重决策)
1. 健康检查(track_script)#
目的:把HAProxy进程/端口/HTTP健康纳入VRRP决策,避免VIP漂到不可用节点。
完整可执行检查脚本示例
文件路径:/etc/keepalived/check_haproxy.sh
#!/usr/bin/env bash
# 检查HAProxy进程与端口及HTTP状态
# 任何一步失败返回非0,触发降权
pidof haproxy >/dev/null 2>&1 || exit 1
ss -lnt | awk '{print $4}' | grep -q ':80$' || exit 1
curl -fs http://127.0.0.1:80/health >/dev/null 2>&1 || exit 1
exit 0
命令解释
- pidof haproxy:进程存在即返回0。
- ss -lnt:检查80端口是否监听。
- curl -fs:HTTP状态非2xx/3xx即失败。
脚本权限
chmod +x /etc/keepalived/check_haproxy.sh
2. 权重(weight)与优先级(priority)#
配置原则
- 主节点priority高(如150),备节点低(如100)。
- 失败时weight取负值(如-60),确保主节点有效优先级低于备节点。
- fall/rise避免瞬时抖动。
Keepalived配置示例(主节点)
文件路径:/etc/keepalived/keepalived.conf
global_defs {
router_id haproxy-master
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
fall 3
rise 2
weight -60
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
track_script {
chk_haproxy
}
}
Keepalived配置示例(备节点)
global_defs {
router_id haproxy-backup
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
fall 3
rise 2
weight -60
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
track_script {
chk_haproxy
}
}
参数解释
- priority:节点基础优先级,越大越优先。
- weight:健康失败时对优先级的动态修正。
- nopreempt:避免主节点恢复后抢占,减少回切抖动。
- virtual_router_id/auth_pass:必须一致。
3. 安装与启动(示例)#
# RHEL/CentOS
yum -y install keepalived haproxy
# Ubuntu/Debian
apt -y install keepalived haproxy
# 启动并设置开机自启
systemctl enable --now keepalived
systemctl enable --now haproxy
验证VIP是否在主节点
ip addr show dev eth0 | grep 10.0.0.100
4. 排错与验证#
常见排错命令
# 查看keepalived日志(系统日志或单独文件)
journalctl -u keepalived -f
# 验证脚本返回码
/etc/keepalived/check_haproxy.sh; echo $?
# 检查VRRP通告(需tcpdump)
tcpdump -nn -i eth0 vrrp
故障模拟
# 停止主节点HAProxy,触发降权与VIP漂移
systemctl stop haproxy
# 观察备节点是否获得VIP
ip addr show dev eth0 | grep 10.0.0.100
预期效果
- 主节点停HAProxy后,备节点获得VIP。
- 恢复后若配置了nopreempt,主节点不抢占VIP。
5. 练习#
- 将
weight从-60调整为-30,验证主节点是否仍能切换。 - 去掉
nopreempt,观察主节点恢复时是否抢占VIP。 - 把健康检查改为HTTP 200校验(如
/health),验证后端服务不可用时是否触发切换。
通过“健康检查 + 权重调整 + 优先级策略”联动,Keepalived实现稳定切换与可控回切,为HAProxy高可用提供可靠基础。