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

时间:2019-01-08 15:05:06

标签: docker docker-swarm docker-swarm-mode

我最感兴趣的是从docker node ls获得的信息。 Docker在哪里存储有关联接节点的信息?

1 个答案:

答案 0 :(得分:3)

码头工人在哪里存储有关加入节点的信息?

来自docker node ls的信息可以在处理Manager nodes membership的分布式数据存储中找到。

使用Manager节点引导集群时,实际上是创建一个单节点数据库。每加入群集的其他Manager都会增加容量,并形成分布式一致的数据存储(使用称为Raft的算法)。

在存在故障和分区的情况下,此分布式数据存储可确保整个节点成员状态是一致的。

当您加入新的Agent节点(通过docker Services / Tasks处理)时,此节点及其信息将添加到Manager节点处理的分布式数据存储中。由于代理的角色与管理器的角色有所不同,因此这些节点的存储方式有所不同(请参阅Swarmkit中的store/nodes section)。

总结:

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

如果所有Swarm管理器重新启动会怎样?

由于分布式存储正在使用Raft consensus algorithm,如果丢失了大多数Manager节点,则无法再处理更新并添加新节点(Manager和Agents)。这是为了避免数据不一致,在网络分区期间少数Manager的状态与多数Manager的状态不一致。确实,让管理者以不同的节点列表结尾将是很糟糕的,因为它们都被卡在一个分区中,但是他们不断地将节点添加到本地存储中,而不会在彼此之间“同步”该列表。

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