You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm集群Leader节点宕机后无主、服务未迁移问题该如何处理?

问题根因

Docker Swarm 管理节点采用 Raft 一致性算法维护集群状态,要求管理节点数量必须为奇数,且集群可正常选主、提供管理能力的前提是超过半数的管理节点在线。

你当前集群共2个管理节点,超过半数的阈值为2台,当Node1离线后仅剩下1台管理节点在线,达不到阈值,因此无法选举新Leader,触发了你遇到的报错:

Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online

集群管理能力完全失效后,自然无法触发服务的故障迁移逻辑。而之前将Leader节点置为drain状态时操作是在双管理节点都在线、集群有正常Leader的状态下执行的,调度逻辑可正常运行,因此服务迁移可以正常生效。

紧急恢复步骤

要先恢复当前集群的可用状态,操作如下:

  • 在在线的Node2节点上执行命令强制初始化单节点管理集群,覆盖原有集群状态:
    docker swarm init --force-new-cluster
  • 等待命令执行完成后,Node2会自动成为新的集群Leader,此时执行docker node ls、docker service ls都可正常返回结果,原本运行在Node1上的服务也会自动调度到Node2上启动。
  • 如果需要重新将Node1加入集群,先在Node1上执行docker swarm leave --force清除原有Swarm状态,再在Node2上执行docker swarm join-token manager获取管理节点加入命令,复制到Node1执行即可。

长期优化方案

要避免后续再出现同类问题,需遵循Swarm集群的管理节点配置规则:

  • 生产环境管理节点数量必须配置为奇数,最小的高可用管理节点规模为3台,此时超过半数阈值为2台,允许最多1台管理节点离线,集群仍可正常选主和提供管理能力。
  • 如果集群规模较小不需要多管理节点,也可仅保留1台管理节点,其余节点全部设为工作节点,该配置下管理节点离线时集群管理能力失效,但不会出现选主失败的问题。
  • 运维操作前需确认在线管理节点数满足超过半数的要求,不要直接强制关停超过半数的管理节点。

内容的提问来源于stack exchange,提问作者user1344123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 19:15:10