如何在两台EC2服务器部署nodejs+reactjs Web应用实现负载均衡与自动扩缩容
双EC2部署Node.js+React应用实现负载均衡与自动扩缩容方案
1. 前置环境准备
- 两台EC2实例选择同一VPC同一可用区,安全组开放80/443端口出入站权限,放行实例间内网互通
- 两台实例统一初始化运行环境:安装
Node.js 16+、Nginx、pm2,分别完成前后端代码的部署与构建,确保双实例应用版本完全一致- React项目构建后的静态资源托管到Nginx静态目录,Nginx配置需添加
try_files $uri $uri/ /index.html;规则,避免前端路由刷新404问题 - Node.js后端服务使用
pm2做进程守护,配置开机自启,避免服务意外中断
- React项目构建后的静态资源托管到Nginx静态目录,Nginx配置需添加
注意:全程不涉及单台实例升配部署多份服务的操作,完全匹配客户不接受单台高配置的要求
2. 负载均衡配置
直接使用AWS原生应用型负载均衡器(ALB),无需自行搭建负载均衡服务,适配自动扩缩容效率更高:
- 在EC2控制台创建应用型负载均衡,监听HTTP/HTTPS端口,将两台EC2实例加入同一个目标组
- 配置目标组健康检查规则:每隔30秒访问前后端预设的健康检查接口,自动剔除异常实例,将流量全部转发到正常实例
- 业务域名直接解析到ALB的公网地址,所有用户请求经过ALB后均匀分发到两台EC2实例,实现负载均衡
3. 自动扩缩容配置
- 基于上述目标组创建EC2自动扩缩容组(Auto Scaling Group),设置最小实例数为2,最大实例数可根据业务峰值需求自定义,日常保持两台实例作为基准运行
- 配置扩缩容触发策略:选择基于流量/CPU使用率指标触发,例如单实例CPU使用率连续5分钟超过70%时自动新增1台实例承接流量,CPU使用率连续10分钟低于30%时自动缩减实例,始终保留不少于2台运行
- 提前配置EC2启动模板,将运行环境、应用代码、服务启动脚本全部预置到模板中,扩容时新实例可以自动完成服务启动并加入目标组,无需人工介入
4. 效果验证
- 模拟并发请求,查看ALB流量分发日志,确认两台实例的请求量分布均衡
- 手动中断其中一台实例的服务,验证ALB会自动切流到正常运行的实例,无服务不可用情况
- 模拟流量超过预设阈值,验证自动扩缩容规则触发,自动新增实例承接流量,流量回落后自动缩减到2台基准实例
内容的提问来源于stack exchange,提问作者Syed Abubakr
相关产品推荐
相关产品推荐

