从零搭建高可用 Web 架构:华为云 ECS + VPC + ELB 实战指南

举报
yd_231613284 发表于 2026/11/07 14:55:20 2026/11/07
【摘要】 从零搭建高可用 Web 架构:华为云 ECS + VPC + ELB 实战指南本文以一个真实场景为线索:你有一个面向公网的 Web 应用,需要做到高可用、可扩展、安全可控。我们将用华为云的 VPC、ECS、ELB 三大核心服务,一步步把这套架构搭起来,并讲清楚每一步为什么这么做。 一、先想清楚架构,再动手很多人一上来就开 ECS、装 Nginx,跑通了就完事。但真正上生产环境,至少要回答三...

从零搭建高可用 Web 架构:华为云 ECS + VPC + ELB 实战指南

本文以一个真实场景为线索:你有一个面向公网的 Web 应用,需要做到高可用、可扩展、安全可控。我们将用华为云的 VPC、ECS、ELB 三大核心服务,一步步把这套架构搭起来,并讲清楚每一步为什么这么做。


一、先想清楚架构,再动手

很多人一上来就开 ECS、装 Nginx,跑通了就完事。但真正上生产环境,至少要回答三个问题:

  1. 单点故障怎么办? —— 一台 ECS 挂了,用户还能不能访问?
  2. 流量突增怎么办? —— 大促时 QPS 翻 5 倍,一台机器扛得住吗?
  3. 安全边界在哪里? —— 数据库能不能被公网直接访问?

答案分别对应三个华为云服务:

问题 解决方案 华为云服务
单点故障 多台 ECS + 负载均衡分发流量 ELB(弹性负载均衡)
流量突增 弹性伸缩自动增减 ECS 实例 AS(弹性伸缩)
安全边界 VPC 隔离 + 安全组精细管控 VPC(虚拟私有云)

最终我们要搭的架构长这样:

                        ┌──────────────┐
                        │   公网用户    │
                        └──────┬───────┘
                               │
                        ┌──────▼───────┐
                        │  EIP + ELB   │  ← 公网入口,负载均衡
                        └──────┬───────┘
                               │
              ┌────────────────┼────────────────┐
              │                │                │
       ┌──────▼──────┐  ┌──────▼──────┐  ┌──────▼──────┐
       │  ECS-1      │  │  ECS-2      │  │  ECS-N      │  ← 后端服务器组
       │  Nginx+App  │  │  Nginx+App  │  │  Nginx+App  │
       └──────┬──────┘  └──────┬──────┘  └──────┬──────┘
              │                │                │
              └────────────────┼────────────────┘
                               │
                        ┌──────▼───────┐
                        │  后端数据库   │  ← 私有子网,不对公网暴露
                        │  (RDS/自建)   │
                        └──────────────┘

二、第一步:用 VPC 划定网络边界

2.1 为什么不能跳过 VPC?

VPC(虚拟私有云)是你在华为云上的私有网络空间。它逻辑上隔离于其他租户,你可以完全掌控 IP 段、子网、路由表、安全组。

如果不建 VPC,ECS 会默认进入一个共享网络——这在生产环境是不可接受的。就好比你租了办公室,但走廊是公用的,谁都能推门进来。

2.2 创建 VPC 和子网

操作路径:控制台 → 虚拟私有云 VPC → 创建虚拟私有云

关键参数建议:

参数 建议值 说明
VPC 网段 192.168.0.0/16 给自己留 65534 个 IP,够用
子网1(公网子网) 192.168.0.0/24 放 ELB 和需要 EIP 的 ECS
子网2(私网子网) 192.168.1.0/24 放数据库,不挂 EIP

为什么分两个子网? 这是一个安全最佳实践:公网子网放需要对外提供服务的资源(ELB、带 EIP 的 ECS),私网子网放数据库等不应被公网直接访问的资源。子网之间通过路由表天然互通,但安全组可以进一步限制。

2.3 配置安全组

安全组是实例级别的虚拟防火墙,每个 ECS 至少关联一个安全组。

建议创建两个安全组:

sg-web(Web 服务器安全组):

方向 协议 端口 源地址 说明
入方向 TCP 80 0.0.0.0/0 HTTP 流量
入方向 TCP 443 0.0.0.0/0 HTTPS 流量
入方向 TCP 22 你的办公IP/32 SSH 管理,不要开 0.0.0.0/0
出方向 全部 全部 0.0.0.0/0 允许出站

sg-db(数据库安全组):

方向 协议 端口 源地址 说明
入方向 TCP 3306 sg-web 只允许 Web 安全组访问 MySQL
出方向 全部 全部 0.0.0.0/0 —

常见错误:把数据库安全组的入方向源地址填成 0.0.0.0/0,等于数据库裸奔在公网上。正确做法是源地址引用 sg-web,这样只有 Web 服务器能连数据库,且安全组变更会自动生效。


三、第二步:创建 ECS 后端服务器

3.1 选规格(Flavor)

华为云 ECS 规格命名规则是 代际.规格.CPU内存比,比如 s6.large.2:

  • s6:第六代通用计算型
  • large:2 vCPU
  • 2:CPU:内存 = 1:2,即 4GB 内存

对于中等流量的 Web 应用,建议:

场景 推荐规格 vCPU 内存 参考价格(月包年)
测试环境 s6.small.1 1 1GB 约 ¥30+/月
小型生产 s6.large.2 2 4GB 约 ¥100+/月
中型生产 s6.xlarge.2 4 8GB 约 ¥200+/月
计算密集型 c6.xlarge.2 4 8GB 更高主频,适合 API 服务

3.2 选镜像

  • 公共镜像:华为云官方维护的 CentOS / Ubuntu / EulerOS,开箱即用
  • 私有镜像:基于已有 ECS 制作,包含你的预装软件,适合批量创建
  • 共享镜像:其他账号共享给你的镜像

实战建议:先用公共镜像创建一台,装好 Nginx + 应用,然后用这台 ECS 制作私有镜像。后续通过弹性伸缩自动扩容时,新实例直接用私有镜像启动,秒级就绪,不用再装一遍软件。

3.3 创建至少两台 ECS

高可用的最低要求是 2 台 ECS 分布在不同可用区(AZ)。

华为云每个区域有多个可用区(如 cn-north-4 有 AZ1~AZ3),可用区之间物理隔离。一台放 AZ1,一台放 AZ2,某个 AZ 故障时另一个不受影响。

创建时注意:

  1. 网络:选择前面创建的 VPC 和公网子网
  2. 安全组:选择 sg-web
  3. 弹性公网 IP:后端 ECS 不需要各自挂 EIP,流量统一走 ELB 的 EIP。这样既省钱,又减少攻击面
  4. 系统盘:建议 40GB+,高 IO 场景选 SSD
  5. 登录方式:推荐密钥对,比密码安全

四、第三步:用 ELB 统一入口

4.1 ELB 的两个版本

华为云 ELB 有两种:

  • 共享型:多个租户共享底层资源,便宜,适合测试/小流量
  • 独享型:独享底层资源,性能更高,有固定 IP,适合生产环境

生产环境建议直接上独享型,避免"邻居噪音"问题。

4.2 创建负载均衡器

操作路径:控制台 → 弹性负载均衡 ELB → 创建负载均衡器

关键配置:

参数 设置 说明
类型 独享型 生产环境
网络类型 公网 需要对外访问
VPC 选你的 VPC —
子网 公网子网 ELB 要在公网子网才能接外网流量
弹性公网 IP 新建 这是用户访问的入口 IP

4.3 配置监听器

监听器定义了 ELB 在哪个端口接流量、用什么协议。

HTTP 监听器(端口 80):

参数 设置
前端协议 HTTP
前端端口 80
后端协议 HTTP
后端端口 80
负载均衡算法 加权轮询
健康检查 开启,检查路径 /health,间隔 5s,阈值 3

HTTPS 监听器(端口 443):

参数 设置
前端协议 HTTPS
前端端口 443
SSL 证书 上传你的域名证书
后端协议 HTTP
后端端口 80

为什么 443 后端用 HTTP 而不是 HTTPS? 这是常见的 SSL 卸载模式:ELB 负责加解密,后端 ECS 只处理 HTTP。这样后端不用配证书,CPU 开销也更低。如果后端到 ELB 这段网络也需要加密(合规要求),再开后端 HTTPS。

4.4 添加后端服务器组

把前面创建的两台 ECS 加入后端服务器组,权重都设为 50(均匀分发)。

健康检查是关键:ELB 会定期请求你配置的检查路径(如 /health),只有返回 200 的实例才会收到流量。这样某台 ECS 上的应用挂了,ELB 会自动把流量切到健康的实例,用户无感知。


五、第四步(进阶):接入弹性伸缩 AS

手动加机器是反模式——你不可能半夜爬起来加 ECS。弹性伸缩(AS)能根据流量自动增减实例。

5.1 创建伸缩配置

伸缩配置定义了"新加的 ECS 长什么样":

  • 镜像:用你的私有镜像(已预装 Nginx + 应用)
  • 规格:和现有 ECS 一致
  • 网络:同一个 VPC + 公网子网
  • 安全组:sg-web

5.2 创建伸缩组

参数 设置
伸缩配置 上一步创建的
负载均衡 关联你的 ELB 后端服务器组
期望实例数 2(最少保持 2 台)
最小实例数 2
最大实例数 10(防止失控烧钱)

5.3 配置伸缩策略

告警触发策略(推荐):

  • CPU 利用率 > 70% 持续 5 分钟 → 加 1 台
  • CPU 利用率 < 30% 持续 10 分钟 → 减 1 台

这样流量高峰自动扩容,低谷自动缩容,既扛得住流量,又不浪费钱。

注意:缩容时 AS 会随机选一台实例删除。如果你的实例上有本地缓存或会话数据,缩容会丢失。解决方案:用 Redis 做分布式缓存,让实例无状态化。


六、安全清单:上线前逐条过一遍

# 检查项 为什么重要
1 数据库安全组入方向没有 0.0.0.0/0 防止数据库被公网扫描爆破
2 SSH 端口 22 只允许你的运维 IP 防止暴力破解
3 ECS 不挂 EIP,流量统一走 ELB 减少攻击面,便于审计
4 HTTPS 监听器已配置有效证书 防中间人劫持,浏览器不报红
5 ELB 健康检查已开启且路径有效 故障实例自动摘除
6 伸缩组最大实例数有上限 防止 bug 导致无限扩容烧钱
7 关键操作开启了操作日志(CTS) 出事能追溯
8 数据库有定期备份策略 灾难恢复的最后一道防线

七、成本估算参考

以 cn-north-4(北京四)为例,一套最小高可用架构的月成本:

资源 规格 数量 月费(估)
ECS s6.large.2 2 ~¥200
ELB 独享型小型 1 ~¥200
EIP 5Mbps 1 ~¥25
EVS 系统盘 40GB 通用型 SSD 2 ~¥40
VPC/子网/安全组 — — 免费
合计 ~¥465/月

这是粗略估算,实际价格以控制台询价为准。包年会有明显折扣。


八、总结

回顾一下我们做了什么:

  1. VPC 划定了网络边界,公网子网和私网子网分离
  2. 安全组 精确控制了谁能访问谁,数据库不裸奔
  3. 两台 ECS 跨可用区部署,消除单点故障
  4. ELB 统一公网入口,健康检查自动摘除故障实例
  5. AS 按需自动扩缩容,扛得住流量波动

这套架构不是最复杂的,但覆盖了高可用最核心的三个维度:冗余、分发、弹性。对于大多数中小型 Web 应用,这个配置已经足够上生产了。

后续如果需要进一步演进,可以考虑:

  • 数据库层:从自建 MySQL 迁移到 RDS,获得自动备份、主备切换、读写分离
  • 缓存层:加入 DCS Redis,减轻数据库压力
  • CDN:静态资源走 CDN 加速,回源到 OBS 桶
  • 容器化:应用打包成镜像,用 CCE(云容器引擎)替代 ECS + AS,获得更细粒度的弹性

每一步演进都解决一个具体的瓶颈,不要一上来就全用上——过度架构和不架构一样危险。


本文基于华为云 2024 年控制台界面编写,产品功能可能随版本更新有变化,请以实际控制台为准。如有疑问,欢迎留言讨论。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。