docker-swarm - docker swarm中leader节点宕机时如何处理
问题描述
我有两个 docker 节点在 swarm 中运行,如下所示。我晋升为经理的第二个节点。
imb9cmobjk0fp7s6h5zoivfmo * Node1 Ready Active Leader 19.03.11-ol a9gsb12wqw436zujakdpbqu5p Node2 Ready Active Reachable 19.03.11-ol
当领导节点进入耗尽/暂停时,这可以正常工作。但作为我测试的一部分,我已经停止了 Node1 实例,然后当我尝试查看第二个节点中的节点(docker node ls)是什么以及尝试列出正在运行的服务(docker service ls)时出现以下错误。
来自守护进程的错误响应:rpc 错误:code = Unknown desc = swarm 没有领导者。在线的经理可能太少。确保超过一半的经理在线
在停止实例之前,节点 2 中也没有运行在节点 1 中的 docker 进程。只有现有的进程正在运行。我的期望是在停止 node1 实例后,在节点 1 中运行的进程必须移动到 node2。当节点进入耗尽状态时,这可以正常工作
解决方案
raft 共识算法在找不到明显多数时失败。
这意味着,永远不要使用 2 个管理器节点运行,因为一个节点出现故障,另一个节点只有 50% - 这不是多数,无法达到法定人数。
事实上,通常情况下,避免使用偶数,尤其是在可用性区域之间拆分管理器时,因为区域拆分可能会给您留下 50/50 的分区 - 同样没有多数,没有法定人数和死群。
因此,要尝试的有效集群管理器数量通常为:1、3、5、7。高于 7 通常会降低性能并且无助于可用性。
1 仅应在您使用 1 或 2 个节点群时使用,在这些情况下,管理器节点的丢失无论如何都等同于群的丢失。
3 个经理确实是您应该瞄准的最低要求。如果您只有 3 个节点,则宁愿将管理器用作工作人员,而不是运行 1 个管理器和 2 个工作人员。
推荐阅读
- python - 在 python 中并行化漂亮的汤刮板
- java - 速度模板引擎 1.7 换行问题
- android - 创建项目后:资源编译失败
- linux - Freeradius 问题读取 google_authenticator 机密 Centos 7
- c++ - QComboBox 或 QListWidget 中选定元素的样式文本?
- angular - 如何从父组件输入的对象中获取数据。
- python-3.x - Windows 10 中的 anaconda 环境中缺少 bin 目录
- visual-studio-2017 - 文件未出现在解决方案资源管理器中
- excel - Excel for mac 表单按钮未运行宏
- r - 标题的 R Markdown 索引