我们只是在 3 个节点上试用 Docker-Swarm,每个节点都充当主节点和工作节点。这工作正常,但我不知道以下行为是否“正常”。
如果我关闭这 3 个节点中的一个,Swarm 就能正常处理服务的重新分配。
如果我关闭这 3 个节点中的 2 个,服务仍然会运行,但如果我连接到“最后一个节点”并尝试使用以下命令获取我的 Swarm 概览:
docker node ls
我收到以下错误信息:
Error response from daemon: rpc error: code = 4 desc = context deadline exceeded
我不确定当只剩下一个节点时,Swarm 是否可以运行?我猜是的?
答案1
这里有一个解释:https://docs.docker.com/engine/swarm/raft/
Raft 最多可容忍 (N-1)/2 次故障,并且需要 (N/2)+1 个成员的多数或法定人数就向集群提出的值达成一致。
当您运行 3 个管理器节点时,您的集群可以接受一个节点关闭,因为剩下的 2 个节点可以同意第三个节点已关闭。
如果只剩下一个节点,那么可能是该节点有问题。因此,它不会接受任何更改,并且如果网络分裂,您也不会出现不一致的状态。