两个后端实例做负载均衡:华为云 ELB 三层组件拆解

单台服务器扛流量,遇到访问高峰容易顶不住,万一这台机器出问题,服务就直接断了。弹性负载均衡(Elastic Load Balance,ELB)做的就是“在前面挡一道,把请求分摊到多台后端”这件事。这篇文章用一个最直观的场景——两台后端实例、一个负载均衡器——把 ELB 的核心组件和配置思路理清楚。文中涉及的具体控制台操作以华为云官方文档为准。
一、为什么需要负载均衡而不是堆单机配置
把一台服务器升到顶配,成本和收益很快就不划算,而且再强的单机也有宕机风险。负载均衡换了个思路:用多台普通服务器一起扛,前面放一个均衡器做流量调度。这样有两个直接好处,一是横向扩展,加机器就能提吞吐;二是消除单点故障,某一台挂了,流量自动切到正常的那台,用户几乎无感。
ELB 是华为云上的托管服务,不用自己维护均衡器软件,重点在“怎么把后端组起来、怎么判断哪台健康”。下面按组件拆开说。
二、ELB 由哪几部分组成
根据华为云官方文档,弹性负载均衡由三部分构成:负载均衡器、监听器、后端服务器。负载均衡器是承载业务的实体;监听器是最小业务单元,负责监听某个协议和端口上的请求;后端服务器组是一个或多个实际处理请求的服务器的逻辑集合。
理解这三层关系很关键:请求先到负载均衡器,经过监听器,再转发到绑定的后端服务器组里的某台服务器。一台负载均衡器可以挂多个监听器(比如同时处理 80 和 443),每个监听器绑定一个后端服务器组。
三、我们的场景:两台后端 + 一个均衡器
假设有两台弹性云服务器(ECS)都部署了同一个 Web 服务,监听本机 8080 端口。目标是让用户访问一个统一地址时,请求被分摊到这两台。拓扑是这样的:
统一访问地址
│
【负载均衡器】
│
【监听器 :80】
│
【后端服务器组 (加权轮询)】
├── 后端实例 A :8080
└── 后端实例 B :8080
后端实例 A、B 在同一 VPC 内,部署相同代码。它们各自提供一个简单的健康检查接口(返回 200 即视为正常),供 ELB 探测。
四、后端健康检查接口怎么写
健康检查本质就是 ELB 定期请求后端某个路径,看返回是不是正常。后端只要暴露一个轻量接口即可,不查库、不做重活:
# health.py(后端实例上运行,监听 8080)
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health():
return {"status": "ok"}
只要 /health 能返回 200,ELB 就认为这台后端健康、可以继续分发流量。某一台进程挂了,这个接口不再响应,ELB 自动把它从转发名单里摘掉,流量只走另一台。
五、监听器与后端服务器组的配置要点
在控制台创建时,几个概念要对应上(具体操作以华为云官方文档为准):监听器配置协议和端口,例如 HTTP、80;监听器绑定一个后端服务器组;后端服务器组里添加两台 ECS,协议和端口填后端实际监听的(如 HTTP、8080);开启健康检查,探测路径填 /health。
流量分配策略决定请求怎么分。官方文档列出的策略包括加权轮询、加权最少连接、源 IP 算法等。最常用的是加权轮询:两台权重相同就轮流分;想让性能强的那台多扛,就把它的权重调高。源 IP 算法则保证同一客户一段时间内的请求落到同一台,适合有会话状态的场景。
六、容易踩的几个坑
第一,后端服务器组的协议要和监听器匹配,比如监听器是 HTTP,后端组也得是 HTTP,否则关联不上。第二,健康检查的路径和端口要填对,很多人配了健康检查却忘了后端真有这个接口,结果两台都被判异常、流量全空。第三,两台后端的有状态数据(比如本地会话)不会自动同步,要做会话保持或把状态外移到 Redis,否则用户请求在兩台间跳会变登录态丢失。
七、小结
ELB 解决的是“多台服务器如何被统一调度”的问题,核心就三层:负载均衡器接流量、监听器定规则、后端服务器组装实例。配上健康检查,单台故障能自动绕开。两台后端做负载均衡只是最小实践,理解了组件关系,后面扩到十台、接 HTTPS 监听器、配转发策略,都是在同一套模型上加法。具体创建步骤以华为云官方文档的最新说明为准。
- 点赞
- 收藏
- 关注作者
评论(0)