【发布时间】:2018-02-15 06:41:01
【问题描述】:
我使用 docker-compose 和 swarm 运行两台服务器
停止A服务器时,将A服务器中的容器移动到B服务器。
但是,当启动 A 服务器时,B 服务器中的容器不会移动到 A 服务器。
想知道在服务器死机的时候,如何正确安排死机容器的位置
【问题讨论】:
标签: docker-swarm swarm
我使用 docker-compose 和 swarm 运行两台服务器
停止A服务器时,将A服务器中的容器移动到B服务器。
但是,当启动 A 服务器时,B 服务器中的容器不会移动到 A 服务器。
想知道在服务器死机的时候,如何正确安排死机容器的位置
【问题讨论】:
标签: docker-swarm swarm
首先,为了让您的 Swarm 能够在节点出现故障时重新创建任务,您仍然需要大多数管理器节点仍然可用......所以如果它只是一个两个节点的 Swarm,这将不工作,因为您需要三个管理器,一个失败,另一个担任领导角色并重新安排失败的副本。 (仅供参考)
我认为您要求的是“重新平衡”。当一个节点重新上线(或添加一个新节点)时,Swarm 对设置为默认复制模式的服务不做任何事情。 Swarm 不会“移动”容器,它会破坏并重新创建容器,因此它认为节点 B 上的服务仍然健康,不会将其移回节点 A。它不想破坏您的活动/健康服务在节点 B 上只是因为节点 A 重新联机。
如果节点 B 确实失败了,那么 Swarm 将再次在下一个最佳节点上重新安排任务。
如果节点 B 有很多容器,并且工作不平衡(即节点 A 是空的,节点 B 有 3 个任务正在运行),那么您可以强制更新服务,这将销毁并重新创建该服务的所有副本并且默认情况下会尝试将它们分散开,这可能会导致其中一项任务最终回到节点 A。
docker service update --force <serivcename>
【讨论】: