Docker Swarm:如果所有 Swarm 管理器重新启动会发生什么

oni*_*ght 6 docker docker-swarm docker-swarm-mode

我最感兴趣的是我从中获得的信息docker node ls。Docker将加入的节点的信息存储在哪里?

abr*_*nan 8

docker 将加入的节点信息存储在哪里?

来自的信息可以在处理管理器节点成员资格docker node ls的分布式数据存储中找到。

当使用管理器节点引导集群时,您实际上创建了一个单节点数据库。每个加入集群的额外管理器都会增加该容量并形成分布式一致数据存储(使用称为 Raft 的算法)。

该分布式数据存储可确保在出现故障和分区的情况下整个节点成员资格状态保持一致。

当您加入新的代理节点(处理 docker 服务/任务)时,该节点及其信息将添加到由管理器节点处理的分布式数据存储中。由于代理与管理器的角色有些不同,因此这些节点的存储方式也不同(请参阅Swarmkit 中的存储/节点部分)。

总结:

+----------------------------------------------------------------------------------+
|                        Distributed Consistent Datastore                          |
|                                                                                  |
|                +-----------------------------------------------+                 |
|                |          Raft cluster membership store        |                 |
|                |                                               |                 |
|                +---^--------------------^------------------^---+                 |
|                    |                    |                  |                     |
|      +-------------+----+     +---------+--------+     +---+--------------+      |
|      |                  |     |                  |     |                  |      |
|      |     Manager      |     |     Manager      |     |      Manager     |      |
|      |                  |     |                  |     |                  |      |
|      +------------------+     +------------------+     +------------------+      |
|                +-----------------------------------------------+                 |
|                |           Node Membership store               |                 |
|                |                                               |                 |
|                +-----^-------------^-------------^----------^--+                 |
|                      |             |             |          |                    |
+----------------------------------------------------------------------------------+
                       |             |             |          |
    +---------+---+----+----+   +----+----+   +----+---+   +--+-----+--+--------+
    |         |   |         |   |         |   |        |   |        |  |        |
    | Agent   |   |  Agent  |   |  Agent  |   |  Agent |   | Agent  |  | Agent  |
    |         |   |         |   |         |   |        |   |        |  |        |
    +---------+   +---------+   +---------+   +--------+   +--------+  +--------+

Run Code Online (Sandbox Code Playgroud)

如果所有 Swarm 管理器重新启动会发生什么?

由于分布式存储使用Raft 共识算法,如果丢失了大部分 Manager 节点,则无法再处理任何更新并添加新节点(Manager 和 Agent)。这是为了避免数据不一致,即少数 Manager 的状态在网络分区期间与大多数 Manager 不同。事实上,如果管理器最终得到不同的节点列表,这将是很糟糕的,因为它们都被困在一个分区中,但它们各自不断地向本地存储添加节点,而没有在它们之间“同步”此列表。

当重新启动所有 Swarm 管理器时,它将停止处理新数据和加入集群的节点,直到大多数管理器节点成功重新启动并可以再次相互联系。因为我们在重新启动后恢复了大部分,所以我们可以安全地处理新更新并向集群添加新节点。因此,当该过程完成时,仍在重新启动过程中的少数人将必须赶上大多数人。