lvs本身不执行健康检查,而是由keepalived或ldirectord等外部工具主动探测后端服务器,并根据结果调用ipvsadm动态增删ipvs规则,实现故障剔除与自动恢复。

LVS 本身不主动发起健康检查,也不直接处理来自后端节点的“健康检查请求”——它不接收、不响应、也不解析后端服务器主动发来的探测报文。这一点需要明确:LVS(IPVS)是一个纯转发内核模块,不具备监听、应答或解析健康状态的能力。
真正执行健康检查的是外部监控组件,比如 keepalived 或 ldirectord。它们运行在调度器(Director)上,主动向后端 Real Server 发起探测,再根据结果调用 ipvsadm 动态增删 IPVS 规则。所以所谓“LVS 处理健康检查请求”,实质是:
LVS 不处理,但被健康检查工具控制
-
keepalived或ldirectord定期对每个 Real Server 的指定 IP+端口发起检测(TCP 连接、HTTP GET、SSL 握手等); - 若探测失败(超时、连接拒绝、状态码非预期等),工具会执行命令如:
ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.10:80
从 IPVS 表中移除该 Real Server;
- 若恢复成功,则重新添加:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -g
健康检查方式决定“探测行为”,而非 LVS 行为
| 检查类型 | 工具发起动作 | 后端需配合什么? |
|---|---|---|
TCP_CHECK |
尝试三次 connect() 到目标 IP:Port |
只需端口监听且 accept 成功(如 nginx、httpd 正常运行) |
HTTP_GET |
发送 GET /health HTTP/1.1,校验 status_code 和可选 expect string
|
需提供 /health 接口,返回 200 + 可选正文(如 "OK") |
SSL_GET |
建立 TLS 握手 + 发送 HTTP GET,校验响应 | 需启用 HTTPS 服务,证书有效,路径可访问 |
注意:后端节点不需要运行任何健康检查服务端程序,也不需要“上报心跳”。它只是被动响应标准网络请求——就像普通用户访问一样。
DR 模式下特别注意:健康检查必须可达
- 因为 DR 模式中 Real Server 使用真实 IP 回包(不经过 Director),所以
keepalived/ldirectord的探测包必须能直接路由到 Real Server; - 确保调度器与所有 Real Server 二层互通(同网段)、防火墙放行探测端口(如 80、443、自定义健康端口);
- Real Server 上无需配置虚拟 IP(VIP)来响应健康检查——它用自己真实的 IP 接收并响应。
实际效果:LVS 规则动态变化,用户无感
- 用户请求始终打到 VIP,由 IPVS 内核模块按当前规则转发;
- 当某 Real Server 被剔除,
ipvsadm -l中将不再显示该条目,新连接自动避开; - 已建立的连接不受影响(除非配置了
quiescent = yes强制清空连接跟踪); - 恢复后自动重入,流量逐步回归,无需人工干预。
LVS 的角色始终是“规则执行者”,健康逻辑完全交由上层工具闭环管理。











