Docker Swarm: что произойдет, если все менеджеры роя перезагрузятся - PullRequest
0 голосов
/ 08 января 2019

Больше всего меня интересует информация, которую я получаю от docker node ls. Где Docker хранит информацию о соединенных узлах?

1 Ответ

0 голосов
/ 16 января 2019

Где докер хранит информацию о соединенных узлах?

Информация из docker node ls может быть найдена в распределенном хранилище данных, которое обрабатывает членство узлов Manager .

При начальной загрузке кластера с помощью узла Manager вы по существу создаете базу данных с одним узлом. Каждый дополнительный менеджер, присоединяющийся к кластеру, будет увеличивать эту емкость и формировать распределенное согласованное хранилище данных (используя алгоритм Raft).

Это распределенное хранилище данных обеспечивает согласованность всего состояния членства узла при наличии сбоев и разделов.

Когда вы присоединяетесь к новому узлу агента (работающему с Docker Services / Tasks), этот узел и его информация добавляются в распределенное хранилище данных, обрабатываемое узлами Manager. Поскольку агенты играют несколько иные роли, чем менеджеры, эти узлы хранятся по-разному (см. Раздел store / node в Swarmkit).

Подводя итог:

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

Что произойдет, если все менеджеры Swarm перезагрузятся?

Поскольку в распределенном хранилище используется алгоритм консенсуса Raft , если вы потеряете большинство узлов Manager, вы больше не сможете обрабатывать обновления и добавлять новые узлы (как Manager, так и агенты). Это делается для того, чтобы избежать противоречивых данных, когда у меньшинства менеджеров их состояние отличается от большинства во время сетевого раздела. Действительно, было бы плохо, если бы менеджеры заканчивали с другим списком узлов, потому что все они были прикреплены к разделу, но они индивидуально продолжали добавлять узлы в свои локальные хранилища, не «синхронизируя» этот список между собой.

При перезагрузке всех менеджеров Swarm он просто прекратит обработку новых данных и узлов, присоединяющихся к кластеру, до тех пор, пока большинство узлов Manager не перезагрузятся и не смогут снова связаться друг с другом. Поскольку мы восстановили большинство после перезагрузки, мы можем безопасно обрабатывать новые обновления и добавлять новые узлы в кластер. Таким образом, меньшинство, все еще находящееся в процессе перезагрузки, должно будет догнать большинство, когда этот процесс будет завершен.

...