keepalived通过tcp端口探测、http get校验或自定义脚本三种方式检查apache可用性:tcp检查仅验证端口连通性;http检查验证状态码及响应内容;脚本检查支持复杂逻辑,均需结合fall/rise参数防抖动,并确保apache监听地址可被外部访问。

Keepalived 本身不直接检查 Apache 进程或 HTTP 服务内容,它通过外部脚本或内置 TCP/HTTP 检查方式间接判断后端 Apache 是否可用。核心在于:健康检查由 Keepalived 触发,但实际探测逻辑依赖配置的检查类型和自定义脚本。
基于 TCP 端口的快速探活
这是最轻量、默认启用的方式。Keepalived 尝试与 Apache 监听的 IP:Port(如 192.168.1.10:80)建立 TCP 连接。只要端口可通、连接能成功建立并及时关闭,就认为服务“在线”。
- 优点:开销极小,响应快,适合高频率检查(如 interval 2s)
- 局限:无法识别 Apache 崩溃但端口仍被残留进程占用、或返回 503/500 等错误页面的情况
- 配置示例中使用 tcp_check 即启用该模式
基于 HTTP GET 的内容级校验
Keepalived 可发起真实 HTTP 请求(GET),并验证响应状态码、响应头或响应体内容,从而确认 Apache 不仅端口通,还能正常处理请求并返回预期结果。
- 需在 vrrp_instance 或 virtual_server 块中启用 http_check
- 常用参数:url(指定路径,如 /healthz)、status_code(期望返回 200)、digest(校验响应体 MD5,防页面被篡改)
- 注意:Keepalived 自身不解析 HTML,只做基础 HTTP 交互和简单匹配;复杂逻辑(如 JSON 字段判断)需用自定义脚本
通过自定义 check_script 实现灵活判定
当内建检查无法满足需求(例如需验证 Apache 返回特定字符串、检查日志状态、或调用 curl + jq 解析 API 响应),可通过 check_script 调用 Shell 脚本,并依据其退出码(0=成功,非0=失败)决定节点健康状态。
- 脚本必须有执行权限(chmod +x),且路径在 keepalived 配置中正确引用
- 建议脚本加入超时控制(如 timeout 3 curl -f http://localhost/health)避免阻塞
- Keepalived 每次检查会 fork 新进程执行脚本,频繁调用需注意资源消耗
状态同步与故障转移的实际表现
Keepalived 不是实时秒级感知——健康检查结果需连续失败 fall 次才标记为 down,连续成功 rise 次才恢复为 up。这避免了网络抖动导致的误切换。
- 例如配置 fall 3 rise 2 且检查间隔 2s,则至少需 6 秒确认宕机,4 秒确认恢复
- Apache 后端节点状态变化后,Keepalived 会更新 LVS 的 ipvsadm 规则(若启用 LVS)或调整 VRRP 主备角色(若仅做高可用 VIP)
- 注意:Apache 自身无须任何特殊配置,但需确保监听地址绑定正确(如 0.0.0.0:80 而非 127.0.0.1:80),否则 Keepalived 从其他机器检查将失败










