12.5.4 健康检查与调度算法
在 Keepalived 与 LVS 集成中,健康检查与调度算法决定了后端 Real Server 的可用性判断与流量分发策略,是高可用负载均衡的核心环节。本节给出原理草图、可执行配置示例、命令验证、排错思路与练习。
常见健康检查类型与适用场景:
- TCP_CHECK:端口探测,成本低,判断较粗
- HTTP_GET/SSL_GET:URL 与状态码校验,适合 Web
- MISC_CHECK:自定义脚本,可检查依赖或业务状态
完整配置示例(含 HTTP 检查与权重)#
文件路径:/etc/keepalived/keepalived.conf
global_defs {
router_id LVS_NODE01
enable_script_security
script_user root
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
}
virtual_server 10.0.0.100 80 {
delay_loop 3
lb_algo wrr
lb_kind DR
protocol TCP
persistence_timeout 60
real_server 10.0.0.11 80 {
weight 2
HTTP_GET {
url {
path /healthz
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 1
}
}
real_server 10.0.0.12 80 {
weight 1
HTTP_GET {
url {
path /healthz
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 1
}
}
}
关键参数解释:
- lb_algo wrr:加权轮询,按权重分配流量
- lb_kind DR:LVS DR 模式
- persistence_timeout:会话保持时长(秒)
- nb_get_retry 与 delay_before_retry:减少抖动
自定义脚本健康检查示例(MISC_CHECK)#
适合检查业务依赖或可写性:
文件:/etc/keepalived/check_backend.sh
#!/usr/bin/env bash
# 检查 Nginx 端口与应用健康接口
curl -sSf http://127.0.0.1:80/healthz >/dev/null || exit 1
exit 0
配置片段:
real_server 10.0.0.11 80 {
weight 2
MISC_CHECK {
misc_path "/etc/keepalived/check_backend.sh"
misc_timeout 3
misc_dynamic
}
}
启动与验证命令#
# 启动并设置开机自启
systemctl enable --now keepalived
# 查看 VIP 是否绑定
ip addr show dev eth0 | grep 10.0.0.100
# 查看 LVS 转发表
ipvsadm -Ln
# 查看健康检查日志
journalctl -u keepalived -n 100 --no-pager
预期效果:
- ipvsadm -Ln 中 Real Server 状态为 Active
- 访问 VIP 时流量按权重分配
调度算法选择与验证#
# 查看当前调度算法
ipvsadm -Ln | grep -E "TCP|UDP"
# 临时切换算法(测试用)
ipvsadm -E -t 10.0.0.100:80 -s lc
算法建议:
- 短连接或节点性能一致:rr / wrr
- 长连接或负载不均:lc / wlc
- 需要会话粘性:sh + persistence_timeout
常见故障与排错思路#
- 健康检查反复上下线
- 增大nb_get_retry与delay_before_retry
- 确认/healthz稳定、响应快 - VIP 不可访问
-ip addr确认 VIP 是否存在
- 检查防火墙/安全组放行 VIP 端口 - Real Server 有流量但无响应
- DR 模式下确认 RS 绑定 VIP 到lo并关闭 ARP 响应
练习#
- 将
lb_algo从wrr切换到wlc,观察连接分布变化。 - 为 Real Server 增加
MISC_CHECK,模拟脚本返回失败并观察摘除。 - 调整
persistence_timeout,验证会话保持效果与负载均衡行为。