Keepalived核心健康检查:VRRP Script & HTTP_GET
在Keepalived高可用集群部署中,健康检查是保障服务连续性的核心机制。其中VRRP实例的script脚本检查与real_server的HTTP_GET检查是最常用的两种方式。
一、核心差异:从检测对象到作用机制
1. 检测维度:节点级 vs 服务级
- VRRP Script:聚焦整个Keepalived节点的健康状态,检测范围涵盖节点可达性、系统级服务(如Nginx/HAProxy进程存活)、硬件资源等全局状态。
- HTTP_GET:聚焦单个后端真实服务器(RealServer)的应用层健康状态,仅检测指定HTTP服务的可用性,不关心节点整体状态。
2. 作用机制:优先级调整 vs 负载池剔除
- VRRP Script:通过
weight参数影响节点优先级。脚本执行失败时,节点优先级会相应降低(通常配置为负数权重),当优先级低于备用节点时,触发VIP主备切换。 - HTTP_GET:检测失败时,仅将当前RealServer从负载均衡池中移除,不影响Keepalived节点的主备角色,其他健康后端仍可正常承接请求。
3. 配置位置:全局独立配置 vs 实例内配置
- VRRP Script:需在
global_defs外单独定义vrrp_script块,通过track_script在VRRP实例中引用,支持自定义脚本逻辑。 - HTTP_GET:直接嵌套在
real_server配置块内,仅针对当前后端服务生效,配置更轻量化。
二、配置实战
1. VRRP Script配置(节点级检测)
适用于检测Nginx/HAProxy等反向代理服务的存活状态,确保节点故障时自动切换:
# 定义检测脚本 vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" # 自定义脚本路径 interval 1 # 检测间隔1秒 weight -30 # 失败时优先级降低30 fall 3 # 连续3次失败判定异常 rise 2 # 连续2次成功判定恢复 } # 在VRRP实例中引用 vrrp_instance VI_1 { state MASTER interface ens37 virtual_router_id 50 priority 100 track_script { chk_nginx # 关联检测脚本 } # 其他配置(认证、VIP等) }配套脚本check_nginx.sh核心逻辑:
#!/bin/bash# 检查Nginx进程是否存在nginx_count=$(ps-C nginx --no-header|wc-l)if[$nginx_count-eq0];thensystemctl start nginx# 尝试重启sleep2if[$(ps-C nginx --no-header|wc-l)-eq0];thensystemctl stop keepalived# 重启失败触发切换fifi2. HTTP_GET配置(服务级检测)
适用于检测后端Web服务可用性,确保故障服务不承接请求:
virtual_server 10.0.0.100 80 { lb_algo rr lb_kind DR protocol TCP # 后端真实服务器配置 real_server 10.0.0.14 80 { HTTP_GET { url { path / # 检测路径 status_code 200 # 期望响应码 } connect_timeout 3 # 连接超时3秒 nb_get_retry 3 # 重试3次 delay_before_retry 1 # 重试间隔1秒 } } }三、适用场景
1. 优先用VRRP Script的场景
- 核心反向代理节点的高可用(如Nginx/HAProxy集群),需节点级故障切换。
- 检测系统级资源(如磁盘空间、内存使用率),避免节点因资源耗尽影响服务。
- 需要自定义复杂检测逻辑(如结合日志分析、多服务联动检测)。
2. 优先用HTTP_GET的场景
- 后端多RealServer负载均衡,需精准剔除单个故障服务。
- Web服务健康检测(如接口可用性、页面完整性),需应用层状态验证。
- 无需节点切换,仅需负载池动态调整的场景(如微服务集群后端)。
3. 组合使用场景
在高可用负载均衡架构中,可同时配置两种检查:
- VRRP Script保障反向代理节点存活,实现节点级切换。
- HTTP_GET保障后端RealServer健康,实现服务级故障隔离。
这种组合既能避免节点单点故障,又能精准过滤异常后端,大幅提升集群稳定性。
四、关键注意事项
- VRRP Script的
weight值需合理配置,确保优先级差值能触发切换(如主节点优先级100,备用节点90,脚本权重-30)。 - HTTP_GET不支持复杂逻辑,若需检测HTTPS服务,可改用
SSL_GET配置。 - 避免过度检测:VRRP Script间隔建议≥1秒,HTTP_GET重试次数≤3次,防止占用过多资源。
- 脚本执行权限:VRRP Script默认以root用户执行,自定义脚本需确保可执行权限(
chmod +x)。
总结
VRRP Script和HTTP_GET虽同为健康检查机制,但定位截然不同:前者守护Keepalived节点可用性,后者保障后端服务可用性。实际部署中,需根据集群架构分层配置——节点级故障用VRRP Script触发切换,服务级故障用HTTP_GET剔除异常,二者协同构建多层次高可用防护体系。