如何使用 Docker Swarm 部署一个高可用集群?
·
使用 Docker Swarm 部署高可用集群是一种有效的方式,它通过将多个 Docker 主机组成一个虚拟的单一系统,提供容错性、负载均衡和服务发现等功能。以下是详细的部署步骤和关键概念:
1. 核心概念
- Swarm 集群:由多个 Docker 节点(物理或虚拟机)组成,分为管理节点(Manager)和工作节点(Worker)。
- 管理节点:负责集群状态调度、服务编排(如 Raft 一致性算法确保高可用)。
- 工作节点:执行实际容器任务。
- 服务(Service):定义容器副本数、镜像、网络等,Swarm 自动分发到节点。
- 高可用原理:多个管理节点(推荐至少 3 个)通过 Raft 共识协议同步数据,避免单点故障。若主管理节点失效,其他节点自动选举新主。
2. 部署步骤
前提条件
- 多台主机(Linux/Windows)安装 Docker Engine(版本 ≥ 1.12)。
- 节点间网络互通(开放端口:2377/TCP管理、7946/UDP-TCP节点通信、4789/UDP overlay网络)。
步骤 1:初始化 Swarm
在第一个管理节点执行:
docker swarm init --advertise-addr <MANAGER_IP>
输出包含工作节点和管理节点加入令牌(Token),保存备用。
步骤 2:添加节点
- 添加管理节点(高可用关键):
docker swarm join-token manager # 获取管理节点令牌 # 在其他管理节点运行输出的命令 - 添加工作节点:
docker swarm join-token worker # 获取工作节点令牌 # 在工作节点运行命令
步骤 3:部署服务
示例:部署 Nginx 服务(3 副本,跨节点分布):
docker service create \
--name nginx \
--replicas 3 \
--publish published=80,target=80 \
--detach=false \
nginx:latest
步骤 4:验证集群
- 查看节点状态:
docker node ls # 应显示所有节点状态(Ready/Active) - 查看服务分布:
docker service ps nginx # 确认副本在不同节点运行
步骤 5:配置高可用特性
- 重启策略:服务自动重启异常容器。
docker service update --restart-condition any nginx - 滚动更新:无中断更新服务(分批替换容器)。
docker service update \ --image nginx:new-version \ --update-parallelism 2 \ --update-delay 10s \ nginx - 健康检查:结合容器健康检测(HEALTHCHECK)自动恢复。
步骤 6:网络与存储
- Overlay 网络:跨节点容器通信。
docker network create -d overlay my-net docker service update --network-add my-net nginx - 数据持久化:使用卷(Volume)或绑定挂载(Bind Mount)避免数据丢失。
docker volume create app-data docker service update --mount type=volume,source=app-data,target=/data nginx
3. 高可用最佳实践
- 管理节点数量:至少 3 个管理节点(Raft 要求多数存活)。
- 监控与告警:
- 集成 Prometheus/Grafana 监控节点和服务状态。
- 设置告警(如节点下线、服务副本不足)。
- 备份 Swarm 配置:定期备份 Raft 数据(位于
/var/lib/docker/swarm)。 - 安全措施:
- 启用 TLS 加密节点通信。
- 限制管理节点访问(防火墙规则)。
4. 故障模拟与恢复
- 管理节点故障:自动选举新主,无需手动干预。
- 工作节点故障:Swarm 将故障节点任务重新调度到健康节点。
- 服务伸缩:动态调整副本数应对负载。
docker service scale nginx=5 # 扩容到 5 副本
总结
Docker Swarm 通过多管理节点和自动调度机制实现高可用,适合中小规模集群。关键步骤包括:初始化 Swarm、添加节点、部署服务、配置网络/存储,并结合监控和备份策略。对于更复杂场景(如大规模集群),可考虑 Kubernetes,但 Swarm 以简单性和低开销见长。
更多推荐



所有评论(0)