华为云 ELB 如何配出真正高可用:跨可用区 ECS、健康检查和灰度摘流实战

在华为云上买了 ELB,再挂两台 ECS,不等于业务已经高可用。两台后端如果仍在同一可用区,健康检查只测端口存活,发布时直接停进程,故障时依然可能整站中断。

真正可验证的高可用,需要把流量入口、跨可用区部署、后端服务器组、健康检查、安全组、应用状态和发布流程放在一起设计。本文以 Web/API 服务为例,给出一套从架构到故障演练的实施清单。

一、ELB 解决什么问题,不能解决什么问题

华为云官方说明中,弹性负载均衡(ELB)会由监听器接收请求,再按后端服务器组和分配策略把流量转发给健康的后端服务器。独享型支持加权轮询、加权最少连接、源 IP、连接 ID 等策略;具体能力与区域、实例类型应以控制台为准。

参考:ELB 工作原理

ELB 可以:

  • 消除单台 ECS 的入口单点;
  • 把请求分散到多个健康后端;
  • 配合权重做灰度或逐步摘流;
  • 通过健康检查自动停止向异常节点转发流量;
  • 配合多可用区部署提升故障隔离能力。

ELB 不能自动修复:

  • 数据库单点与连接池耗尽;
  • 本地会话、上传文件或定时任务造成的状态不一致;
  • 所有 ECS 位于同一可用区的风险;
  • 健康检查路径"假健康";
  • 发布脚本同时重启全部节点的问题。

二、推荐的跨可用区拓扑

基础生产拓扑可以这样设计:

  1. 在同一 VPC 内部署 ELB;
  2. 至少两台 ECS,分布到同一区域的不同可用区;
  3. 后端 ECS 使用相同镜像、应用版本和运行参数;
  4. 会话放入共享缓存或数据库,上传文件放入对象存储或共享存储;
  5. 数据库、缓存与消息队列也要有自己的高可用方案;
  6. 监控同时覆盖 ELB、后端 ECS 和业务接口。

华为云文档说明,可用区之间物理隔离、同区域内网互通;若目标是提高应用高可用性,建议将 ECS 创建在不同可用区。可用区和规格供应情况以控制台为准。

参考:ECS 自定义购买与可用区说明

三、选择四层还是七层监听器

四层:TCP、UDP、TLS 等连接级流量

适合自定义 TCP 服务、数据库代理、消息协议或不需要基于 URL 路由的场景。优势是转发路径简单,但健康检查和路由表达能力相对有限。

七层:HTTP、HTTPS 请求级流量

适合网站和 API,可按域名、路径等规则转发,也更适合使用专用健康检查 URL。若需要在 ELB 终止 HTTPS,要统一规划证书、TLS 策略、后端协议和真实客户端 IP 获取方式。

不要只因为"七层功能多"就一律选择七层。先确认协议、加密终止位置、客户端 IP、会话保持和性能需求。

四、健康检查路径必须反映业务是否可服务

官方文档说明,ELB 会定期请求后端;异常节点停止接收业务流量,恢复后再自动加入。健康检查过于频繁也可能增加敏感业务负担,应按实际情况配置间隔、超时和阈值。

参考:华为云 ELB 健康检查介绍

推荐为应用提供独立端点:

nginx 复制代码
location = /healthz {
    access_log off;
    default_type application/json;
    return 200 '{"status":"ok"}';
}

但生产环境不应只返回固定的 200。更稳妥的做法是分层:

  • /livez:进程是否存活;
  • /readyz:是否已加载配置、能处理请求;
  • /healthz:按需检查关键依赖,但设置短超时,避免级联阻塞。

健康检查参数应结合恢复目标设置:

  • 协议与业务层次匹配;
  • 端口确实由目标进程监听;
  • 路径以 / 开头且稳定返回期望状态码;
  • 超时时间小于检查间隔;
  • 正常/异常阈值在误判与切换速度之间平衡。

创建后端服务器组时,当前独享型健康检查可选能力及参数范围可能随区域发布,需以控制台实际显示为准。

参考:创建独享型后端服务器组

五、安全组不放通,后端永远"不健康"

把 ECS 加入后端服务器组后,如果安全组或网络 ACL 阻断健康检查,ELB 会把正常应用判为异常。上线前需要核对:

  • 健康检查协议和端口是否放通;
  • 业务端口是否允许来自 ELB 的流量;
  • 使用共享型或独享型 ELB 时,源地址规则是否符合对应文档;
  • 子网网络 ACL 是否允许回程流量;
  • 获取客户端 IP 后,应用防火墙规则是否仍正确。

华为云共享型 ELB 文档明确要求检查后端服务器的安全组与网络 ACL,并给出对应源网段规则;不同类型 ELB 的要求不能混用。

参考:配置后端服务器安全组

在 ECS 内部可验证监听与响应:

bash 复制代码
ss -lntp
curl -fsS http://127.0.0.1:8080/healthz
curl -fsS http://ECS_PRIVATE_IP:8080/healthz

六、灰度发布:先降权,再摘流,再更新

单节点发布流程建议:

  1. 将目标 ECS 权重逐步调低,或从后端组临时移除;
  2. 等待已有连接和业务请求自然结束;
  3. 停止应用、部署新版本并启动;
  4. 本机检查 /livez/readyz、核心接口与日志;
  5. 确认 ELB 健康检查恢复正常;
  6. 小权重放量,观察错误率和 P95;
  7. 恢复正常权重,再处理下一台。

检查节点是否还有连接:

bash 复制代码
ss -Hnt state established '( sport = :8080 )' | wc -l

如果应用有 WebSocket、长轮询或大文件上传,应把连接排空时间设得更长,并确保客户端具备重连机制。

七、如何选择分配策略

业务特征 可优先评估的策略 注意事项
请求耗时接近、节点规格相同 加权轮询 权重应与后端容量匹配
请求耗时差异大、长连接多 加权最少连接 仍需观察连接是否等价于负载
需要源地址粘性 源 IP NAT 后大量用户可能聚合为同一源
灰度或新旧规格混跑 权重分流 逐步放量并比较 P95/错误率

会话保持不是默认答案。能把会话外置时,优先让后端无状态化,这样扩容、故障切换和灰度发布更容易。

八、故障演练怎么做

在维护窗口或隔离环境逐项演练:

  1. 停止一台 ECS 的应用进程;
  2. 观察健康检查从正常变为异常的时间;
  3. 验证外部请求是否持续成功;
  4. 恢复应用,记录重新加入所需时间;
  5. 模拟单个可用区后端全部不可用;
  6. 检查监控、告警与运维通知是否触发。

外部验证示例:

bash 复制代码
for i in $(seq 1 100); do
  curl -o /dev/null -sS \
    -w '%{http_code} %{time_total}\n' \
    https://your-domain.example/healthz
done

记录切换窗口内的失败请求数、P95、后端健康状态与连接数,而不是只看"页面最后能打开"。

九、常见误区

  1. 两台 ECS 放在同一可用区:解决了实例故障,没有解决可用区故障。
  2. 健康检查只探测端口:进程在监听,不代表数据库连接池和关键依赖可用。
  3. 所有节点一起重启:ELB 没有健康后端时无法创造可用性。
  4. 把安全组全部放开:应按官方要求只放通必要来源、协议和端口。
  5. 开启会话保持后忽略节点状态:粘性会话可能让单节点压力不均。
  6. 只监控 ELB,不监控业务:入口健康不代表订单、登录和支付链路健康。

十、购买与扩容建议

如果目前只有一台华为云 ECS,且业务需要持续在线,优先评估 ELB 加跨可用区双节点,而不是单纯把一台机器升级得更大。两台后端的规格应由单节点故障时的剩余容量决定:任何一台下线后,其余节点仍需承载关键流量。

对于潮汐业务,可进一步评估 ELB 配合弹性伸缩,华为云官方场景文档说明伸缩新增或移除的 ECS 可与后端服务器组协同。上线前仍要验证镜像一致性、启动时间、健康检查和数据库容量。

参考:华为云 ELB 应用场景

真正值得购买的高可用方案,不是"有一个 ELB 图标",而是跨可用区 ECS、正确健康检查、最小权限网络规则、无状态应用和可重复故障演练共同构成的系统。

相关推荐
牢姐与蒯1 小时前
Linux文件(三).Ext系列文件系统
linux·运维·服务器
java_nnnn2 小时前
面试题(网络部分前传)-13问
服务器·网络·网络协议·tcp/ip·面试
码少女2 小时前
Linux--套接字编程
linux·服务器·网络
进击的荆棘2 小时前
Linux系统——进程控制(下)
linux·运维·服务器·进程
一个有温度的技术博主11 小时前
Linux 核心命令速查指南:从文件操作到系统运维
linux·服务器
Winner_hwx12 小时前
华为ICT大赛备赛复习1
服务器·网络·华为
宗介波妞13 小时前
Wireshark 抓取 IEC104 报文:常见异常报文排查与标志位解读
服务器·网络·wireshark
网硕互联的小客服14 小时前
各个版本的Linux系统如何修改远程端口ssh端口?
linux·运维·服务器·网络
T1mzhou14 小时前
ARM64 Linux 6.10 内核驱动(12):dd.c:probe/ remove、延迟 probe
linux·服务器·c语言·arm开发·arm