我在实际生产环境中,多次用 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 集群能在多节点、高负载场景下稳定运行。如果你在真实部署中遇到网络、调度、存储等具体问题,欢迎进一步交流。