在阿里云上部署高可用的 Web 服务器,需遵循「多可用区 + 负载均衡 + 弹性伸缩 + 健康检查 + 自动容灾」的核心原则。以下是经过生产验证的完整部署方案(以主流架构:ECS + SLB + Auto Scaling + RDS + OSS + CDN 为例):
✅ 一、整体高可用架构设计(推荐)
用户请求
↓
[阿里云CDN](静态资源提速,缓解源站压力)
↓
[公网SLB(应用型ALB/传统SLB)] ←→ 多可用区监听(支持HTTP/HTTPS)
↓(健康检查自动剔除异常节点)
[多可用区 ECS 实例集群](至少2个可用区,如 cn-hangzhou-a & cn-hangzhou-g)
├─ Web服务(Nginx/Apache + 应用容器)
├─ 会话管理 → 使用阿里云 [ApsaraDB for Redis(集群版)] 或 [Session Store for ALB]
└─ 数据库 → [ApsaraDB RDS(MySQL/PostgreSQL 高可用版)](主备自动切换+跨可用区部署)
↓
[对象存储 OSS](存放图片、视频、日志归档等静态资源,与Web解耦)
↓
[日志服务 SLS](统一采集Nginx/应用日志,支持告警与审计)
✅ 关键高可用指标:
- 服务可用性 ≥ 99.95%(多可用区部署)
- 故障自动恢复时间 < 30秒(SLB健康检查间隔+RDS主备切换)
- 流量突发可弹性扩容(Auto Scaling响应<2分钟)
✅ 二、分步部署实操(以 CentOS 7 + Nginx + PHP + RDS MySQL 为例)
🔹 步骤1:创建多可用区VPC与安全组
# 推荐操作(控制台或Terraform):
- VPC:专有网络(如 172.16.0.0/16)
- 交换机:在至少2个可用区各创建1个(如杭州可用区A/G),网段互不重叠(172.16.1.0/24, 172.16.2.0/24)
- 安全组:开放 80/443(Web)、22(运维)、3306(仅内网RDS访问)、6379(Redis内网)
🔹 步骤2:部署高可用RDS数据库
- 创建 RDS MySQL 高可用版(本地SSD)
- 选择 多可用区部署(主节点在A区,备节点在G区)
- 开启 自动备份 + 日志备份 + SQL审计
- 设置白名单为
172.16.0.0/16(允许VPC内所有ECS访问) - ✅ 避免单点:绝不使用自建MySQL主从(运维复杂、故障恢复慢)
🔹 步骤3:配置负载均衡 SLB(推荐 Application Load Balancer – ALB)
| 配置项 | 推荐值 |
|---|---|
| 实例类型 | 应用型ALB(支持七层路由、WAF集成、gRPC) |
| 地域/可用区 | 与ECS同地域,自动跨可用区挂载后端 |
| 监听协议 | HTTP:80 → 重定向至 HTTPS;HTTPS:443(上传SSL证书) |
| 健康检查 | HTTP GET /health.php(返回200),超时3s,失败阈值3次,间隔5s |
| 后端服务器组 | 添加2个可用区的ECS实例(权重均设为100) |
💡 提示:ALB支持 会话保持(Cookie插入) 和 WAF联动,比传统SLB更适配现代Web。
🔹 步骤4:部署ECS集群(自动伸缩 + 镜像标准化)
- 镜像选择:使用阿里云 公共镜像(CentOS 7.9/Alibaba Cloud Linux 3) 或自定义含Web环境的自定义镜像(预装Nginx+PHP+OpenSSL+阿里云CLI)
- 实例配置:
- 实例规格:ecs.c7.large(计算优化,按需/抢占式实例组合降低成本)
- 系统盘:ESSD云盘(PL1以上,保障IOPS)
- 多可用区部署:手动启动2台ECS(A区1台、G区1台),或直接使用下一步的伸缩组
- 自动化初始化(推荐UserData脚本):
#!/bin/bash yum update -y yum install -y nginx php-fpm php-mysqlnd systemctl enable nginx php-fpm # 从OSS拉取网站代码(安全可靠) yum install -y ossutil ossutil cp oss://my-web-bucket/app/ /usr/share/nginx/html/ --update # 配置Nginx连接RDS(通过内网地址) sed -i "s/host=.*;/host=rds-xxxxxx.mysql.rds.aliyuncs.com;/" /var/www/html/config.php systemctl start nginx php-fpm
🔹 步骤5:启用弹性伸缩(Auto Scaling)
- 创建伸缩组:
- 最小实例数:2(保障跨AZ冗余)
- 最大实例数:10(根据压测设定)
- 期望实例数:2
- 多可用区:勾选A/G区交换机
- 伸缩配置:关联上述自定义镜像 + UserData脚本
- 伸缩规则:
- 告警触发:CPU使用率 > 70% 持续5分钟 → 增加1台
- 定时规则:电商大促前扩容(如每天19:00增2台)
- ✅ 优势:故障实例自动移除并新建,无需人工干预
🔹 步骤6:增强高可用能力(关键补充)
| 组件 | 配置建议 |
|---|---|
| 会话保持 | ✅ ALB开启Cookie会话保持;或统一存入 Redis集群版(避免单点+支持读写分离) |
| 静态资源 | 所有CSS/JS/IMG上传OSS,通过CDN提速;Nginx配置反向X_XOSS(proxy_pass https://bucket.oss-cn-hangzhou.aliyuncs.com) |
| HTTPS安全 | 在ALB上传免费SSL证书(阿里云提供),强制HTTP→HTTPS跳转,启用HSTS、TLS1.2+ |
| 监控告警 | 通过云监控设置: – SLB 5xx错误率 > 1% → 通知钉钉群 – RDS CPU > 85% → 自动重启(或升级规格) – ECS磁盘使用率 > 90% → 触发清理脚本 |
| 灾备方案 | 每日RDS快照 + Binlog同步至异地(如北京)RDS;OSS开启跨区域复制(CRR) |
✅ 三、验证高可用性(必做!)
-
主动故障演练:
- 手动停止1台ECS的nginx:观察SLB健康检查是否在30s内将其剔除,流量100%切到另一台;
- 手动释放1台ECS:验证Auto Scaling是否在2分钟内新建并加入SLB;
- 主动重启RDS主实例:验证应用是否在15~30s内自动连接新主库(需代码中配置重连机制)。
-
压测验证:
- 使用PTS(阿里云性能测试服务)模拟1万并发,观察:
- SLB QPS是否平稳、无5xx;
- ECS CPU是否触发扩容;
- RDS连接数/延迟是否正常。
- 使用PTS(阿里云性能测试服务)模拟1万并发,观察:
✅ 四、进阶优化建议
- 🚀 极致性能:启用ALB的QUIC协议 + HTTP/3,降低首屏加载时间;
- 🔐 安全加固:ALB集成Web应用防火墙(WAF),拦截SQL注入/XSS;ECS启用云安全中心;
- 📦 DevOps化:使用 ROS(资源编排)或Terraform 管理整套基础设施,实现“Infrastructure as Code”;
- 🌐 全球化部署:如需海外用户访问,使用 全球提速GA + 海外地域ECS集群,实现就近接入。
⚠️ 常见避坑指南
| 错误做法 | 正确方案 |
|---|---|
| 单可用区部署所有资源 | ✅ 必须跨至少2个可用区(如杭州A+G、北京C+F) |
| Web服务器直连公网IP | ✅ 全部走SLB,禁止ECS绑定EIP |
| Session存本地文件/内存 | ✅ 统一存Redis集群版(开启持久化+多副本) |
| RDS白名单设为0.0.0.0/0 | ✅ 仅放行VPC网段,必要时加安全组二次限制 |
| 未配置健康检查路径 | ✅ /health.php 返回简单JSON + DB连通性检测 |
如需我为你生成:
- ✅ 完整 Terraform 脚本(一键部署VPC+SLB+ECS+RDS)
- ✅ Nginx+PHP+Redis+RDS 的Docker Compose模板(适用于ACK容器化部署)
- ✅ 基于SLB+ACM的动态配置中心方案
- ✅ 故障自愈Shell脚本(自动重启服务/切换主库)
欢迎随时告诉我你的具体场景(如:WordPress、Spring Boot、Node.js、日均PV量级),我可为你定制化输出!
✅ 总结一句话:阿里云高可用Web = 多AZ ECS + ALB智能分发 + RDS高可用版 + OSS/CDN卸载静态 + Auto Scaling弹性兜底 + 全链路监控告警。
坚持这个架构,轻松支撑百万级日活,且运维成本可控。
云知识CLOUD