在阿里云上构建高可用(High Availability, HA)Web 服务器,核心逻辑在于消除单点故障并实现自动流量分发。这不仅仅是配置几台 ECS 实例那么简单,而是需要结合阿里云的一系列云原生产品形成架构闭环。
以下是一套经过生产环境验证的、符合国内合规要求且具备企业级高可用能力的部署方案。我们将采用“动静分离 + 负载均衡 + 弹性伸缩”的经典架构。
一、 核心架构设计
高可用的本质是冗余和自动化。我们需要确保即使某一台服务器宕机、某个可用区(AZ)断电,服务依然正常对外提供。
- 计算层:使用多台 ECS 实例部署 Web 应用,分布在不同的可用区(Zone)。
- 接入层:使用 ALB(Application Load Balancer)或 SLB(Server Load Balancer)作为入口,进行健康检查和流量分发。
- 存储层:使用 OSS(对象存储)存放静态资源(图片、CSS、JS),使用云数据库 RDS 或 PolarDB 存放业务数据。
- 安全与提速:前置 CDN 提速静态内容,前置 WAF 防护恶意攻击。
- 自动化运维:使用 ECS 实例集(Instance Group)配合弹性伸缩(ESS),实现故障自动替换和容量自动扩容。
二、 详细实施步骤
1. 网络与安全基础准备
- VPC 规划:创建一个专有网络(VPC),划分至少两个子网(Subnet),分别对应可用区 A 和 可用区 B。这是高可用的物理基础,确保服务器不在同一物理机房。
- 安全组策略:
- Web 服务器安全组仅开放
80/443端口给负载均衡器的安全组 ID 访问,而不是直接对公网开放。 - 数据库安全组仅允许 Web 服务器所在的安全组 ID 访问
3306/5432等端口。 - 原则:最小权限原则,严禁直接暴露 SSH/RDP 端口到公网。
- Web 服务器安全组仅开放
2. 部署 Web 应用镜像(标准化)
不要手动一台台安装软件。推荐使用 自定义镜像 或 容器镜像 方式。
- 方法 A:自定义镜像(推荐传统架构)
- 创建一台 ECS 实例,安装 Nginx/Apache、PHP/Java/Python 运行时、代码包。
- 测试无误后,停止该实例,制作“标准镜像”。
- 后续所有新实例都基于此镜像创建,保证环境一致性。
- 方法 B:容器化(推荐现代架构)
- 将应用打包为 Docker 镜像,推送到阿里云容器镜像服务(ACR)。
- 使用 ACK(容器服务 Kubernetes 版)或 ECS+Docker 部署,天然支持多副本和高可用。
3. 配置负载均衡(ALB/SLB)
负载均衡是高可用的关键组件,它负责将流量分发给健康的后端服务器。
- 创建负载均衡实例:选择应用型负载均衡(ALB)或传统型负载均衡(SLB)。建议设置为跨可用区部署(如果地域支持)。
- 监听器配置:
- 协议:HTTP/HTTPS。
- 如果使用 HTTPS,需在阿里云 SSL 证书管理服务中申请免费或付费证书,并绑定到监听器。
- 后端服务器组:
- 将之前创建的 Web 服务器实例加入后端服务器组。
- 关键步骤:健康检查。配置 HTTP 健康检查路径(如
/health或/ping)。只有返回 2xx/3xx 状态的服务器才会接收真实流量。如果某台 ECS 宕机,SLB 会在秒级内将其剔除。
4. 实现真正的“高可用”:弹性伸缩(ESS)
仅靠手动添加多台 ECS 还不够,因为当一台机器坏了,你需要人工去修复或重启,这期间会有中断。要实现无人值守的高可用,必须引入弹性伸缩。
- 创建伸缩组:
- 关联上述的负载均衡后端服务器组。
- 设置最小实例数(Min=2)、最大实例数(Max=10)、期望实例数(Desired=2)。
- 指定启动配置:使用第 2 步制作的“标准镜像”或容器镜像。
- 启用健康检查:
- 开启 ECS 实例健康检查。当阿里云检测到某台 ECS 系统状态异常(如内核崩溃、硬件故障),会自动触发实例替换:终止故障实例,并在新可用区自动启动一台新的健康实例加入负载均衡。
- 结果:你不再关心具体是哪台机器在运行,系统永远维持 N 台健康实例在线。
5. 数据持久化与解耦
Web 服务器本身不应存储重要数据,否则服务器重启或替换会导致数据丢失。
- 静态资源:将所有图片、视频、JS/CSS 文件上传至 OSS。在 Nginx 配置中,通过反向X_X或直接引用 OSS URL 来提供这些资源。
- 动态数据:使用 RDS MySQL 或 PolarDB。Web 服务器通过内网连接数据库,避免公网风险,并利用 RDS 的主备自动切换机制保证数据库高可用。
- 会话管理(Session):如果应用依赖 Session,不要存在本地内存中。使用 Redis(Tair) 集群版存储 Session,这样任何一台 Web 服务器都能读取用户的登录状态。
6. 域名解析与 CDN
- DNS 解析:在阿里云云解析 DNS 中,将域名 CNAME 指向你的负载均衡地址。
- CDN 提速:开通 CDN 服务,源站指向 OSS 或负载均衡。CDN 节点全球分布,既能提速用户访问,又能隐藏源站 IP,增强安全性。
三、 架构总结图(文字描述)
用户请求
↓
[CDN] (缓存静态内容,提速)
↓
[WAF] (Web 应用防火墙,防 SQL 注入/XSS)
↓
[ALB/SLB] (负载均衡,健康检查,跨可用区)
↓
[ECS 实例池 / ACK 集群] (由 ESS 弹性伸缩管理,自动替换故障节点)
├── 连接 [RDS/PolarDB] (数据库,主备高可用)
├── 连接 [Redis/Tair] (缓存,集群高可用)
└── 读取/写入 [OSS] (对象存储,多副本冗余)
四、 常见误区与注意事项
- 不要只在同一个可用区部署多台 ECS:如果可用区 A 停电,整个站点瘫痪。务必跨可用区部署。
- 健康检查路径要真实:很多开发者只配了 TCP 80 端口检查,但应用可能假死(进程在但无响应)。务必配置 HTTP 路径检查,返回特定成功码。
- 冷却时间(Cooldown):在弹性伸缩中合理设置冷却时间,避免因短暂波动导致频繁启停实例,造成成本浪费和系统震荡。
- 备份策略:高可用不等于容灾。定期使用 EBS 快照备份系统盘和数据盘,防止误删除或勒索病毒。
- 监控告警:配置云监控(CloudMonitor),对 CPU、内存、带宽、SLB 连接数设置阈值告警,通过短信/钉钉通知,做到事前发现而非事后补救。
五、 成本优化建议
- 对于非高峰时段,可通过弹性伸缩降低最小实例数。
- 使用抢占式实例(Spot Instance)部署无状态的计算节点(需配合 ESS 使用,注意数据不存本地),成本可降低 90% 以上。
- 利用 OSS 生命周期规则,自动将冷数据归档到低频访问存储,节省存储费用。
通过以上架构,你可以在阿里云上构建一个具备自我修复能力、高性能、高安全的 Web 服务系统。这套方案适用于绝大多数中小型至大型互联网应用,且完全符合国内云计算最佳实践规范。
CLOUD云枢