奋斗
努力

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

云计算

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

以下是完整的搭建指南,涵盖架构设计、基础设施配置、应用部署和运维监控。


一、整体架构设计(推荐)

不要将所有服务都部署在一台机器上。建议采用以下分层架构:

[客户端] --> [SLB 负载均衡] --> [ECS 集群 (Web层/API网关)] 
                                      |
                                      v
                              [内部网络通信]
                                      |
                                      v
                  [ECS 集群 (业务微服务: User, Order, Product...)]
                                      |
                                      v
                      [RDS MySQL / Redis / RocketMQ / Nacos/Eureka]

核心组件说明:

  1. SLB (Server Load Balancer):流量入口,分发请求到后端 ECS。
  2. Nacos/Eureka:服务注册与发现中心(Spring Cloud Alibaba 推荐 Nacos)。
  3. RDS MySQL:关系型数据库(主从复制,高可用)。
  4. Redis:缓存中间件。
  5. RocketMQ/Kafka:消息队列(解耦、削峰填谷)。
  6. ECS 集群:运行各个微服务实例,通过自动伸缩组(ASG)实现弹性扩容。

二、前期准备

1. 购买阿里云资源

资源类型 推荐规格/数量 说明
VPC 网络 1个 确保所有资源在同一 VPC 内,使用私网通信,安全高效
SLB 1个 公网 IP,监听 80/443 端口
ECS 服务器 至少 3~5 台 根据微服务数量分配,建议同地域同可用区
RDS MySQL 1个高可用版 主备架构,自动故障切换
Redis 1个集群版或标准版 用于缓存和会话共享
Nacos 独立 ECS 或容器化部署 建议单独一台高性能 ECS

✅ 关键建议:所有 ECS 实例必须加入同一个 VPC 和 交换机,以便通过内网 IP 互相访问。


三、环境搭建步骤

步骤 1:配置网络与安全组

  1. 创建 VPC 和交换机

    • 登录阿里云控制台 → VPC → 创建专有网络。
    • 创建交换机(建议至少两个可用区,实现多可用区容灾)。
  2. 配置安全组规则

    • SLB 安全组:开放 80、443 端口给公网。
    • ECS 安全组:
      • 仅允许来自 SLB 的内网 IP 访问业务端口(如 8080)。
      • 允许 SSH(22)从你的办公 IP 访问。
      • 微服务之间如需直连(如 Feign),需放行相应端口。
    • Nacos/DB 安全组:仅允许应用 ECS 内网 IP 访问,禁止公网暴露!

步骤 2:部署中间件

1. 安装 Nacos(服务注册中心)

  • 在独立 ECS 上安装 Nacos Server。
  • 修改 application.properties,设置数据库连接指向 RDS MySQL(持久化配置)。
  • 启动 Nacos,默认端口 8848。
  • 配置开机自启。

2. 配置 RDS MySQL

  • 创建数据库和用户,授权给应用 ECS 内网 IP 访问。
  • 开启白名单,添加所有应用 ECS 的内网 IP。

3. 配置 Redis

  • 创建 Redis 实例,获取内网地址和端口。
  • 设置密码,配置白名单。

步骤 3:打包 Spring Boot 应用

每个微服务项目需进行标准化打包:

  1. Docker 化(强烈推荐)

    FROM openjdk:17-jdk-slim
    COPY target/*.jar app.jar
    ENTRYPOINT ["java", "-jar", "/app.jar"]

    构建镜像并推送到 阿里云容器镜像服务(ACR)。

  2. 配置外部化参数

    • 使用 application.yml 中的占位符,或通过环境变量注入。
    • 示例:
      spring:
      cloud:
       nacos:
         discovery:
           server-addr: ${NACOS_ADDR}  # 内网IP:8848
         config:
           server-addr: ${NACOS_ADDR}
      datasource:
       url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/db_name?useSSL=false
       username: ${MYSQL_USER}
       password: ${MYSQL_PASSWORD}

步骤 4:部署微服务到 ECS 集群

有两种方式:

方式 A:手动部署(适合小型项目)

  1. 在每台 ECS 上安装 Docker 和 JDK。
  2. 拉取镜像并启动容器:
    docker run -d 
     --name user-service 
     -e NACOS_ADDR=192.168.1.100:8848 
     -e MYSQL_HOST=rds-xxx.mysql.rds.aliyuncs.com 
     -p 8081:8081 
     myregistry/user-service:v1
  3. 将多个实例注册到 Nacos。

方式 B:使用 ACK(Kubernetes)+ ASG(自动化运维)

  1. 创建 容器服务 ACK 集群。
  2. 使用 Helm 或 Kustomize 部署微服务 YAML。
  3. 配置 HPA(水平Pod自动伸缩),根据 CPU/内存自动扩缩容。
  4. 结合 SLB Ingress Controller 暴露服务。

💡 对于初学者,建议先用方式 A + SLB 反向X_X;进阶后迁移至 ACK。


步骤 5:配置 SLB 负载均衡

  1. 创建 SLB 实例(TCP 模式或 HTTP 模式)。
  2. 添加后端服务器组,选中所有运行微服务的 ECS 实例。
  3. 配置健康检查:
    • 路径:/actuator/health(Spring Boot Actuator 端点)
    • 协议:HTTP/TCP
    • 超时时间:3秒
  4. 绑定公网 IP,用户通过 http://<slb-ip>/api/user/... 访问。

四、高可用与弹性扩展

1. 多可用区部署

  • 将 ECS 实例分散在不同可用区(如 Zone A 和 Zone B)。
  • SLB 支持跨可用区调度,单可用区故障不影响整体服务。

2. 使用弹性伸缩组(Auto Scaling)

  • 创建伸缩组,关联 SLB 后端服务器。
  • 设置最小实例数(如 2)、最大实例数(如 10)。
  • 配置告警策略:当 CPU > 70% 持续 5 分钟,自动增加实例。

3. 数据备份与恢复

  • RDS 开启自动备份(保留 7~30 天)。
  • Redis 启用持久化(AOF + RDB)。
  • 定期快照 ECS 系统盘。

五、监控与日志

1. 应用监控

  • 集成 Spring Boot Admin 或 Micrometer + Prometheus + Grafana。
  • 监控指标:QPS、响应时间、错误率、JVM 内存。

2. 链路追踪

  • 使用 Sleuth + Zipkin 或 SkyWalking,追踪跨服务调用链。

3. 日志收集

  • 使用 Filebeat 采集 ECS 上的日志文件。
  • 发送到 SLS(日志服务),便于检索和分析。

六、常见问题与最佳实践

问题 解决方案
服务间调用延迟高 确保所有服务在同一 VPC 内,使用内网 IP 通信
Nacos 单点故障 部署 Nacos 集群(至少 3 节点),使用 MySQL 持久化配置
数据库连接池耗尽 调整 HikariCP 配置,增加最大连接数,使用连接池监控
启动速度慢 使用懒加载、异步初始化、优化依赖树
配置管理混乱 使用 Nacos Config 统一管理各环境配置(dev/test/prod)

七、总结:快速启动清单

  1. ✅ 创建 VPC + 交换机(多可用区)
  2. ✅ 购买 RDS MySQL、Redis、Nacos(独立 ECS)
  3. ✅ 配置安全组,限制公网访问
  4. ✅ 打包 Spring Boot 应用为 Docker 镜像
  5. ✅ 在多台 ECS 上部署服务实例,注册到 Nacos
  6. ✅ 创建 SLB,绑定后端 ECS,配置健康检查
  7. ✅ 接入 SLS 日志、Prometheus 监控
  8. ✅ (可选)配置 Auto Scaling 实现弹性扩容

如果你希望进一步简化运维,可以考虑直接使用 阿里云函数计算 FC 或 Serverless 应用引擎 SAE,它们能自动处理服务器管理、负载均衡和弹性伸缩,更适合云原生微服务架构。

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