从0到1搭建生产级Web集群:VPC+华为云ECS云服务器+SLB+弹性伸缩完整实践
1. 引言:为什么需要生产级Web集群
在现代互联网应用架构中,单台服务器承载业务早已成为过去式。当流量激增、业务并发量攀升时,单服务器不仅面临性能瓶颈,更存在单点故障的巨大风险——一旦这台服务器宕机,整个网站便对外不可用。生产级Web集群的核心目标是实现“数据与业务分离、弹性伸缩、负载均衡、可监控”的标准化部署架构。
华为云提供了一套完整的云服务组件来支撑这一目标:虚拟私有云VPC提供逻辑隔离的网络环境,弹性云服务器ECS承载业务应用,弹性负载均衡ELB实现流量分发与故障容错,弹性伸缩AS实现根据业务负载自动调整资源。本文将带您从零开始,一步步搭建这套高可用的生产级Web集群。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. 网络架构规划:VPC与子网设计
2.1 VPC核心概念
虚拟私有云VPC是华为云上逻辑隔离的私有网络空间,用户可以在其中自主配置和管理虚拟网络环境,包括IP地址段、路由表和网络访问控制策略等。VPC是整个Web集群的网络基石,所有云资源都必须部署在VPC内部才能实现内网互通。
2.2 IP网段规划
创建VPC时,合理规划IP地址段至关重要。建议选择192.168.0.0/16作为整个VPC的IPv4网段,该网段提供了65,536个可用IP地址,足以支撑生产级集群的长期扩展需求。在VPC内部,需要进一步划分子网,例如选择192.168.0.0/24作为业务子网,提供256个IP地址。
重要的设计原则是:ELB实例与后端ECS实例必须位于同一个VPC内,且建议位于同一可用区,这样可以确保内网通信的低延迟和高带宽。如果业务对可用性要求极高,可以考虑跨可用区部署,但需要确保ELB支持跨可用区转发。
2.3 创建VPC与子网
在华为云控制台中,进入“网络 > 虚拟私有云 VPC”服务,点击“创建虚拟私有云”。配置要点如下:
- 名称:建议按业务命名,如
vpc-web-prod - IPv4网段:
192.168.0.0/16 - 企业项目:根据组织规范选择,便于资源分账管理
- 子网名称:
subnet-web - 子网IPv4网段:
192.168.0.0/24,子网网段必须从VPC的IP网段中划分 - 关联路由表:使用默认路由表即可,默认路由表中已预置系统路由,确保同一个VPC内不同子网之间的网络互通
3. 安全组配置:第一道网络安全防线
3.1 安全组的作用
安全组是华为云提供的一种虚拟防火墙,作用于云服务器实例的虚拟网卡级别。安全组默认拒绝所有来自外部的请求,如果您在云服务器上搭建了可供外部访问的网站,则需要在安全组入方向添加对应的规则,放通对应的端口。
3.2 Web集群安全组规则设计
对于生产级Web集群,建议创建专用的安全组并配置以下入方向规则:
- HTTP(80端口):放通来源
0.0.0.0/0,允许公网HTTP访问 - HTTPS(443端口):放通来源
0.0.0.0/0,允许公网HTTPS访问 - SSH(22端口):放通来源为运维管理IP段,仅允许受信任的IP进行远程管理
- ELB健康检查:放通ELB后端子网所属网段
100.125.0.0/16,确保ELB健康检查能够正常到达后端服务器
出方向规则通常保持默认全部放通,允许服务器主动访问外部资源(如软件源、API服务等)。
4. ECS云服务器部署与Web服务搭建
4.1 ECS选型与创建
弹性云服务器ECS是承载Web业务的核心计算资源。在生产环境中,建议至少创建两台ECS实例构成后端服务器池,以实现高可用。创建ECS时的关键配置如下:
- 名称:
web-server-01、web-server-02 - 网络:选择已创建的VPC(
vpc-web-prod)和子网(subnet-web) - 镜像:推荐使用CentOS 7.6或Ubuntu 20.04等主流Linux发行版
- 规格:根据业务预期负载选择,入门生产环境建议
s7n.xlarge.2(4vCPU 8GB内存) - 弹性公网IP:创建时同步购买EIP,用于后续SSH登录和初始配置
- 安全组:选择上一步创建的安全组
- 登录方式:推荐使用密钥对登录,安全性更高
4.2 部署Nginx Web服务
以CentOS 7.6为例,在两台ECS上分别部署Nginx:
# 下载Nginx安装包
wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 建立Nginx的yum仓库
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装Nginx
yum -y install nginx
# 启动Nginx并设置开机自启
systemctl start nginx
systemctl enable nginx
# 验证Nginx版本
nginx -v安装完成后,编辑默认首页文件以区分不同服务器的访问:
# 在web-server-01上
vim /usr/share/nginx/html/index.html
# 修改为:Welcome to Web Server 01
# 在web-server-02上
vim /usr/share/nginx/html/index.html
# 修改为:Welcome to Web Server 02通过浏览器访问两台ECS的公网IP,应能分别看到对应的欢迎页面,验证Web服务部署成功。
5. 弹性负载均衡ELB:流量分发与高可用
5.1 ELB架构概述
弹性负载均衡ELB能够根据配置的流量分配策略,将来自客户端的访问请求分发至多台后端云服务器进行处理,同时通过健康检查机制自动屏蔽故障服务器,将流量无缝切换到正常运行的服务器上。一个完整的ELB集群架构包含以下核心组件:
- 负载均衡器:作为流量入口,负责接收客户端请求
- 监听器:负责监听特定协议(HTTP/HTTPS/TCP)和端口的请求
- 后端服务器组:统一管理多台处理业务请求的ECS实例
- 健康检查:实时监控后端服务器的健康状况
5.2 创建ELB实例
在华为云控制台中,进入“网络 > 弹性负载均衡 ELB”服务,点击“创建负载均衡器”。配置要点:
- 区域:与ECS保持同一区域
- 实例类型:生产环境推荐独享型实例,适用于大流量高并发的业务场景
- 网络:选择已创建的VPC和子网
- 弹性公网IP:绑定一个EIP作为集群的公网访问入口
- 规格:根据预期QPS选择,可按需调整
5.3 配置监听器与后端服务器组
创建ELB实例后,需要配置监听器:
监听器配置:
- 名称:listener-http
- 协议:HTTP
- 端口:80
- 分配策略类型:加权轮询算法
- 会话保持:开启(根据业务需求)后端服务器组配置:
- 名称:
backend-web - 后端协议:HTTP
- 后端端口:80
- 添加后端服务器:将两台ECS实例添加到后端服务器组中
5.4 健康检查配置
健康检查是ELB实现高可用的关键机制。配置建议:
- 协议:HTTP
- 检查路径:
/(或指定健康检查接口如/health) - 检查间隔:5秒
- 超时时间:3秒
- 最大重试次数:3次
- 正常状态码:200
健康检查的原理是:ELB定期向后端服务器发送HTTP请求,如果连续多次收到非200响应或超时,则将该服务器标记为异常,不再分发流量;当服务器恢复健康后,自动重新加入分发池。
5.5 验证负载均衡
完成配置后,通过ELB的公网IP或域名访问Web服务,多次刷新应能看到请求被轮流分发到两台不同的后端服务器(显示不同的欢迎页面)。如果停止其中一台ECS的Nginx服务,ELB的健康检查应能检测到异常并自动将流量全部切换到健康的服务器上。
6. 弹性伸缩AS:自动扩缩容
6.1 弹性伸缩的价值
弹性伸缩AS能够实现应用系统自动按需调整资源,在业务增长时自动增加服务器实例的数量以满足突增的业务需求,在业务下降时自动缩减服务器数量以节约成本。将ELB与弹性伸缩组关联后,弹性伸缩在添加和移除云服务器时,会自动在ELB后端服务器组中同步添加或移除对应的服务器。
6.2 准备工作:制作自定义镜像
弹性伸缩新增的ECS实例需要自动具备Web服务能力,因此需要先制作一个包含完整Web环境的自定义镜像。操作步骤:
- 在一台已部署好Nginx和Web应用的ECS上,停止不必要的服务
- 在华为云控制台进入“计算 > 镜像服务”,选择“创建私有镜像”
- 选择“系统盘镜像”,指定源服务器为该ECS
- 等待镜像创建完成,命名为
web-server-image
6.3 创建伸缩配置
伸缩配置定义了伸缩组内待添加的云服务器的规格数据,包括vCPU、内存、镜像、磁盘和云服务器类型等参数。创建步骤:
- 名称:
as-config-web - 配置模板:使用已有云服务器规格为模板
- 镜像:选择上一步创建的私有镜像
web-server-image - 规格:与现有ECS规格保持一致
- 磁盘:系统盘建议40GB以上
- 安全组:选择Web集群安全组
- 登录方式:与现有ECS使用相同的密钥对
6.4 创建伸缩组
伸缩组是云服务器进行伸缩的基本单位。创建配置:
- 名称:
as-group-web - 伸缩配置:选择
as-config-web - VPC:选择
vpc-web-prod - 子网:选择
subnet-web - 负载均衡:选择已创建的ELB实例和后端服务器组
- 最小实例数:2(保证至少2台服务器支撑业务)
- 最大实例数:10(根据业务峰值设定上限)
- 期望实例数:2(初始实例数量)
6.5 配置伸缩策略
伸缩策略是触发伸缩活动的规则。推荐配置两条基于CPU使用率的告警策略:
- 扩容策略:当CPU使用率最大值大于70%时,增加1个实例
- 缩容策略:当CPU使用率最小值小于30%时,减少1个实例
监控周期建议设置为5分钟,避免因瞬时波动导致频繁伸缩。除了CPU使用率,弹性伸缩还支持基于内存使用率、网络流入/流出速率、磁盘读写速率等多种指标进行监控告警。
对于可预见的业务高峰(如大促活动),还可以配置定时策略,在指定时间点自动扩容。
7. 进阶配置:会话保持与跨可用区
7.1 会话保持配置
会话保持的目的是将同一个用户的访问请求分发到相同的后端服务器进行处理。对于需要保持用户状态的应用(如购物车、登录状态等),必须开启会话保持。ELB支持两种会话保持类型:
- 源IP地址:根据客户端IP地址进行哈希分配,同一IP的请求始终发往同一后端服务器
- 负载均衡器cookie:ELB在响应中插入cookie,后续请求携带该cookie即可路由到同一服务器
在ELB后端服务器组的编辑页面中可以开启或关闭会话保持功能。
7.2 跨可用区高可用部署
为了进一步提高可用性,可以将ECS实例部署在不同的可用区(Availability Zone)。当一个可用区发生故障时,其他可用区的服务器仍然可以继续提供服务。跨可用区部署时需要注意:
- ELB实例需要支持跨可用区转发
- 各可用区的ECS实例配置保持一致
- 伸缩组需要配置多可用区策略
8. 监控与告警
8.1 核心监控指标
生产环境必须建立完善的监控体系。华为云云监控服务CES可以采集以下核心指标:
- ECS维度:CPU使用率、内存使用率、磁盘使用率、磁盘读写速率、网络流入/流出速率
- ELB维度:活跃连接数、新建连接数、流入/流出流量、请求数、异常后端服务器数
- AS维度:伸缩组实例数、伸缩活动状态
8.2 告警规则配置
建议配置以下告警规则:
- CPU使用率连续5分钟超过80% → 发送告警通知
- ELB异常后端服务器数大于0 → 发送告警通知
- 磁盘使用率超过85% → 发送告警通知
9. 自动化运维:Python SDK调用示例
华为云提供了完整的Python SDK,支持通过代码管理云资源。以下示例展示如何使用Python SDK查询ECS实例列表:
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkecs.v2 import EcsClient, ListServersDetailsRequest
from huaweicloudsdkecs.v2.region.ecs_region import EcsRegion
# 初始化认证凭证
credentials = BasicCredentials(ak, sk, project_id)
# 创建ECS客户端
client = EcsClient.new_builder() \
.with_credentials(credentials) \
.with_region(EcsRegion.value_of("cn-south-1")) \
.build()
# 查询ECS实例列表
request = ListServersDetailsRequest(limit=100)
response = client.list_servers_details(request)
for server in response.servers:
print(f"实例名称: {server.name}, 状态: {server.status}")安装SDK的命令:
pip install huaweicloudsdkcore
pip install huaweicloudsdkecs10. 成本优化建议
生产级Web集群的成本主要来自ECS实例费用、ELB实例费用、公网流量费用和EIP带宽费用。优化建议:
- 合理选择实例规格:避免过度配置,根据实际负载选择适当的规格
- 利用弹性伸缩:在低峰期自动缩容,高峰期自动扩容,按需付费
- 使用包年包月:对于稳定的基础实例(如最小实例数),使用包年包月计费可大幅降低成本
- 监控公网流量:防止异常流量导致费用激增
常见问答
问1:ELB实例和ECS必须在同一个VPC吗?
答:是的,ELB实例与后端ECS实例必须属于同一个VPC。如果不在同一VPC中,可以通过开启IP类型后端功能跨VPC添加服务器。
问2:弹性伸缩新增的ECS实例会自动部署Web应用吗?
答:会的,前提是伸缩配置中使用的镜像是已经部署好Web应用的自定义镜像。AS新增的ECS实例会基于该镜像创建,自动具备完整的Web服务能力。
问3:如何验证ELB的健康检查是否正常工作?
答:可以在后端服务器上临时停止Nginx服务(systemctl stop nginx),然后观察ELB控制台中该服务器的健康检查状态是否变为“异常”。恢复服务后,状态应自动变为“正常”。
问4:会话保持开启后,所有请求都会发到同一台服务器吗?
答:不是所有请求,而是同一个客户端的请求会被保持到同一台服务器。不同客户端的请求仍然会根据分配策略分发到不同的后端服务器,实现负载均衡。
问5:弹性伸缩的告警策略中,监控周期设置多少比较合适?
答:建议设置为5分钟。周期太短容易因瞬时波动导致频繁伸缩,周期太长则响应不及时。5分钟是一个平衡了响应速度和稳定性的常用值。
问6:生产环境中,ELB应该选择共享型还是独享型?
答:生产环境推荐独享型实例。独享型ELB提供稳定的性能保障,适用于大流量高并发的业务场景,支持更丰富的功能特性(如跨可用区、高级转发策略等)。共享型更适合测试环境或低负载场景。



