华为云ELB负载均衡:从零搭建高可用网站集群的完全指南
目录
- 1. 核心架构概览:从单机困境到集群突围
- 2. 基础篇:从零搭建Web集群
- 3. 实战篇:深入ELB核心配置
- 4. 进阶篇:七层高级转发策略
- 5. 进阶篇:健康检查与会话保持深度解析
- 6. 高阶篇:跨可用区高可用与弹性伸缩
- 7. 运维篇:监控与成本优化
- 8. 常见问答
1. 核心架构概览:从单机困境到集群突围
在现代互联网应用架构中,单台服务器承载网站业务早已成为过去式。当流量激增、业务并发量攀升时,单服务器不仅面临性能瓶颈,更存在单点故障的巨大风险——一旦这台服务器宕机,整个网站便对外不可用。华为云弹性负载均衡(Elastic Load Balance,ELB)正是为了解决这一系列问题而生的核心云服务组件。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
ELB能够根据配置的流量分配策略,将来自客户端的访问请求分发至多台后端云服务器进行处理,同时通过健康检查机制自动屏蔽故障服务器,将流量无缝切换到正常运行的服务器上。通过这种架构设计,不仅解决了单点故障问题,更实现了业务流量的水平扩展——只需在业务增长时增加后端服务器的数量,即可线性提升整个网站集群的处理能力。
一个完整的ELB网站集群架构包含以下核心组件:负载均衡器作为流量入口,负责接收客户端请求;监听器负责监听特定协议和端口的请求;后端服务器组统一管理多台处理业务请求的ECS实例;健康检查实时监控后端服务器的健康状况。本文将带您从零开始,一步步搭建这套高可用的网站集群。
2. 基础篇:从零搭建Web集群
本小节围绕"准备底层基础设施→部署后端业务→创建负载均衡实体→验证流量分发"这条主线展开,拆解了配置ELB所需的核心预备步骤和实操方法。
2.1 规划网络架构:VPC与子网
在华为云上搭建网站集群的第一步是规划网络架构。虚拟私有云(VPC)是逻辑隔离的私有网络空间,而子网则是VPC内的IP地址段划分。创建VPC时,需要合理规划IP地址段,例如选择192.168.0.0/16作为整个VPC的IPv4网段,并在其中创建子网,如192.168.0.0/24。重要的设计原则是:ELB实例与后端ECS实例必须位于同一个VPC内,且建议位于同一可用区,这样可以确保内网通信的低延迟和高带宽。
2.2 创建后端服务器:ECS实例准备
接下来,在已创建的VPC中购买两台弹性云服务器(ECS)。以CentOS 7.6操作系统为例,在购买时需要选择与ELB计划部署位置相同的可用区,并为每台ECS绑定弹性公网IP(EIP)以便后续从外部访问进行验证。完成实例创建后,登录ECS并部署Nginx作为Web服务软件:
# 下载Nginx官方yum仓库安装包
wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装Nginx仓库
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装Nginx
yum -y install nginx
# 启动Nginx服务
systemctl start nginx
systemctl enable nginx为了让访问请求能够标识不同的后端服务器,可以分别修改两台ECS的默认HTML页面。通过vim /usr/share/nginx/html/index.html编辑文件内容,将ECS01的页面标题修改为"Welcome to ELB backend server one",将ECS02的页面标题修改为"Welcome to ELB backend server two"。这样后续通过ELB访问时,就能清楚地看到请求被分发到了哪台服务器。
安装完成后,使用curl http://localhost命令验证Nginx服务是否正常运行。如果看到返回的HTML页面内容,说明Web服务部署成功。同时,需要在ECS的安全组规则中放通TCP 80端口,允许来自ELB后端子网网段的流量访问。
3. 实战篇:深入ELB核心配置
3.1 创建负载均衡器
在管理控制台中选择"网络 > 弹性负载均衡",单击"购买弹性负载均衡"进入创建页面。在实例类型选择上,华为云提供两种类型:共享型和独享型。
- 共享型负载均衡:适合中小型业务场景,多个租户共享负载均衡集群资源,成本较低。
- 独享型负载均衡:适合对性能和隔离性有较高要求的企业级场景,提供专属的负载均衡实例资源,支持更高并发和更灵活的规格调整,还支持多可用区部署的高级特性。
对于网站集群场景,推荐选择独享型负载均衡,规格选择"应用型(HTTP/HTTPS)",以支持七层协议的请求处理和高级转发策略。在选择网络配置时,需要绑定此前创建的VPC和子网,并可以根据业务需求选择是否为负载均衡器绑定弹性公网IP——绑定EIP后,客户端可以通过公网IP直接访问ELB;不绑定EIP时,ELB仅提供内网负载均衡能力。
3.2 配置监听器
监听器是ELB接收和处理客户端请求的核心组件,负责监听特定协议和端口上的连接请求,并根据配置的流量分配策略将请求分发到后端服务器组。在已创建的负载均衡器中,单击"添加监听器"进行配置:
{
"前端协议": "HTTP",
"前端端口": "80",
"后端协议": "HTTP",
"后端端口": "80",
"分配策略类型": "加权轮询算法",
"会话保持": "开启",
"会话保持类型": "负载均衡器cookie",
"会话保持时间": "20分钟"
}监听器的前端协议和端口决定了客户端如何访问ELB,后端协议和端口则定义了ELB如何向后端服务器转发请求。前端协议和后端协议需要匹配——HTTP/HTTPS监听器的后端协议必须为HTTP。监听器支持两种主要类型:网络型(四层,基于TCP/UDP协议)和应用型(七层,基于HTTP/HTTPS协议)。对于网站集群业务,需要选择应用型监听器。
在配置监听器时,系统会要求关联一个后端服务器组。可以选择"新创建",在创建过程中完成后端服务器组的配置。
3.3 配置后端服务器组
后端服务器组是将多台具有相同业务属性的ECS实例组织在一起的逻辑单元,负载均衡的流量分配策略以后端服务器组为单位生效。在监听器配置过程中或独立创建后端服务器组时,需要配置以下核心参数:
{
"后端协议": "HTTP",
"分配策略类型": "ROUND_ROBIN",
"会话保持类型": "HTTP_COOKIE"
}华为云后端服务器组支持三种分配策略类型:
- 加权轮询算法(ROUND_ROBIN):根据后端服务器的权重,按顺序依次将请求分发给不同的服务器,权重越大被分配的概率越高。
- 加权最少连接算法(LEAST_CONNECTIONS):在最少连接数的基础上,根据服务器的不同处理能力分配权重,当前连接数越少且权重越大的服务器被分配的概率越高。
- 源IP算法(SOURCE_IP):对不同源IP的访问进行负载分发,同一源IP的请求始终被派发至特定的服务器。
创建完成后,将之前部署好的两台ECS实例添加到后端服务器组中,设置业务端口为80。添加后,需要等待一小段时间让健康检查生效,服务器状态会从"异常"变为"正常"。
完成以上配置后,通过浏览器访问负载均衡器的公网IP或域名,多次刷新页面,观察返回的内容是否在两台ECS的不同标识页面之间交替出现——如果成功交替,说明ELB已经正常工作,实现了流量的负载分发。
4. 进阶篇:七层高级转发策略
当您的网站集群需要承载多个业务应用,但共用同一个域名时,七层高级转发策略就显得尤为重要。华为云ELB支持基于域名、URL路径、HTTP请求头、查询字符串等多种维度的转发规则。一个典型的应用场景是:电商网站将/api路径下的请求转发给API服务器组,将/static路径下的请求转发给静态资源服务器组,其他请求转发给Web服务器组。
{
"转发策略1": {
"转发规则": {
"类型": "路径",
"匹配内容": "/api/*",
"匹配方式": "前缀匹配"
},
"转发动作": "转发至后端服务器组",
"目标服务器组": "group-api-servers"
},
"转发策略2": {
"转发规则": {
"类型": "路径",
"匹配内容": "/static/*",
"匹配方式": "前缀匹配"
},
"转发动作": "转发至后端服务器组",
"目标服务器组": "group-static-servers"
},
"转发策略3": {
"转发规则": {
"类型": "域名",
"匹配内容": "admin.example.com"
},
"转发动作": "转发至后端服务器组",
"目标服务器组": "group-admin-servers"
}
}在配置转发策略时,需要注意匹配优先级:精确匹配 > 前缀匹配 > 正则匹配,匹配类型相同时路径长度越长优先级越高。每个七层监听器创建后都有一个默认转发策略,当请求无法匹配任何用户配置的策略时,将按照默认转发策略进行处理。
除了基本的URL转发,华为云ELB还支持更丰富的转发动作,包括重定向至URL、返回固定响应、写入Header、删除Header等。例如,您可以通过配置重定向策略,将所有HTTP协议的访问请求自动重定向到HTTPS协议,确保数据传输的安全性。
5. 进阶篇:健康检查与会话保持深度解析
5.1 健康检查:自动故障容灾的基石
健康检查是ELB实现高可用架构的核心机制之一。负载均衡器会定期向后端服务器发送探测请求,通过检测服务器的响应状态来判断其是否可用。当健康检查发现某个后端服务器异常时,ELB会立即将该服务器从流量分发池中剔除,将后续请求全部转发到其他健康的服务器上;当异常服务器恢复健康后,ELB会自动将其重新加入服务池。
{
"健康检查配置": {
"协议": "HTTP",
"端口": "80",
"检查路径": "/health",
"检查间隔": "5秒",
"超时时间": "2秒",
"健康阈值": "3",
"不健康阈值": "3"
}
}健康检查的关键参数说明:检查路径建议设置为应用内专门用于健康检测的接口(如/health),该接口应快速返回状态码200,避免配置复杂的业务逻辑;健康阈值表示连续检测成功多少次后判定服务器为健康状态,不健康阈值表示连续检测失败多少次后判定服务器为不可用。
5.2 会话保持:解决登录态丢失问题
在分布式系统中,会话保持是一个必须解决的问题。如果负载均衡不加干预地将同一用户的连续请求分发到不同的后端服务器,后端服务器上存储的会话信息(如登录状态、购物车内容)就会丢失,导致用户体验异常。会话保持机制解决了这一难题——将属于同一个会话的请求持续分发到同一台后端服务器进行处理。
华为云ELB支持三种会话保持类型:
- 源IP地址:将请求的源IP地址作为散列键,同一IP地址的访问请求始终转发到同一台后端服务器。这种方式实现简单,但经过NAT网关或代理的客户端会被识别为同一个源IP,可能导致负载不均衡。
- 负载均衡器cookie:客户端第一次发送请求时,负载均衡器自动生成一个cookie并插入响应中,后续所有包含该cookie的请求都会被ELB转发到同一台后端服务器。这种方式最常用,不受客户端网络环境影响。
- 应用程序cookie:依赖于后端应用自身生成的cookie值进行会话保持,适用于已有自定义会话管理机制的应用。
需要注意的是,会话保持功能仅在分配策略类型选择"加权轮询算法"或"加权最少连接"时才可配置。如果业务流量来自云专线或VPN等场景,建议使用源IP负载均衡算法代替会话保持功能。
在代码层面,也可以通过华为云ELB的Python SDK来创建和配置会话保持策略:
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkelb.v2.region.elb_region import ElbRegion
from huaweicloudsdkelb.v2 import *
# 创建认证对象
credentials = BasicCredentials(ak, sk)
# 创建ELB客户端
client = ElbClient.new_builder() \
.with_credentials(credentials) \
.with_region(ElbRegion.CN_NORTH_4) \
.build()
# 创建带会话保持的后端服务器组
create_pool_request = CreatePoolRequest()
body = CreatePoolReq(
pool=CreatePoolReqPool(
name="web-server-group",
protocol="HTTP",
lb_algorithm="ROUND_ROBIN",
listener_id="listener-xxx",
session_persistence=SessionPersistence(
type="HTTP_COOKIE",
persistence_timeout=20
)
)
)
create_pool_request.body = body
response = client.create_pool(create_pool_request)6. 高阶篇:跨可用区高可用与弹性伸缩
6.1 跨可用区高可用部署
对于核心业务系统,单可用区部署存在可用区级别故障导致业务全中断的风险。华为云独享型负载均衡支持多可用区部署模式,选择的每个可用区都会创建相应的负载均衡实例,不同可用区的实例间采用双活或多活模式协同工作。
在跨AZ高可用架构中,最佳实践是将后端ECS服务器分布在两个或多个可用区中,同时配置ELB将客户端请求跨可用区分发。当某个可用区发生网络故障或机房断电等不可抗力事件时,ELB会自动将所有流量切换到其他可用区的正常服务器上,实现业务的实时容灾。这种架构设计尤其适用于银行业务、警务系统、大型电商平台等高可靠性场景。
实现跨AZ高可用的配置要点如下:
- 在创建负载均衡器时,选择"多可用区"部署,勾选两个或以上的可用区
- 在后端服务器组中添加分布在不同可用区的ECS实例
- ELB会自动将客户端请求就近分配到同可用区的实例以减少网络延迟
- 当某可用区实例全部不可用时,流量自动切换到其他可用区
6.2 与弹性伸缩AS集成
对于流量呈现潮汐效应的业务场景(如电商平台的促销活动),将ELB与弹性伸缩服务(AS)结合使用是最佳的架构选择。弹性伸缩能够根据预设的策略自动增加或减少服务器实例的数量,而AS与ELB集成后,新加入的实例会自动注册到负载均衡器的后端服务器组中,被移除的实例也会自动解绑。
配置ELB与AS集成的步骤如下:
{
"伸缩策略配置": {
"告警规则": {
"指标": "CPU使用率",
"上限": ">70%",
"扩容动作": "增加1台ECS",
"下限": "<30%",
"缩容动作": "减少1台ECS"
},
"集成配置": {
"伸缩组VPC": "与ELB相同VPC",
"ELB监听器": "绑定至目标监听器",
"镜像": "使用已配置好网站环境的自定义镜像"
}
}
}这个组合方案的巨大价值在于:
- 业务增长时自动扩容,保证服务质量
- 业务下降时自动缩容,节约云资源成本
- 新实例自动注册到ELB,无需人工干预
- AS与ELB必须在同一VPC内才能正常工作
在"双11"、"618"等大型促销活动中,访问量可能在几分钟内暴增数倍,持续短短几天后迅速回落。传统方式下必须手动提前购置大量服务器,促销结束后又面临资源闲置的巨大浪费。而ELB+AS的架构让您可以按实际负载动态调整资源规模,实现IT成本的最大化节省。
7. 运维篇:监控与成本优化
7.1 ELB监控与告警配置
生产环境的ELB需要配置完善的监控和告警体系。华为云ELB提供丰富的监控指标,包括:活跃连接数、新建连接数、流入流出流量、请求速率、响应延迟、后端服务器健康检查状态等。
建议配置的告警规则:
{
"ELB告警规则": [
{"指标": "并发连接数", "阈值": "规格上限的80%", "级别": "严重"},
{"指标": "请求平均延迟", "阈值": ">1000ms", "级别": "警告"},
{"指标": "后端异常服务器数", "阈值": ">0", "级别": "严重"},
{"指标": "流入流量带宽", "阈值": "规格上限的80%", "级别": "重要"}
]
}7.2 成本优化建议
在成本控制方面,以下几点值得关注:
- 根据业务流量规模选择合适的规格,避免规格过大导致资源浪费或规格过小引发性能瓶颈
- 针对非敏感业务,可以使用共享型负载均衡替代独享型以降低成本
- 将AS弹性伸缩与ELB结合,实现资源按需分配,避免闲置资源浪费
- 利用ELB的访问日志功能分析流量特征,为规格调整提供数据依据
- 合理规划VPC和子网,确保ELB与后端服务器在相同可用区内通信,避免跨可用区流量费用
8. 常见问答
问:ELB的实例类型应该选择共享型还是独享型?
答:共享型适合中小型业务场景,成本较低,多个租户共享资源;独享型适合对性能和隔离性有高要求的企业级场景,支持更高的并发能力、更灵活的规格调整以及多可用区部署等高级特性。对于核心生产环境,建议优先选择独享型。
问:四层监听器和七层监听器有什么区别?
答:四层监听器基于TCP/UDP协议,转发过程仅修改报文中目标IP和源IP地址,转发效率高,适用于大流量高并发场景如文件传输、即时通信;七层监听器基于HTTP/HTTPS协议,支持基于域名、URL路径等请求内容的高级转发策略,适用于Web应用、API网关等场景。
问:如何解决ELB导致用户登录状态丢失的问题?
答:需要在后端服务器组的配置中开启会话保持功能。华为云ELB支持源IP地址、负载均衡器cookie和应用程序cookie三种会话保持类型,推荐使用负载均衡器cookie类型,它不依赖客户端网络环境,兼容性最好。
问:如何实现ELB的跨可用区容灾?
答:在创建负载均衡器时选择多可用区部署,并将后端ECS服务器部署在两个或以上的可用区中。配置完成后,ELB会跨可用区分发请求,当某个可用区发生故障时,ELB会自动将所有流量切换到其他可用区的正常服务器上。
问:ELB如何与弹性伸缩AS配合使用?
答:只需在创建弹性伸缩组时,指定关联的负载均衡器和监听器即可。伸缩组自动添加或移除ECS实例时,会同步完成ELB后端服务器的绑定或解绑操作。要求伸缩组和负载均衡器必须在同一个VPC内。
问:健康检查失败的可能原因有哪些?
答:常见原因包括:后端服务器未正常运行、后端服务器安全组未放通ELB后端子网网段、检查路径配置错误(返回非200状态码)、健康检查的超时时间或间隔时间设置不合理、后端服务器防火墙阻断了健康检查探测包。



