docker 群中领导节点宕机时如何处理

How to handle when leader node goes down in docker swarm

我有两个 docker 节点 运行 如下所示。我晋升为经理的第二个节点。

imb9cmobjk0fp7s6h5zoivfmo * Node1 Ready Active Leader 19.03.11-ol a9gsb12wqw436zujakdpbqu5p Node2 Ready Active Reachable 19.03.11-ol

当领导节点进入 drain/pause 时,这工作正常。但是作为测试的一部分,我已经停止了 Node1 实例,然后在尝试查看第二个节点中的节点(docker 节点 ls)以及尝试列出服务时出现以下错误 运行 (docker 服务 ls)。

来自守护程序的错误响应:rpc 错误:代码 = 未知描述 = 集群没有领导者。可能在线的经理太少。确保一半以上的经理在线

也没有 docker 进程在节点 2 中出现,而在停止实例之前在节点 1 中是 运行。只有现有进程是 运行。我的期望是在停止 node1 实例后,节点 1 中的进程 运行 必须移动到节点 2。当节点进入耗尽状态时,这工作正常

raft 共识算法在找不到绝对多数时失败。

这意味着,永远不会 运行 有 2 个管理器节点,因为一个节点出现故障时另一个节点只有 50%——这不是多数,无法达到法定人数。

实际上,通常要避免偶数,尤其是在可用性区域之间拆分管理器时,因为区域拆分可能会给您留下 50/50 的分区 - 再次没有多数,也没有法定人数和死群。

因此,要尝试的有效群管理器数量通常为:1、3、5、7。高于 7 通常会降低性能并且无助于提高可用性。

只有在使用 1 或 2 节点群时才应使用 1,在这些情况下,无论如何,管理器节点的丢失等同于群的丢失。

3 名经理确实是您应该追求的最低目标。如果您只有 3 个节点,那么比起 运行 1 个经理和 2 个工人,更愿意将经理用作工人。