
在企业级微服务架构中,Docker Swarm作为Docker官方原生的集群编排解决方案,以其轻量、与Docker原生兼容等特点,仍在许多中小规模生产环境中获得采用。本文基于真实项目环境,从硬件架构、系统调优、Swarm集群搭建、网络/服务发现、安全配置与性能评估等方面,A5IDC提供一套在CentOS 7.9服务器上配置并调优Docker Swarm集群的技术方案。
文章将涵盖如下内容:
- 项目背景与硬件环境
- 系统准备与基础配置
- Docker与Swarm集群部署
- 服务发现与网络插件调优
- 容器资源限制与性能调优
- 安全加固与访问控制
- 性能测试与评估
- 常见问题排查与优化建议
1. 项目背景与硬件环境
在部署Swarm集群之前,需要明确集群规模、预期吞吐量、容器数量与服务发现/负载需求等指标。本方案针对中等规模生产环境,预期支持:
- 服务数量级:20--50个
- 并发连接:50,000--200,000
- 平均响应延迟:<100ms
- 每节点容器承载:10--30个
香港服务器www.a5idc.com硬件配置参考(3节点Swarm)
| 节点类型 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|
| Manager节点 x1 | 8 核 Intel Xeon | 32 GB | 1 TB NVMe | 1 Gbps |
| Worker节点 x2 | 8 核 Intel Xeon | 32 GB | 1 TB NVMe | 1 Gbps |
网络环境要求
- 节点间可达性:所有节点互通 TCP/UDP
- 开放端口(Swarm必需):2377/tcp(Swarm管理)、7946/tcp/udp(节点通信)、4789/udp(Overlay网络)
- 推荐部署内网直连,并规划VLAN隔离管理与业务流量
2. 系统准备与基础配置
2.1 安装基础组件与内核优化
CentOS 7.9默认内核偏老,为获得更好网络性能与容器支持,建议开启必要的内核参数。
bash
# 更新系统
yum update -y
# 安装基本工具
yum install -y vim net-tools curl yum-utils device-mapper-persistent-data lvm2
# 调整内核参数用于网络包转发与桥接
cat <<EOF > /etc/sysctl.d/99-docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
fs.inotify.max_user_watches = 524288
EOF
sysctl --system
2.2 关闭防火墙与SELinux(生产环境建议精细化策略替代)
为避免Docker网络链路因iptables规则冲突而不通,建议管理防火墙或设定规则;临时环境可关闭:
bash
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
setenforce 0
3. Docker与Swarm集群部署
3.1 安装Docker CE
Docker官方源安装,确保版本与Swarm兼容。
bash
# 配置Docker仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker
yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker
systemctl enable docker
systemctl start docker
# 检查版本
docker version
推荐Docker版本:20.10.x系列以上,可支持更好Overlay与安全特性。
3.2 初始化Swarm
在Manager节点执行:
bash
docker swarm init --advertise-addr <MANAGER-IP>
示例输出将含有加入Worker节点的Token:
text
docker swarm join --token SWMTKN-1-xxxxxxxx <MANAGER-IP>:2377
在各Worker节点执行该命令以加入集群:
bash
docker swarm join --token <TOKEN> <MANAGER-IP>:2377
3.3 查看集群状态
bash
docker node ls
输出示例:
| ID | HOSTNAME | STATUS | AVAILABILITY | MANAGER STATUS |
|---|---|---|---|---|
| x1 | manager | Ready | Active | Leader |
| x2 | worker1 | Ready | Active | |
| x3 | worker2 | Ready | Active |
4. 服务发现与网络插件调优
Swarm默认提供的Overlay网络支持跨主机容器通信,但在生产环境下需关注以下:
- MTU设置:避免网络包因过大碎片化
- DNS响应时延:Swarm Service内部DNS较简单,可能影响服务发现延迟
4.1 配置Overlay网络MTU
默认VxLAN MTU为 1450 附近,建议根据底层网络MTU调整:
bash
docker network create \
--driver overlay \
--opt com.docker.network.driver.mtu=1400 \
--attachable \
swarm-overlay
4.2 增加DNS缓存层(可选)
在高查询量场景下,严格依赖Swarm DNS可能增加延迟。建议容器内启用dnsmasq缓存服务:
bash
# 安装dnsmasq
yum install -y dnsmasq
# 配置dnsmasq
cat <<EOF > /etc/dnsmasq.d/docker-cache.conf
listen-address=127.0.0.1
cache-size=1000
EOF
systemctl restart dnsmasq
Docker daemon 配置使用本地dns:
json
{
"dns": ["127.0.0.1", "8.8.8.8"]
}
重启Docker以生效。
5. 容器资源限制与性能调优
5.1 资源限制建议
通过deploy.resources限制容器CPU与内存,避免单容器挤占节点资源。
yaml
version: "3.8"
services:
web:
image: nginx:1.21
deploy:
replicas: 5
resources:
limits:
cpus: '0.50'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
networks:
- swarm-overlay
networks:
swarm-overlay:
external: true
5.2 调整Docker守护进程参数
编辑 /etc/docker/daemon.json:
json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "5"
}
}
重启Docker:
bash
systemctl restart docker
6. 安全加固与访问控制
6.1 Role-Based Access Control (RBAC)
Swarm支持基于节点角色控制:
manager: 管理权限worker: 运行任务
避免不必要的Manager数量,最优为奇数(1/3/5)以支持Raft协议。
6.2 TLS自动分发与证书轮换
Swarm集群内部使用TLS保护通信,定期轮换证书:
bash
docker swarm ca --rotate
6.3 审计日志
结合auditd记录Docker事件:
bash
yum install -y audit
auditctl -w /var/lib/docker -k docker_audit
7. 性能测试与评估
7.1 测试方法
使用ApacheBench(ab)与wrk进行压力测试。
bash
# 示例wrk命令
wrk -t12 -c400 -d60s http://<SWARM-IP>:<SERVICE-PORT>/
7.2 性能指标对比(调整前后)
| 指标 | 调整前 | 调整后 |
|---|---|---|
| 平均请求延迟(ms) | 120 | 78 |
| 95百分位延迟(ms) | 240 | 150 |
| 每秒请求数(RPS) | 8,000 | 12,500 |
| CPU平均利用率 | 65% | 55% |
| 内存平均利用率 | 70% | 60% |
| 失败请求数 | 120 | 5 |
7.3 评估结论
- Overlay网络MTU优化显著降低跨节点延迟
- DNS缓存减少了内部服务发现查询延迟
- 容器资源限制避免了"噪声邻居"现象,提高整体稳定性
8. 常见问题排查与优化建议
8.1 节点无法加入Swarm
检查时间同步、网络连通性、防火墙策略。
bash
# 检查端口
telnet <MANAGER-IP> 2377
8.2 网络通信丢包
确认底层网络MTU一致,并检查VxLAN隧道MTU。
8.3 服务无法发现
确保Overlay网络存在并在Service中引用:
bash
docker network ls
8.4 日志文件过大
通过log-driver参数进行控制(见5.2节)。
结语
本文提供了一套从操作系统、Docker配置、Swarm集群搭建,到网络与资源调优、性能测试与安全加固的完整实践指南。通过合理规划硬件资源、科学调优网络和容器资源策略,可以让Docker Swarm在CentOS 7.9环境下稳定、高效地运行。