原标题:云计算核心技术Docker教程:Docker Swarm 模式从灾难中恢复
从备份恢复
按照备份 swarm 中的说明 备份 swarm 后,使用以下过程将数据恢复到新的 swarm。
1.为恢复的 swarm 关闭目标主机上的 Docker。
2.删除/var/lib/docker/swarm新群上目录的内容。
3./var/lib/docker/swarm使用备份内容恢复目录。
4.在新节点上启动 Docker。如有必要,解锁群体。使用以下命令重新初始化 swarm,以便此节点不会尝试连接到属于旧 swarm 且可能不再存在的节点。
docker swarm init --force-new-cluster
5.验证群的状态是否符合预期。这可能包括特定于应用程序的测试或简单地检查输出 docker service ls以确保所有预期的服务都存在。
6.如果您使用自动锁定,请 旋转解锁钥匙。
7.添加管理器和工作器节点,使您的新集群达到运行能力。
8.在新群上恢复您之前的备份方案。
从失去法定人数中恢复
Swarm 对故障具有弹性,并且可以从任意数量的临时节点故障(机器重新启动或重新启动时崩溃)或其他暂时性错误中恢复。但是,如果失去法定人数,swarm 将无法自动恢复。现有工作节点上的任务继续运行,但无法执行管理任务,包括扩展或更新服务以及从群中加入或删除节点。恢复的最佳方法是使丢失的管理器节点重新联机。如果这是不可能的,请继续阅读一些用于恢复群的选项。
在一群N管理器中,法定人数(大多数)管理器节点必须始终可用。例如,在有 5 名管理人员的群体中,必须至少有 3 人在运作并相互沟通。换句话说,swarm 可以容忍(N-1)/2永久故障,超过这个故障就不能处理涉及 swarm 管理的请求。这些类型的故障包括数据损坏或硬件故障。
如果您失去了法定人数的管理者,您将无法管理集群。如果您失去了法定人数并尝试对 swarm 执行任何管理操作,则会发生错误:
Error response from daemon: rpc error: code = 4 desc = context deadline exceeded
从失去仲裁中恢复的最佳方法是将故障节点重新联机。如果你不能这样做,从这个状态恢复的唯一方法是使用--force-new-cluster来自管理器节点的操作。这将删除除运行命令的管理器之外的所有管理器。达到法定人数是因为现在只有一名经理。将节点提升为管理器,直到您拥有所需数量的管理器。
从要恢复的节点运行:
docker swarm init --force-new-cluster --advertise-addr node01:2377
当您运行docker swarm init带有--force-new-cluster 标志的命令时,运行该命令的 Docker 引擎将成为能够管理和运行服务的单节点 swarm 的管理器节点。管理器拥有有关服务和任务的所有先前信息,工作节点仍然是 swarm 的一部分,服务仍在运行。您需要添加或重新添加管理器节点来实现您之前的任务分配,并确保您有足够的管理器来保持高可用性并防止失去仲裁。