Docker Swarm 生产高可用搭建指南

Swarm 生产 HA 全流程:3 manager 仲裁、worker 扩容、节点 drain、高可用 Nginx 服务部署、故障转移演练方法。从初始化到 failover 演练一篇走完。

最佳实践
容器模块与编排港口插画

直接回答:Swarm 高可用的要点——奇数个 manager(生产 3 个,Raft 仲裁容忍 1 个故障)、worker 按需扩展、服务多副本跨节点分布、drain 优雅维护节点。可通过 drain 演练任务重调度,但 drain 不等于 manager 故障,不能证明仲裁故障转移或零中断。

术语与要求

  • manager:管集群状态(Raft 共识),也跑任务
  • worker:只跑任务
  • HA 底线:3 manager(挂 1 不影响仲裁)、服务副本 ≥2 且跨节点

搭建流程

# 节点1
docker swarm init --advertise-addr <IP1>
docker swarm join-token manager    # 拿 manager 令牌
docker swarm join-token worker     # 拿 worker 令牌

# 其余节点分别按角色 join
docker node ls                     # 验证集群

部署高可用服务

docker service create --name web --replicas 3 --replicas-max-per-node 1 -p 80:80 nginx

该示例需要至少 3 个满足约束且容量足够的可调度节点;max-per-node 强制每节点最多一份,不足则 Pending。ingress 可让存活节点接收发布端口流量,但客户端若只连故障节点 IP 仍会失败,入口需要负载均衡与健康检查。仅向可信节点开放 2377/TCP、7946/TCP/UDP、4789/UDP 等集群端口,不把 VXLAN 端口暴露公网。

故障转移演练

docker node update --availability drain <manager2>

在隔离测试环境观察重调度耗时、错误率和长连接中断;另用受控关机/断网演练 manager 故障及入口故障。同时记录期望与实际副本数、节点状态、入口请求结果,按同一时间线核对恢复过程。没有负载、时间线和观测记录,不能声明 HA 已验证。

常见问题(FAQ)

Q:manager 也跑业务任务好吗?
A:小集群可以;大集群建议 manager 专用(--availability drain 常驻),控制面与业务负载隔离。

Q:Raft 日志会撑爆磁盘吗?
A:应监控 Swarm 数据目录容量,并按官方管理指南在保持仲裁的前提下备份。不要直接删除 raft 文件以释放空间。

Q:HA 能跨机房吗?
A:可以但注意延迟——Raft 对网络 RTT 敏感,跨地域建议 federation 思路(多集群)而非单集群拉伸。

官方参考

本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台