1. Docker Swarm Manager 架构解析
Docker Swarm Manager 是整个 Swarm 集群的控制中心,相当于人类大脑对身体的指挥作用。在实际生产环境中,Manager 节点的高效运作直接决定了集群的稳定性和可靠性。我们先从最基础的概念开始拆解:
1.1 Manager 节点的核心职责
Manager 节点主要承担以下三类关键工作:
-
集群状态维护
通过内置的分布式存储维护整个集群的拓扑结构、节点健康状态和服务部署情况。所有状态变更都会通过 Raft 日志同步到其他 Manager 节点。例如当新增 Worker 节点时,Leader Manager 会先将节点信息写入日志,待多数节点确认后才更新集群状态。 -
服务调度决策
根据用户声明的期望状态(如 replicas: 3)和节点资源情况,计算最优的任务分配方案。调度过程会考虑以下因素:- 节点可用资源(CPU/Memory)
- 节点标签约束(constraints)
- 服务部署策略(spread/binpack)
- 节点当前负载情况
-
故障恢复处理
持续监控节点和服务健康状态,当检测到异常时(如容器崩溃、节点失联),自动触发重新调度。这个过程完全自动化,无需人工干预。
生产环境经验:Manager 节点本身也会运行任务(Task),但建议通过
--availability drain参数将其设置为仅管理节点,避免业务容器消耗管理资源。
1.2 Raft 一致性算法实现
Swarm 使用 Raft 算法实现多 Manager 节点间的数据一致性,其工作机制如下:
-
Leader 选举:集群启动时所有 Manager 参与选举,获得多数票的成为 Leader。Leader 负责所有写操作(如服务创建、节点管理)。
-
日志复制:Leader 将状态变更封装为日志条目,同步到 Follower 节点。只有当日志被多数节点持久化后,变更才会生效。
-
容错机制:N 个 Manager 的集群最多容忍 (N-1)/2 个节点故障。常见部署方案:
| Manager 节点数 | 允许故障数 | 推荐场景
