微服务架构拆分服务器部署:微服务架构拆分后如何部署到多台服务
为什么拆分了微服务还需要单独部署?
微服务架构把单体应用拆成多个独立服务(比如用户服务、订单服务、支付服务),每个服务可以独立开发、测试和上线。
但拆分后,这些服务必须部署到不同的服务器(或容器)上才能发挥优势——否则一台机器扛不住所有服务的压力,也失去了独立扩缩容的能力。
本文就手把手教你如何把拆分后的微服务部署到多台服务器上。
前置准备:你需要的东西
- 至少两台云服务器(推荐 2核4G 以上,系统 CentOS 7.9 或 Ubuntu 20.04)
- 一台用于 Nginx 反向代理 + 注册中心(可选,小型项目可合并)
- 一台用于部署业务微服务(数量按服务数增加)
- 已拆分好的微服务代码(以 Spring Boot 项目为例)
- 域名(可选,建议先用公网IP测试)
在正式开始前,请先在每台服务器上执行以下基础环境安装:
# 更新系统包
sudo yum update -y # CentOS
sudo apt update && sudo apt upgrade -y # Ubuntu
# 安装 Docker(推荐用容器隔离服务)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable docker && sudo systemctl start docker
# 安装 JDK 11(非 Docker 方式部署需要)
sudo yum install java-11-openjdk -y # CentOS
分步操作:把微服务部署到不同服务器
1. 打包并上传微服务 JAR 包
在每个 Spring Boot 微服务项目根目录执行:
mvn clean package -DskipTests
target 目录下生成 xxx.jar,用 scp 上传到对应目标服务器:
scp target/user-service.jar root@192.168.1.101:/opt/app/
scp target/order-service.jar root@192.168.1.102:/opt/app/
2. 在每台服务器上启动服务(以 Docker 为例)
进入服务器,创建 Dockerfile:
FROM openjdk:11-jre-slim
WORKDIR /app
COPY user-service.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
构建并启动:
docker build -t user-service .
docker run -d --name user-service -p 8080:8080 user-service
注意:如果多个服务部署在不同服务器,端口可以相同(例如 8080),因为 IP 不同。
如果部署在同一台服务器,必须改端口。
3. 配置注册中心与发现(以 Nacos 为例)
在注册中心服务器(例如 192.168.1.100)上启动 Nacos:
docker run -d --name nacos -p 8848:8848 nacos/nacos-server
在每个微服务的 application.yml 中配置注册地址:
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.1.100:8848
重启服务,打开 http://192.168.1.100:8848/nacos 可以看到所有服务实例已注册。
4. 用 Nginx 做统一入口和负载均衡
在网关服务器(比如 192.168.1.200)安装 Nginx:
sudo yum install nginx -y # CentOS
编辑 /etc/nginx/conf.d/microservices.conf:
upstream user_servers {
server 192.168.1.101:8080;
}
upstream order_servers {
server 192.168.1.102:8080;
}
server {
listen 80;
server_name api.example.com;
location /user/ {
proxy_pass http://user_servers/;
proxy_set_header Host $host;
}
location /order/ {
proxy_pass http://order_servers/;
proxy_set_header Host $host;
}
}
测试并重载:
sudo nginx -t
sudo systemctl reload nginx
高频问题解答与避坑指南
问题1:跨服务调用失败(Feign/OpenFeign 报错)
排查步骤:
- 检查各微服务是否成功注册到 Nacos(看 Nacos 控制台)
- 检查 服务名是否拼写正确(区分大小写)
- 检查防火墙是否放行端口:
systemctl stop firewalld(测试用) - 在服务提供者的服务器上用
curl http://localhost:8080/actuator/health确认服务正常
问题2:端口冲突
同一台机器部署多个微服务时,Docker 映射宿主端口不能重复。
建议:
- 服务 A 用 8080 → 宿主机 8080
- 服务 B 用 8080 → 宿主机 8081
运行容器时加 -p 8081:8080。
避坑提醒
- 配置统一管理:微服务数量增多后,建议使用配置中心(Nacos Config 或 Apollo),避免每台服务器单独修改。
- 健康检查:为每个服务添加 Spring Boot Actuator,并在 Nginx upstream 中配置
max_fails=2 fail_timeout=30s,自动剔除故障节点。 - 日志集中:使用 ELK 或 Loki 将各服务器日志收集到一起,排查问题更快。
- 首次部署先用内网 IP 测试连通性,确认无误后再绑定域名。
效果验证:如何确认部署成功?
- 调用注册中心:访问
http://Nacos服务器IP:8848/nacos,确认所有服务状态为UP。 - 通过 Nginx 访问:在浏览器输入
http://api.example.com/user/health,返回{"status":"UP"}。 - 模拟负载:使用 Apache Bench 测试并发:
ab -n 1000 -c 100 http://api.example.com/user/list
观察 Nginx 日志和 Nacos 控制台,确认请求被正确转发到多台后端服务器。
---
如果你正在处理微服务架构拆分后的服务器部署,建议先按本文步骤在你的测试环境完整过一遍,再根据实际项目调整注册中心、服务数量和域名配置。
遇到异常时,优先回顾避坑指南中的常见排查点,基本能解决 90% 的问题。