在阿里云 ECS 上搭建 Spring Boot 微服务集群是一个典型的云原生架构实践。为了构建高可用、易扩展且易于维护的集群,建议采用分层解耦的架构思路。
以下是完整的搭建指南,涵盖从基础设施规划到部署运维的全流程:
一、 架构设计(推荐标准微服务架构)
不要将所有服务直接部署在几台 ECS 上,而是利用阿里云托管服务来降低运维复杂度:
- 计算层:ECS 实例(或后续迁移至 ACK/Kubernetes)
- 注册中心/配置中心:Nacos / Eureka + Config
- 网关层:Spring Cloud Gateway / Nginx
- 数据存储:RDS MySQL / Redis / MongoDB
- 消息队列:RocketMQ / RabbitMQ(可选)
- 负载均衡:SLB (Server Load Balancer)
核心原则:ECS 仅作为无状态的应用服务器,所有有状态数据(DB、Cache、Session)均使用阿里云托管服务。
二、 前期准备
1. 购买资源
- ECS 实例:至少 2 台(用于高可用),建议选择相同地域和可用区。
- 示例:
ecs.g6.large(2C4G),CentOS 7.9 或 Ubuntu 20.04。
- 示例:
- SLB 负载均衡器:用于将流量分发到后端 ECS。
- RDS MySQL:主备版,用于持久化数据。
- Redis:缓存与会话存储。
- Nacos Server:可单独买一台小配置 ECS 或容器化部署作为注册中心。
2. 网络规划
- 确保所有 ECS 处于同一 VPC(专有网络) 内。
- 开启安全组规则:
- ECS 安全组:开放应用端口(如 8080, 8081)。
- SLB 安全组:开放 HTTP/HTTPS 端口(80, 443)。
- RDS/Redis 安全组:仅允许 ECS 所在网段访问。
三、 环境搭建步骤
步骤 1:基础环境安装(在所有 ECS 上执行)
# 以 CentOS 为例
# 1. 安装 Java JDK (推荐 JDK 11 或 17)
sudo yum install java-11-openjdk-devel -y
# 2. 安装 Docker (推荐方式,便于管理)
sudo yum install docker-ce -y
sudo systemctl start docker
sudo systemctl enable docker
# 3. 安装 Docker Compose (可选,用于本地编排)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
步骤 2:打包 Spring Boot 应用
- 在本地 IDE 中运行
mvn clean package,生成.jar包。 - 编写
Dockerfile:
FROM openjdk:11-jre-slim
LABEL maintainer="yourname"
# 创建目录
RUN mkdir -p /app
WORKDIR /app
# 复制 jar 包
COPY target/your-service.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
-
构建镜像并推送到阿里云 ACR(容器镜像服务):
# 登录 ACR docker login --username=xxx registry.cn-hangzhou.aliyuncs.com # 打标签 docker tag your-service:v1 registry.cn-hangzhou.aliyuncs.com/your-namespace/your-service:v1 # 推送 docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/your-service:v1
步骤 3:部署微服务到 ECS
方案 A:使用 Docker 部署(推荐)
在每个 ECS 上拉取镜像并启动服务:
# 登录 ECS
ssh root@<ECS_IP>
# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/your-namespace/your-service:v1
# 启动容器,连接内网 RDS 和 Redis
docker run -d
--name my-service
--restart=always
-p 8080:8080
-e SPRING_DATASOURCE_URL=jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/db?useSSL=false
-e SPRING_REDIS_HOST=redis-xxx.redis.rds.aliyuncs.com
-e NACOS_SERVER_ADDR=nacos-server-ip:8848
registry.cn-hangzhou.aliyuncs.com/your-namespace/your-service:v1
⚠️ 注意:数据库密码建议使用阿里云 KMS 或环境变量注入,避免硬编码。
方案 B:直接使用 JAR 部署(简单场景)
# 上传 jar 包到 ECS
scp your-service.jar root@<ECS_IP>:/opt/app/
# 后台启动
nohup java -jar /opt/app/your-service.jar --spring.profiles.active=prod > /var/log/service.log 2>&1 &
步骤 4:配置 Nacos 注册中心
- 部署 Nacos(可独立 ECS 或 Docker 单节点)。
- 修改各微服务的
application.yml:
spring:
cloud:
nacos:
discovery:
server-addr: <NACOS_IP>:8848
config:
server-addr: <NACOS_IP>:8848
file-extension: yaml
- 在 Nacos 控制台发布配置,实现动态刷新。
步骤 5:配置 SLB 负载均衡
- 在阿里云控制台创建 CLB(传统型负载均衡) 或 ALB(应用型负载均衡)。
- 添加监听器:HTTP 80 → 后端服务器组。
- 将两台 ECS 的内网 IP 加入服务器组,设置健康检查路径(如
/actuator/health)。 - 获取 SLB 公网 IP,绑定域名。
四、 高可用与弹性扩展优化
1. 多可用区部署
- 将 ECS 分布在不同的 可用区(Availability Zone),避免单点故障。
- SLB 支持跨可用区调度。
2. 自动伸缩(Auto Scaling)
- 使用阿里云 ESS(弹性伸缩) 服务。
- 设置策略:当 CPU 使用率 > 70% 持续 5 分钟,自动增加 ECS 实例;低于 30% 则减少。
- 结合 SLB 自动注册新实例。
3. 日志集中管理
- 在每台 ECS 上安装 Logtail 客户端。
- 将应用日志(stdout/stderr 或文件)采集到 SLS(日志服务)。
- 实现统一查询、告警和分析。
4. 监控告警
- 启用阿里云 云监控。
- 对 JVM 内存、GC、CPU、QPS 设置阈值告警(短信/钉钉通知)。
五、 CI/CD 自动化部署(进阶)
手动 SSH 部署不适合生产环境。建议使用 GitLab CI / Jenkins + Docker 实现自动化:
- 代码提交 → 触发流水线。
- Maven 构建 → 生成 Jar 包。
- Docker Build & Push → 推送到 ACR。
- SSH 远程执行 或 调用 ECS API → 在新实例上拉取镜像并重启服务。
- 灰度发布:先更新一台,验证健康后,再批量更新其余节点。
六、 常见问题与最佳实践
| 问题 | 解决方案 |
|---|---|
| 服务间调用延迟高 | 确保 ECS 与 RDS/Redis/Nacos 在同一 VPC 内,使用内网地址。 |
| 数据库连接池耗尽 | 调整 HikariCP 最大连接数,避免每个 ECS 都建立大量直连 DB 连接。 |
| 配置不一致 | 使用 Nacos Config 统一管理配置,禁止本地 hardcode。 |
| 启动慢 | 启用 Spring Boot 懒加载或使用 GraalVM Native Image(需改造)。 |
| 安全加固 | 关闭不必要的端口;使用 RAM 子账号权限最小化;定期更新系统补丁。 |
七、 后续演进建议
当集群规模扩大后,建议逐步迁移至更高级的云平台能力:
- 容器化编排:使用 ACK(容器服务 Kubernetes 版) 替代手动 ECS 部署,实现自愈、滚动升级。
- 服务网格:引入 ASM(阿里云服务网格),将熔断、限流、链路追踪下沉到 Sidecar。
- Serverless:部分轻量级服务可迁移至 FC(函数计算),按量付费,零运维。
✅ 总结 checklist:
- [ ] VPC 网络互通
- [ ] 安全组策略正确
- [ ] RDS/Redis 内网连通性测试通过
- [ ] Nacos 注册成功
- [ ] SLB 健康检查通过
- [ ] 日志采集正常
- [ ] 监控告警已配置
如需具体某一步骤的详细命令或配置文件模板,请告知!
轻量云Cloud