华为云 ELB 健康检查异常:后端不可用排查清单
一、现象:监听器正常,后端却是「异常」
很多人配完华为云弹性负载均衡(ELB)后,监听器能建、域名也能解析,控制台里后端服务器却长期显示健康检查「异常」,业务流量进不来。常见的情况是:应用本机能 curl 通,但 ELB 仍把它摘掉;或者刚改完安全组,状态迟迟不翻绿。
健康检查的本质很简单:ELB 按间隔向后端发探测,连续失败达到阈值后标记异常并停转发,恢复后再摘回。排查时优先分清两件事:
- 探测能不能打到机子(安全组、网络 ACL、本机防火墙、路由)
- 打到了应用是否按检查协议「答对」(端口监听、HTTP 路径与状态码、HOST 头)
共享型与独享型在「探测源地址」上不同,混用别人的放通规则很容易白忙一场。下面按可执行顺序整理一份清单,方便对照自检。
参考文档(公开可核对):
二、先定界:共享型还是独享型,源地址不一样
| 类型 | 健康检查源地址(入方向要放通) |
|---|---|
| 共享型 ELB | 100.125.0.0/16 |
| 独享型 ELB | ELB 后端子网所在 VPC 网段 |
只放通「业务客户端网段」、却没放通上表源地址时,本机自测正常、ELB 探测全失败,是最常见的一类误配。
补充两点容易忽略的语义:
- 权重为 0:独享型仍会探测并显示真实健康状态,只是不转发新请求;共享型会把健康检查状态显示为「异常」。看到「异常」时先看一眼权重,避免误判。
- 关掉健康检查:ELB 会默认后端在线并继续转发。这能临时恢复流量,但掩盖了真实故障,生产更稳妥的做法是修好探测,而不是长期关闭。
四层监听器(TCP/UDP)还有一项:负载均衡器需要绑定 EIP 或私网 IP。初次创建未绑定时,后端常会直接显示健康检查异常。
三、网络层:安全组、网络 ACL、本机三道门
1. 安全组:协议、端口、源地址要对齐
后端安全组入方向需要同时满足:
- 协议:与健康检查配置一致(HTTP 检查实际走 TCP 传输层,规则按检查协议对应的传输层放通)
- 端口:健康检查端口(未单独指定时等于业务端口)
- 源地址:按上一节的共享型 / 独享型网段
出方向若被收紧(不是默认「全部放通」),同样要放通对健康检查源地址的回程。很多人只改入方向、出方向仍拒绝,探测包进得去、应答回不来。
2. 网络 ACL:子网级默认拒绝
若后端所在子网挂了网络 ACL,默认会拒绝全部出入站。必须在 ACL 入 / 出方向再放通健康检查协议、端口和对应源网段。安全组放过、ACL 没放过时,控制台自助诊断里常能直接看到 ACL 相关项。
3. 本机防火墙与 hosts.deny
firewalld / iptables / 安全软件若屏蔽了探测源网段,表现与安全组拒绝类似。共享型场景下,还要确认 /etc/hosts.deny 没有写入 100.125.0.0/16。
另外检查默认路由:跨网段探测依赖默认路由指向子网网关。可用 ip route 或 route -n 确认;默认路由被改掉后,健康检查报文到不了后端。
四、应用层:监听、路径、状态码
1. 端口是否真在 LISTEN
在后端上执行(把 port 换成健康检查端口):
netstat -anlp | grep port
# 或
ss -lntp | grep port
回显里要有 LISTEN。没有监听时,先启动业务或修正健康检查端口,再谈 ELB 配置。
2. HTTP 检查:路径与状态码
HTTP 健康检查是 ELB 对「检查路径」发 GET。建议路径指向轻量静态页(如 /health.html),路径填绝对路径(以 / 开头),例如 /、/chat/try/、/health.html。
本机自测:
curl 后端私有IP:健康检查端口/健康检查路径 -iv
状态码约定(以当前文档为准,产品迭代时以控制台说明为准):
| 场景 | 通常视为正常的状态码 |
|---|---|
| TCP 监听器上的 HTTP 检查 | 200 |
| 共享型 ELB 的 HTTP 检查 | 200、202、401 |
| 独享型 ELB 的 HTTP/HTTPS 检查 | 200 |
应用若对根路径做 302/登录跳转、或校验 Host 头,容易导致「业务能访问、检查失败」。可以:把检查路径改成不跳转的静态健康页;或在健康检查配置里填写后端认可的域名;临时定界时也可先改成 TCP 检查,只验端口是否通,确认网络层无误后再切回 HTTP。
3. 后端服务器组是否挂到监听器
后端服务器组未关联监听器时,健康检查状态无法正常探测。改完关联后,仍需等待「检查间隔 × 判定次数」量级的时间,状态才会翻绿,不必秒刷。
五、负载与超时
高 CPU、内存打满、连接数顶满时,健康检查连接或请求容易超时,表现为间歇性异常。可以用云监控(CES)看后端 ECS 的 CPU、内存、网卡与连接相关指标,先排除「机器其实活着但忙不过来」。
超时、间隔、最大重试次数设得过严时,短抖动也会被判死。可以按业务 SLA 略放宽,但不要用「关掉检查」代替容量问题。
六、一份可执行的检查表
改完配置后请等待若干探测周期再看控制台状态。
- [ ] 已确认是共享型还是独享型,安全组 / ACL 源地址用对网段
- [ ] 入方向与出方向均放通健康检查协议 + 端口 + 源网段
- [ ] 子网网络 ACL(若启用)同样放通,未停留在默认拒绝
- [ ] 本机防火墙 /
hosts.deny未拦探测源;默认路由指向子网网关 - [ ] 健康检查端口在后端
LISTEN;HTTP 路径为绝对路径且返回约定状态码 - [ ] 若应用校验 Host,健康检查「域名」已填写;必要时先用 TCP 检查定界
- [ ] 后端服务器组已关联监听器;四层监听场景下 ELB 已绑定 EIP 或私网 IP
- [ ] 权重不为 0(尤其共享型);机器负载未导致检查超时
- [ ] 修改后已等待间隔与重试生效,未在几秒内误判失败
七、小结
ELB 健康检查异常,多半卡在「探测源地址没放通」或「HTTP 答错状态码 / 路径」两层。先分清共享型 100.125.0.0/16 与独享型后端子网网段,再按安全组 → ACL → 本机 → 监听与状态码的顺序推进,多数「后端不可用」可以在不关健康检查的前提下恢复。控制台文案若有改版,以当前官方 FAQ 为准。
- 点赞
- 收藏
- 关注作者
评论(0)