6

假设我们有一个包含 10 个节点、4 个管理器和 6 个工人的测试设置。

当 leader manager 失败时,其他 3 个 manager 将选择另一个 manager 作为 leader。

当这个领导也失败时,我们只剩下 2 名经理了。其他经理然后说

来自守护进程的错误响应:rpc 错误:code = Unknown desc = swarm 没有领导者。在线的经理可能太少。确保超过一半的经理在线。

因为我们只剩下不到一半的管理器,所以尽管集群中还剩下 2 个管理器,但他们将无法选择新的领导者。

我的问题是

  1. 这条规则的意义,因为集群没有领导者,并且只要没有额外的管理器添加到集群中就不再可管理,尽管有 2 个管理器可用。
  2. 为什么我应该为节点选择角色工作者?将节点作为工人有什么好处?默认情况下,管理器也充当工人,但缺点是当管理器节点发生故障时它们无法接管。
4

1 回答 1

4
  1. Docker 建议使用具有奇数个管理器节点的系统。因此,您的 4 个管理器的初始设置与拥有 3 个管理器节点一样好。建议您从 5 个节点开始,因为您将失去 2 个节点。此外,您使用的方式是否有任何严重的问题需要解决?(失去这么多节点不是一个好兆头)

如果 swarm 失去了管理人员的法定人数,则 swarm 无法执行管理任务。如果您的 Swarm 有多个管理器,则始终有两个以上。要维持法定人数,必须有大多数经理可用。建议使用奇数个管理器,因为下一个偶数不会使仲裁更容易保持。例如,无论您有 3 个或 4 个经理,您仍然只能失去 1 个经理并保持法定人数。如果您有 5 或 6 个经理,您仍然只能失去两个。

  1. 拥有一个专用的工作节点确保它们不会参与 Raft 分布式状态、做出调度决策或服务于 swarm 模式 HTTP API。因此,这些节点的完整计算能力专门用于运行容器。

由于管理节点使用 Raft 共识算法以一致的方式复制数据,因此它们对资源匮乏很敏感

引用来自 docker 官方文档链接

于 2018-04-04T10:00:52.903 回答