如何在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网关等场景中,该方案可显著提升系统的部署效率、可维护性与故障容忍度,是中大型企业构建自有容器编排平台的高性价比方案。

posted @ 2026-01-13 10:49  A5IDC  阅读(20)  评论(0)    收藏  举报