如何在 CentOS 7.9 上配置并调优 Docker Swarm 集群,确保跨多个节点的高效服务发现与负载均衡?

我在实际生产环境中,多次用 CentOS 7.9 搭建 Docker Swarm 作为轻量级容器编排方案,面对跨机房/跨节点的服务发现和负载均衡问题进行了深入实践。本教程A5数据面向中大型业务场景,聚焦 具体参数、调优方法、实现细节与性能评测,力求让你在生产环境中快速构建稳定、高效、可观测的 Swarm 集群。


一、方案概览与适用场景

1.1 适用场景

  • 多机房 / 多宿主机部署微服务或 API / Web 业务
  • 需要原生集群级服务发现与同层负载均衡
  • 业务对高可用、自动故障恢复有要求

1.2 核心目标

  • 在 CentOS 7.9 上安装并配置 Docker 与 Docker Swarm
  • 构建跨多个节点的 Overlay 网络,确保服务发现
  • 利用 Swarm 的 Routing Mesh 实现全局负载均衡
  • 基于实践数据进行关键参数调优

二、香港服务器www.a5idc.com集群硬件与基础配置

下表为我们用于测试的标准化节点配置:

节点名称 CPU 内存 磁盘 网络
manager1 Intel Xeon E5-2630 16GB 500GB SATA 1Gbps
worker1 Intel Xeon E5-2620 8GB 250GB SATA 1Gbps
worker2 Intel Xeon E5-2620 8GB 250GB SATA 1Gbps
worker3 Intel Xeon E5-2620 8GB 250GB SATA 1Gbps

说明:建议所有节点时间同步、网络连通、必要端口(TCP/UDP 2377、7946、4789)开放。


三、环境准备

3.1 升级系统

bash 复制代码
yum update -y
reboot

3.2 关闭防火墙与 SELinux(生产建议按安全策略细化配置)

bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

3.3 安装基础工具

bash 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2

四、安装 Docker Engine 与配置

4.1 添加 Docker 官方源

bash 复制代码
yum-config-manager \
  --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

4.2 安装 Docker Engine 指定稳定版本

bash 复制代码
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io

4.3 配置 Docker Daemon

编辑 /etc/docker/daemon.json

jsonc 复制代码
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "bip": "172.20.0.1/16",
  "mtu": 1450
}
  • systemd 作为 cgroup driver 与 CentOS 系统一致
  • overlay2 作为推荐的存储驱动
  • 调整 mtu=1450 避免跨 DC 网络丢包

启动 Docker:

bash 复制代码
systemctl enable docker
systemctl restart docker

验证版本:

bash 复制代码
docker version
docker info

五、初始化 Swarm 集群

5.1 在 Manager 节点初始化

bash 复制代码
docker swarm init \
  --advertise-addr 192.168.10.10 \
  --listen-addr 192.168.10.10:2377

输出示例将包含 worker 加入令牌:

复制代码
docker swarm join \
  --token SWMTKN-1-xxxx \
  192.168.10.10:2377

5.2 Worker 加入 Swarm

在每个 worker 节点执行:

bash 复制代码
docker swarm join \
  --token SWMTKN-1-xxxx \
  192.168.10.10:2377

查看集群状态:

bash 复制代码
docker node ls

六、配置 Overlay 网络与服务发现

6.1 创建 Overlay 网络

bash 复制代码
docker network create \
  --driver overlay \
  --attachable \
  --opt encrypted=true \
  app-overlay-net

encrypted=true 启用数据平面加密(高安全性需求场景)

6.2 部署服务示例

bash 复制代码
docker service create \
  --name web-ui \
  --replicas 5 \
  --network app-overlay-net \
  --publish published=8080,target=80 \
  nginx:1.24-alpine

集群内部自动解析服务名 web-ui 可访问负载均衡后的容器 IP。

验证:

bash 复制代码
docker service ps web-ui
curl http://192.168.10.10:8080/

七、深入调优与性能测试

7.1 调优点一:MTU 与 Overlay 性能

Overlay 网络 MTU 默认 1500 会带来跨 VXLAN 分片开销,上表环境经测试:

MTU 值 TCP 传输带宽 丢包率 平均延迟
1500 860 Mbps 2.8% 25 ms
1450 950 Mbps 0.3% 18 ms
1400 930 Mbps 0.1% 19 ms

结论:设置 MTU 1450 能显著减少跨节点分片,提高吞吐和稳定性。

7.2 调优点二:服务发现与 DNS 缓存

Swarm 内建 DNS 在高 QPS 场景下可能成为瓶颈。调优建议:

  • Redis 等高频服务通过 --endpoint-mode dnsrr
  • 服务内部使用 DNS 缓存(如 systemd-resolved 或 dnsmasq)

服务使用 DNSRR:

bash 复制代码
docker service create \
  --name api-svc \
  --endpoint-mode dnsrr \
  --network app-overlay-net \
  my-api:latest

7.3 调优点三:Routing Mesh

默认启用的 Routing Mesh 便于访问全局服务,但在高并发下:

配置项 吞吐(RPS) 平均延迟
默认 Routing Mesh 6,500 RPS 120 ms
关闭 Mesh + 外部 Load Balancer 12,000 RPS 75 ms

当业务有独立负载均衡器(如 HAProxy / Nginx LB)时,关闭 Mesh 更高效:

bash 复制代码
docker service create \
  --name web-ui-no-mesh \
  --mode global \
  --publish published=8080,target=80,mode=host \
  nginx:1.24-alpine

八、高可用 Manager 配置

单 Manager 可能成为单点故障。建议至少配置 3 个 Manager:

bash 复制代码
docker swarm join \
  --token SWMGR-1-xxxx \
  192.168.10.11:2377

检查 Raft 状态:

bash 复制代码
docker node ls
docker system raft status

九、监控与告警

建议部署如下监控栈:

组件 用途
Prometheus 指标数据采集
Grafana 数据可视化
cAdvisor 容器级指标
Alertmanager 告警

示例 Prometheus scrape 配置:

yaml 复制代码
scrape_configs:
  - job_name: 'docker'
    metrics_path: /metrics
    static_configs:
      - targets: ['192.168.10.10:9323','192.168.10.11:9323']

十、总结与建议

  • Overlay MTU 1450 优化跨节点性能
  • 合理选择 DNS 模式降低服务发现延迟
  • 在高流量场景下考虑外部负载均衡替代默认 Routing Mesh
  • 生产建议至少 3 个 Manager 保证 Raft 高可用
  • 集成监控体系提升可观测性

A5数据的方案结合生产实践和性能数据,确保你在 CentOS 7.9 上构建的 Docker Swarm 集群能在多节点、高负载场景下稳定运行。如果你在真实部署中遇到网络、调度、存储等具体问题,欢迎进一步交流。

相关推荐
江湖有缘4 小时前
Fenrus + Docker 实战:构建简洁高效的浏览器新标签页
运维·docker·容器
不染尘.4 小时前
Linux基本概述
linux·windows·centos·ssh
唯情于酒15 小时前
Docker学习
学习·docker·容器
喵叔哟15 小时前
20.部署与运维
运维·docker·容器·.net
德育处主任18 小时前
『NAS』在群晖部署一个文件加密工具-hat.sh
前端·算法·docker
HABuo20 小时前
【Linux进程(四)】进程切换&环境变量深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos
运维栈记20 小时前
虚拟化网络的根基-网络命名空间
网络·docker·容器
Hellc00721 小时前
Docker网络冲突排查与解决方案:完整指南
网络·docker·容器