在腾讯云轻量应用服务器(Lighthouse)上搭建 Java 分布式服务集群,需要结合云原生特性、容器化部署和分布式协调机制。以下是经过验证的完整实施路径,兼顾成本效益与生产可靠性:
一、前期规划
-
架构设计
- 节点数量:建议至少 3 台轻量服务器(避免脑裂,满足多数中间件最小集群要求)
- 角色划分:
- 2 台作为应用节点(运行 Spring Cloud/Dubbo 微服务)
- 1 台作为独立协调节点(部署 ZooKeeper/Etcd + Nginx 负载均衡)
- 网络拓扑:创建私有 VPC,配置安全组规则(仅开放必要端口如 80/443/8080)
-
选型建议 组件 推荐方案 理由 注册中心 Nacos(腾讯云官方支持) 轻量、内置配置中心、兼容 Spring Cloud 负载均衡 轻量服务器自带 Nginx 或 SLB 低成本,SLB 更稳定但需额外费用 容器编排 Docker Compose / K8s (K3s) 轻量场景推荐 Compose;高可用选 K3s 监控日志 Prometheus + Grafana + Loki 开源免费,适配轻量环境
二、基础环境准备(以 Ubuntu 22.04 为例)
# 1. 更新系统 & 安装依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y openjdk-17-jdk docker.io docker-compose git curl wget
# 2. 验证环境
java -version
docker --version
docker compose version
# 3. 配置防火墙(仅开放必要端口)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp
sudo ufw allow 9848/tcp # Nacos gRPC
sudo ufw enable
💡 提示:若使用多个实例,需在每台服务器生成唯一
server-id(如/etc/hostname修改为node-01,node-02…)
三、核心组件部署示例(Nacos 集群模式)
步骤 1:准备 Nacos 配置文件
在每台服务器创建目录并编写 application.properties:
# node-01.example.com
spring.profiles.active=cluster
cluster.conf=/home/nacos/conf/cluster.conf
nacos.server.port=8848
nacos.naming.distro.pushTask.maxRetryTimes=10
生成 cluster.conf(三节点示例):
192.168.1.10:8848
192.168.1.11:8848
192.168.1.12:8848
步骤 2:Docker Compose 部署 Nacos
创建 docker-compose.yml:
version: '3'
services:
nacos-node-1:
image: nacos/nacos-server:v2.2.3
container_name: nacos-1
environment:
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=192.168.1.10
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=nacos
- MYSQL_SERVICE_PASSWORD=nacos@2024
- NACOS_SERVER_PORT=8848
volumes:
- ./data/logs:/home/nacos/logs
- ./conf:/home/nacos/conf
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
networks:
- cluster-net
networks:
cluster-net:
driver: bridge
⚠️ 注意:生产环境必须使用 MySQL 持久化存储(可租用腾讯云 RDS),避免单机模式!
启动命令:
docker compose up -d
重复上述步骤在另外两台服务器部署 nacos-node-2、nacos-node-3,确保 cluster.conf 中 IP 正确指向所有节点。
四、Java 微服务集群部署
1. 打包服务
mvn clean package -Pprod -DskipTests
# 生成 target/my-service.jar
2. 创建统一启动脚本 start-cluster.sh
#!/bin/bash
APP_NAME="my-service"
SERVER_ID=$1 # 传入 node-01/node-02
echo "Starting $APP_NAME on $SERVER_ID..."
docker run -d
--name ${APP_NAME}-${SERVER_ID}
--network cluster-net
-e SPRING_PROFILES_ACTIVE=prod
-e SPRING_CLOUD_NACOS_DISCOVERY_SERVERS=http://192.168.1.10:8848,http://192.168.1.11:8848,http://192.168.1.12:8848
-e SPRING_CLOUD_NACOS_CONFIG_SERVERS=http://192.168.1.10:8848
-p 80${SERVER_ID#node-}:8080:8080
my-service:${VERSION}
java -Xms512m -Xmx1g -jar /app/${APP_NAME}.jar
执行:
chmod +x start-cluster.sh
./start-cluster.sh node-01
./start-cluster.sh node-02
五、高可用与运维增强
| 能力 | 实现方式 |
|---|---|
| 自动扩缩容 | 配合腾讯云 CCM(Cloud Controller Manager)+ HPA(需升级为 TKE) |
| 健康检查 | Nacos 内置心跳检测 + Docker --health-cmd 配置 |
| 日志聚合 | 安装 Filebeat → 推送至 Elasticsearch(或直接用 Loki) |
| 备份恢复 | 每日定时备份 Nacos 数据目录 + MySQL 全量快照(使用 mysqldump) |
| 灰度发布 | 利用 Nacos 标签路由功能 + 自定义网关规则 |
六、成本优化建议
- ✅ 优先选用 按量付费 实例,非业务高峰期自动释放
- ✅ 开启 弹性伸缩策略(当 CPU > 70% 持续 5 分钟时扩容)
- ✅ 使用 镜像提速:将本地 Docker 镜像推送到腾讯云镜像仓库(TCR)
- ✅ 关闭不必要的监控指标(如默认采集所有 JVM 线程)
七、验证清单
# 1. 检查 Nacos 集群状态
curl http://192.168.1.10:8848/nacos/v1/console/cluster/state
# 2. 验证服务注册
curl http://localhost:8081/actuator/health
# 3. 测试负载均衡
for i in {1..10}; do curl -s http://<公网IP>:8081/api/test; done
# 应看到请求均匀分发到不同节点
如需进一步定制(如集成 Sentinel 限流、SkyWalking 链路追踪、CI/CD 流水线),我可提供详细配置模板。是否需要我为您生成一份完整的 Terraform 自动化部署脚本?
CLOUD技术笔记