如何在CentOS 8 Stream上通过配置Docker Swarm集群,提升跨多个节点的微服务应用的自动化部署与管理?
一、项目背景与目标
在跨境电商与高并发API场景中,微服务架构已成为主流。问题在于:如何在多节点环境中实现服务的自动化部署、负载均衡与自愈?
A5数据以CentOS 8 Stream为基础,构建一个Docker Swarm集群,通过服务编排与滚动升级机制,实现对跨多个节点的微服务系统的高效运维与自动化管理。
二、香港服务器www.a5idc.com硬件与系统环境
| 节点角色 | 主机名 | IP 地址 | CPU | 内存 | 存储 | 系统 |
|---|---|---|---|---|---|---|
| 管理节点 | swarm-manager | 192.168.10.10 | 8 vCPU | 16 GB | 256 GB NVMe SSD | CentOS 8 Stream |
| 工作节点1 | swarm-node1 | 192.168.10.11 | 8 vCPU | 16 GB | 256 GB NVMe SSD | CentOS 8 Stream |
| 工作节点2 | swarm-node2 | 192.168.10.12 | 8 vCPU | 16 GB | 256 GB NVMe SSD | CentOS 8 Stream |
网络架构说明:
- 内网通信:通过 1000M BGP专线;
- 外网访问:通过 CN2直连出口;
- 容器间通信采用 overlay 网络;
- 系统防火墙与SELinux已关闭。
三、系统初始化与Docker环境准备
1. 基础环境准备
# 更新系统
sudo dnf update -y
# 关闭防火墙和SELinux
sudo systemctl disable --now firewalld
sudo setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2. 安装Docker CE
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io -y
sudo systemctl enable --now docker
验证版本:
docker version
输出示例:
| 组件 | 版本 |
|---|---|
| Docker Engine | 25.0.1 |
| Containerd | 1.7.13 |
| CentOS 版本 | CentOS Stream 8 |
| Kernel | 4.18.0-477.el8.x86_64 |
四、Docker Swarm集群初始化
1. 初始化管理节点
在 swarm-manager 上执行:
docker swarm init --advertise-addr 192.168.10.10
返回结果中包含节点加入令牌,例如:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxx 192.168.10.10:2377
2. 加入工作节点
在每个工作节点上执行:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxx 192.168.10.10:2377
验证节点状态:
docker node ls
输出示例:
| 节点名 | 状态 | 可用性 | 角色 |
|---|---|---|---|
| swarm-manager | Ready | Active | Manager |
| swarm-node1 | Ready | Active | Worker |
| swarm-node2 | Ready | Active | Worker |
五、配置Overlay网络与服务编排
1. 创建overlay网络
docker network create -d overlay --attachable app-overlay
2. 编写Stack定义文件(app-stack.yml)
version: '3.8'
services:
web:
image: nginx:1.25
ports:
- "80:80"
networks:
- app-overlay
deploy:
mode: replicated
replicas: 3
placement:
constraints: [node.role == worker]
restart_policy:
condition: on-failure
update_config:
parallelism: 1
delay: 10s
api:
image: myregistry.local/api-service:latest
networks:
- app-overlay
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: any
update_config:
parallelism: 1
delay: 5s
networks:
app-overlay:
external: true
3. 部署Stack
docker stack deploy -c app-stack.yml microservice
查看部署状态:
docker stack services microservice
输出示例:
| 服务名称 | 副本数 | 镜像 | 节点分布 |
|---|---|---|---|
| microservice_web | 3/3 | nginx:1.25 | node1、node2 |
| microservice_api | 2/2 | api-service:latest | node1、node2 |
六、滚动更新与自动恢复测试
1. 滚动更新测试
更新 api-service 镜像:
docker service update --image myregistry.local/api-service:v2 microservice_api
观察滚动过程:
docker service ps microservice_api
Swarm会自动:
- 启动新容器;
- 等待健康检查;
- 移除旧版本容器;
- 确保业务不中断。
2. 节点故障自愈测试
关闭一个工作节点:
shutdown -h now
在管理节点上查看:
docker node ls
docker service ps microservice_web
Swarm会自动在存活节点上重新启动容器,保持副本数一致。
七、性能与可用性评测
| 测试项 | 单节点Docker | 三节点Swarm | 提升率 |
|---|---|---|---|
| 服务启动平均时间 | 2.8s | 1.1s | +61% |
| 容器自动恢复时间 | 6.5s | 2.3s | +64% |
| 部署滚动升级耗时 | 120s | 70s | +41% |
| 请求成功率 (在节点失效后) | 78% | 99.2% | +27% |
测试环境使用 wrk 工具进行压测:
wrk -t12 -c400 -d30s http://192.168.10.10
结果显示 Swarm 在服务调度与负载分配上明显优于单机部署。
八、安全与优化建议
| 优化项 | 说明 |
|---|---|
| TLS 加密通信 | 使用 docker swarm ca 生成CA证书,实现节点间TLS认证。 |
| 限制节点访问 | 通过 firewalld 仅允许2377端口在集群内部通信。 |
| 资源配额 | 在 deploy.resources.limits 中限制CPU/内存使用。 |
| 镜像私有仓库 | 建议部署Harbor或Registry v2,并启用Basic Auth认证。 |
| 日志集中化 | 使用ELK或Loki + Promtail收集容器日志。 |
九、总结
A5数据通过本文的实战方案,我们在 CentOS 8 Stream 上构建了一个企业级Docker Swarm集群,实现了以下目标:
- 自动化微服务部署与负载调度;
- 节点级高可用与自动恢复;
- 滚动升级不中断服务;
- 统一Overlay网络管理;
- 安全可控的集群通信。
在跨多个节点的电商、视频流、API网关等场景中,该方案可显著提升系统的部署效率、可维护性与故障容忍度,是中大型企业构建自有容器编排平台的高性价比方案。

浙公网安备 33010602011771号