docker - 为什么要为 docker swarm 集群中的节点选择工作角色?

标签 docker docker-swarm docker-swarm-mode docker-engine

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

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

当这位领导者也失败时,我们只剩下 4 名经理中的 2 名。其他经理然后说

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.

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

我的问题是

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

最佳答案

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

If the swarm loses the quorum of managers, the swarm cannot perform management tasks. If your swarm has multiple managers, always have more than two. To maintain quorum, a majority of managers must be available. An odd number of managers is recommended, because the next even number does not make the quorum easier to keep. For instance, whether you have 3 or 4 managers, you can still only lose 1 manager and maintain the quorum. If you have 5 or 6 managers, you can still only lose two.

  • 拥有专用的工作节点可确保它们不会参与 Raft 分布式状态、做出调度决策或提供集群模式 HTTP API。因此,这些节点的全部计算能力专门用于运行容器。
  • because manager nodes use the Raft consensus algorithm to replicate data in a consistent way, they are sensitive to resource starvation

    引用自docker官方文档link

    关于docker - 为什么要为 docker swarm 集群中的节点选择工作角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49646529/

    相关文章:

    docker - 来自多个 Docker 容器的尾部标准输出

    Docker Swarm,多个主机不在同一个本地网络中,但可通过 IP 访问

    docker - Docker日志/堆栈部署服务错误

    ssl - docker swarm 模式是否默认提供网络安全/加密?

    docker - 使用云提供商为Docker计算机提供主机文件

    docker - 我尝试在 docker 中部署 gRPC (go) 服务器并在本地端口中公开端口,但端口绑定(bind)不起作用

    docker - 如何在特定节点上创建docker服务,同时在集群中将其扩展到其他节点?

    docker - 提供更深入的群体节点相关指标

    docker - 为什么我在尝试加入 docker swarm 时收到身份验证错误

    docker - 在Jupyter docker中,无法连接到内核