
企业业务模块化、弹性扩缩需求不断提升,传统单体应用难以支撑快速迭代与高并发负载。微服务架构因其模块解耦、按需弹性伸缩、容器化部署等优势,在互联网、电商、金融等行业广泛采用。
这里A5数据将围绕 RHEL 8(Red Hat Enterprise Linux 8)服务器集群 ,通过 Docker 容器 + Docker Compose / Kubernetes(可选) + CI/CD 自动化部署流水线,构建一个可自动化部署和弹性发布的微服务平台。
我们假设业务包含以下微服务模块:
| 服务名称 | 技术栈 | 端口 | 描述 |
|---|---|---|---|
| user-service | Java Spring Boot | 8081 | 用户中心服务 |
| order-service | Node.js | 8082 | 订单处理服务 |
| product-service | Python Flask | 8083 | 商品管理服务 |
| api-gateway | Nginx / Kong | 80/443 | API 统一入口 |
| config-service | Spring Cloud Config | 8888 | 配置中心 |
| registry | Eureka / Consul | 8761 | 服务注册与发现 |
2. 香港服务器www.a5idc.com系统与硬件配置建议
RHEL 8 基础服务器标准(按节点)
| 项目 | 推荐配置 |
|---|---|
| CPU | 8 核以上 |
| 内存 | 32GB DDR4 |
| 存储 | 500GB SSD NVMe |
| 操作系统 | RHEL 8.7+ |
| 网络 | 1Gbps 或以上 |
| Docker 存储卷 | LVM 或 OverlayFS 支持 |
| 监控/日志 Agent | node_exporter / fluentd |
说明: 生产级环境建议使用至少两台以上节点部署(负载均衡 + HA 架构)。
3. 核心组件选择
3.1 Docker 容器引擎
我们选择 Docker CE / Docker Engine -- Community 或 RHEL 官方支持的 Podman(兼容 Docker CLI):
| 工具 | 特点 | 是否推荐生产 |
|---|---|---|
| Docker | 容器行业标准引擎,生态成熟 | ✅ |
| Podman | 无守护进程、rootless 更安全 | ⚠️ 初学可选 |
| Kubernetes | 生产级容器编排平台 | ✅ 必选(集群) |
本教程以 Docker + Docker Compose 自动部署 + Jenkins CI/CD 为主线。
4. 安装 Docker & 配置 RHEL 8
4.1 关闭 RHEL 8 默认防火墙(如使用外部 LB 可跳过)
bash
sudo systemctl stop firewalld
sudo systemctl disable firewalld
4.2 安装必备工具
bash
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
4.3 添加 Docker 官方源 & 安装
bash
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
启动并设置自启
bash
sudo systemctl enable --now docker
sudo docker version
5. 构建微服务 Docker 镜像
以 user-service 为例:
5.1 示例 Spring Boot Dockerfile
dockerfile
FROM eclipse-temurin:17-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
构建并推送到仓库:
bash
mvn clean package -DskipTests
docker build -t registry.example.com/user-service:1.0.0 .
docker push registry.example.com/user-service:1.0.0
6. 使用 Docker Compose 编排多个服务
docker-compose.yml 示例
yaml
version: "3.9"
services:
registry:
image: registry.example.com/registry:latest
ports:
- "8761:8761"
config-service:
image: registry.example.com/config-service:latest
ports:
- "8888:8888"
user-service:
image: registry.example.com/user-service:1.0.0
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- registry
- config-service
ports:
- "8081:8081"
order-service:
image: registry.example.com/order-service:1.0.0
depends_on:
- registry
- config-service
ports:
- "8082:8082"
product-service:
image: registry.example.com/product-service:1.0.0
depends_on:
- registry
- config-service
ports:
- "8083:8083"
🏃♂️ 启动所有服务
bash
docker compose up -d
7. 自动化部署流水线(CI/CD)
我们使用 Jenkins + Webhook + Docker Registry + Compose 构建持续集成与部署。
7.1 Jenkinsfile 例子(Declarative Pipeline)
groovy
pipeline {
agent any
environment {
REGISTRY = "registry.example.com"
IMAGE = "user-service"
TAG = "${env.BUILD_NUMBER}"
}
stages {
stage('Checkout') {
steps {
git url: 'git@github.com:org/user-service.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Docker Build & Push') {
steps {
script {
docker.withRegistry('https://registry.example.com', 'registry-credentials') {
def customImage = docker.build("${REGISTRY}/${IMAGE}:${TAG}")
customImage.push()
}
}
}
}
stage('Deploy') {
steps {
sh '''
ssh deploy@192.168.1.50 '
cd /home/deploy/microservices
docker compose pull
docker compose up -d'
'''
}
}
}
}
8. 监控 & 日志方案
8.1 Prometheus + Grafana
| 工具 | 作用 |
|---|---|
| Prometheus | 数据采集与告警 |
| Grafana | 可视化展示 |
| node_exporter | 服务器指标采集 |
| cAdvisor | 容器层指标采集 |
9. 性能评估参考(压测)
| 压测目标 | 并发用户 | 响应时间 P95 | 错误率 |
|---|---|---|---|
| user-service | 500 | <200ms | 0.0% |
| order-service | 300 | <300ms | 0.1% |
| product-service | 400 | <250ms | 0.0% |
压测工具建议: Apache Bench / JMeter / Locust
10. 可选进阶:使用 Kubernetes 编排
当服务规模增大,建议:
✔ 使用 Kubernetes(k8s)集群 替代 Docker Compose
✔ 使用 Helm Charts 管理服务发布
✔ 使用 Ingress Controller 做 API 路由/统一证书管理
✔ 使用 Service Mesh(如 Istio/Linkerd) 实现服务追踪 & 熔断
示例部署 Kubernetes Service:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service
spec:
replicas: 3
template:
spec:
containers:
- name: user-service
image: registry.example.com/user-service:1.0.0
ports:
- containerPort: 8081
11. 常见问题与注意事项
| 问题 | 解决方案 |
|---|---|
| 服务无法启动 | 检查环境变量、依赖服务依赖顺序 |
| 镜像拉取失败 | 确认 registry 证书/认证信息配置 |
| 高并发下内存泄露 | 使用 JVM 参数调整,如 -Xms -Xmx |
| 网络拥堵 | 使用 Overlay 网络插件或 Calico |
总结
通过本文,你可以在 RHEL 8 系统 上:
✅ 使用 Docker 容器化部署微服务
✅ 构建 Docker Compose 编排方案
✅ 利用 Jenkins 实现自动化 CI/CD 部署
✅ 接入监控/日志体系保障稳定性
✅ 能够平滑过渡到 Kubernetes 规模化生产环境