速卖通素材
奋斗

阿里云ECS搭建springboot微服务集群?

服务器

在阿里云 ECS 上搭建 Spring Boot 微服务集群是一个典型的云原生架构实践。为了构建高可用、易扩展且易于维护的集群,建议采用分层解耦的架构思路。

以下是完整的搭建指南,涵盖从基础设施规划到部署运维的全流程:


一、 架构设计(推荐标准微服务架构)

不要将所有服务直接部署在几台 ECS 上,而是利用阿里云托管服务来降低运维复杂度:

  1. 计算层:ECS 实例(或后续迁移至 ACK/Kubernetes)
  2. 注册中心/配置中心:Nacos / Eureka + Config
  3. 网关层:Spring Cloud Gateway / Nginx
  4. 数据存储:RDS MySQL / Redis / MongoDB
  5. 消息队列:RocketMQ / RabbitMQ(可选)
  6. 负载均衡: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 应用

  1. 在本地 IDE 中运行 mvn clean package,生成 .jar 包。
  2. 编写 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"]
  1. 构建镜像并推送到阿里云 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 注册中心

  1. 部署 Nacos(可独立 ECS 或 Docker 单节点)。
  2. 修改各微服务的 application.yml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: <NACOS_IP>:8848
      config:
        server-addr: <NACOS_IP>:8848
        file-extension: yaml
  1. 在 Nacos 控制台发布配置,实现动态刷新。

步骤 5:配置 SLB 负载均衡

  1. 在阿里云控制台创建 CLB(传统型负载均衡)ALB(应用型负载均衡)
  2. 添加监听器:HTTP 80 → 后端服务器组。
  3. 将两台 ECS 的内网 IP 加入服务器组,设置健康检查路径(如 /actuator/health)。
  4. 获取 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 实现自动化:

  1. 代码提交 → 触发流水线。
  2. Maven 构建 → 生成 Jar 包。
  3. Docker Build & Push → 推送到 ACR。
  4. SSH 远程执行调用 ECS API → 在新实例上拉取镜像并重启服务。
  5. 灰度发布:先更新一台,验证健康后,再批量更新其余节点。

六、 常见问题与最佳实践

问题 解决方案
服务间调用延迟高 确保 ECS 与 RDS/Redis/Nacos 在同一 VPC 内,使用内网地址。
数据库连接池耗尽 调整 HikariCP 最大连接数,避免每个 ECS 都建立大量直连 DB 连接。
配置不一致 使用 Nacos Config 统一管理配置,禁止本地 hardcode。
启动慢 启用 Spring Boot 懒加载或使用 GraalVM Native Image(需改造)。
安全加固 关闭不必要的端口;使用 RAM 子账号权限最小化;定期更新系统补丁。

七、 后续演进建议

当集群规模扩大后,建议逐步迁移至更高级的云平台能力:

  1. 容器化编排:使用 ACK(容器服务 Kubernetes 版) 替代手动 ECS 部署,实现自愈、滚动升级。
  2. 服务网格:引入 ASM(阿里云服务网格),将熔断、限流、链路追踪下沉到 Sidecar。
  3. Serverless:部分轻量级服务可迁移至 FC(函数计算),按量付费,零运维。

总结 checklist

  • [ ] VPC 网络互通
  • [ ] 安全组策略正确
  • [ ] RDS/Redis 内网连通性测试通过
  • [ ] Nacos 注册成功
  • [ ] SLB 健康检查通过
  • [ ] 日志采集正常
  • [ ] 监控告警已配置

如需具体某一步骤的详细命令或配置文件模板,请告知!

未经允许不得转载:轻量云Cloud » 阿里云ECS搭建springboot微服务集群?