• Docker Swarm 进阶:集群容错


    webp

    Swarm 添加多个 Manager 节点实现容错

    Manager 节点的不可用是未知的,可以在 Swarm 集群中维护奇数个 Manager 节点,以防部分 Manger 节点不可用导致整个 Swarm 集群不能正常工作。

    节点总数正常数量容错数量
    1 1 0
    2 2 0
    3 2 1
    4 3 1
    5 3 2
    6 4 2
    7 4 3
    8 5 3
    9 5 4

    容错数量 = (n - 1) / 2

    举个例子,有 5 个 Manager 节点的 Swarm 集群,如果其中 3 个不可用,那么 Manager 节点的数量就不合法。因此在恢复其中一个不可用的 Manager 节点或使用灾难恢复命令恢复群集之前,将无法添加或删除节点。

    灾难恢复

    灾难不可控制,如果突发事件导致 Manager 节点不可用的数量超过容错数量,为了恢复 Swarm 到正常状态,该如何处理呢?

    webp

    1、从备份中恢复

    备份 Swarm 数据 后, 使用如下步骤恢复 Swarm 集群.

    1. 关闭要恢复 Swarm 集群目标主机上的 Docker;

    1. 在新 Swarm 集群下 移除  /var/lib/docker/swarm 目录内容;

    1. 将备份内容存储到 /var/lib/docker/swarm 目录;

    注意:新节点使用与旧的相同的加密密钥进行磁盘存储,此时不能更改磁盘上的存储加密密钥。
    在启用自动锁定的 Swarm 情况下,解锁密钥也与旧的 Swarm 相同,并且需要解锁密钥来恢复 Swarm。

    1. 在新节点上启动docker。使用以下命令重新初始化集群,以便该节点不尝试连接到旧集群的一部分的节点,可能旧集群不再存在:

    docker swarm init --force-new-cluster
    1. 校验 Swarm 集群的恢复状况是不是与预期的一样,可以使用 docker service ls 来查看。

    1. 如果你使用自动锁,参考  rotate the unlock key

    1. 向新的 Swarm 集群中添加 manager 和 worker 节点。

    1. 向新的 Swarm 集群中添加原来的备份方案。

    2、通过重置 Manager 的法定数量恢复集群

    集群对故障具有恢复能力,集群可以从任何数量的临时节点故障(机器重启或重启时崩溃)或其他瞬时错误中恢复。然而,如果集群的 Manger 数量少于法定数量,集群不能自动恢复。现有 Worker 节点上的任务继续运行,但不能管理任务,包括扩展或更新服务以及从集群中加入或删除节点。恢复的最佳方法是将丢失的 Manager 节点重新连接。如果故障严重,没有办法连接丢失的 Manager 节点,该如何处理?

    目前唯一方法是使用 Manager 节点中的 --force-new-cluster 操作。这个操作会删除当前 Manager 节点以外的所有 Manager 节点。由于现在只有一个 Manager ,因此达到法定数量,Swarm 集群就能正常工作。然后可以提升 Worker 节点成为 Manager,直到拥有理想的 Manager 数量。

    # 示例docker swarm init --force-new-cluster --advertise-addr node01:2377

    当你使用 --force-new-cluster 标志运行 docker swarm init 命令时,运行命令的 Docker 引擎将成为能够管理和运行服务的集群的 Manager
    节点。它拥有先前关于服务和任务的所有信息,Worker 节点仍然是集群的一部分,并且服务仍在运行。然后你需要添加 Manager 节点以实现以前的任务分配,并确保拥有足够的 Manager 来维护高可用性并防止法定数量不足。

    Manager 节点的分配

    除了维护奇数个 Manager 节点之外,在安置 Manager 时还要注意数据中心的拓扑结构。为了获得最佳的容错性,可以在至少 3 个可用区中分配 Manager 节点,以支持整套机器或常见维护方案的故障。

    Manager 个数分配 (在 3 个可用分区)
    3 1-1-1
    5 2-2-1
    7 3-2-2
    9 3-3-3

    相关问题

    1、Manager 节点为什么推荐使用奇数个?

    举例,3 个节点和 4 个节点的容错数量都是 1,5 个节点和 6 个节点的容错数量都是 2,同样的效果,选偶数明显没有任何优势,属于浪费资源。

    其他问题欢迎讨论 ~



    作者:Anoyi
    链接:https://www.jianshu.com/p/5c4a79cc04be

  • 相关阅读:
    高性能 Socket 组件 HP-Socket v3.1.3 正式发布
    【新年呈献】高性能 Socket 组件 HP-Socket v3.1.2 正式发布
    更新整理本人所有博文中提供的代码与工具(Java,2014.01)
    更新整理本人所有博文中提供的代码与工具(C++,2014.01)
    【圣诞呈献】高性能 Socket 组件 HP-Socket v3.1.1 正式发布
    更新整理本人所有博文中提供的代码与工具(Java,2013.11)
    更新整理本人所有博文中提供的代码与工具(C++,2013.11)
    高性能 Windows Socket 组件 HP-Socket v3.0.2 正式发布
    高效 Java Web 开发框架 JessMA v3.3.1 正式发布
    高效 Java Web 开发框架 JessMA v3.3.1 Beta-1 发布
  • 原文地址:https://www.cnblogs.com/lcword/p/14540213.html
Copyright © 2020-2023  润新知