← К программе курса

Модуль 4 / 24

Raft, leader election и quorum

DOCKER SWARM

Содержание
01

1. Цели и результат модуля

После модуля вы сможете связать Raft majority с доступностью control plane, наблюдать election нового leader и доказать, что кластер принимает изменения после отказа одного manager.

  • объяснять replicated log, term, leader и follower
  • рассчитывать quorum и допустимое число отказов
  • различать доступность control plane и уже запущенных tasks
  • безопасно остановить и вернуть один manager
02

2. Теория: Raft в Docker Swarm

Managers хранят согласованный Raft log с объектами desired state: nodes, services, configs и secrets. Leader принимает изменение, реплицирует запись followers и подтверждает её после записи большинством. Term отделяет последовательные периоды лидерства; при потере leader доступные followers проводят election.

Raft обеспечивает согласованность metadata, но не копирует данные application volumes. Tasks исполняет Docker Engine на nodes, а manager reconciliation приводит observed state к desired state.

03

3. Теория: quorum и размер manager-группы

Quorum равен floor(N/2)+1. Для трёх managers нужны два голоса, поэтому допустим отказ одного. Для пяти нужны три и допустимы два. Два managers тоже требуют два голоса и не переносят ни одного отказа; нечётное число обычно даёт лучшую устойчивость.

  • 3 managers: quorum 2, допустим 1 отказ
  • 5 managers: quorum 3, допустимы 2 отказа
  • 7 managers: quorum 4, допустимы 3 отказа
  • потеря quorum запрещает изменения control plane, но существующие tasks могут продолжить работу
04

4. Control plane и data plane при отказе

После остановки одного из трёх managers новый leader избирается среди двух оставшихся. Краткая пауза управления во время election ожидаема. После election создание, scale и reconciliation снова доступны.

Работа уже запущенного контейнера не доказывает наличие quorum. Доказательством служит успешная запись desired state, например scale сервиса. Остановка второго manager лишит кластер majority.

05

5. Методические указания

  • До отказа подтвердите три Ready manager и определите текущий Leader
  • Останавливайте Docker только на подтверждённом leader
  • После остановки опрашивайте оставшийся manager до появления нового Leader
  • Проверьте запись control plane командой scale
  • Верните остановленный Engine и дождитесь Ready/Reachable
  • Не используйте force-new-cluster в обычном election-сценарии
06

6. Лабораторная работа: baseline

В проверенном запуске leader был swarm-manager-3. Если node ls показывает другого leader, замените имя в командах остановки и восстановления. Создайте временный replicated service и дождитесь трёх Running tasks.

terminal
ssh swarm-manager-1 docker node ls
ssh swarm-manager-1 docker service create --detach=true --name swarm-m04-web --replicas 3 nginx:1.29-alpine
ssh swarm-manager-1 docker service ps swarm-m04-web
07

7. Лабораторная работа: отказ leader и проверка quorum

Остановите Docker на одном leader. Первая node ls может попасть в окно election; повторите её через несколько секунд. Затем измените desired state. Успешный scale и четыре Running tasks доказывают, что два оставшихся manager образуют majority.

terminal
ssh swarm-manager-3 sudo systemctl stop docker
ssh swarm-manager-1 docker node ls
ssh swarm-manager-2 docker node ls
ssh swarm-manager-2 docker service scale swarm-m04-web=4
ssh swarm-manager-2 docker service ps swarm-m04-web
08

8. Лабораторная работа: возврат manager

Запустите Docker на остановленном узле. Дождитесь Ready/Reachable; возврат follower не должен менять desired state сервиса.

terminal
ssh swarm-manager-3 sudo systemctl start docker
ssh swarm-manager-2 docker node ls
ssh swarm-manager-3 systemctl is-active docker
09

9. Диагностика и guardrails

Если manager остаётся Unreachable, проверяйте Engine, журнал, стабильный advertise address и TCP 2377/7946. Сообщение no elected leader требует проверки majority, а не немедленного disaster recovery.

terminal
ssh swarm-manager-2 docker node ls
ssh swarm-manager-2 docker service ps swarm-m04-web --no-trunc
ssh swarm-manager-2 docker service inspect swarm-m04-web --pretty
ssh swarm-manager-3 journalctl -u docker --since today
ssh swarm-manager-3 docker info
  • context deadline exceeded — проверьте сеть managers и dockerd
  • scale недоступен при двух потерянных managers — сначала возвращайте исходные members
  • force-new-cluster применяют только в отдельном сценарии восстановления после подтверждённой потери quorum
10

10. Контроль, критерии освоения и cleanup

  • Почему три managers переносят один отказ?
  • Что Raft хранит и чего он не резервирует?
  • Почему работающий контейнер не доказывает quorum?
  • Как scale подтверждает доступность control plane?
  • Что означает новый term?
  • Почему два managers хуже трёх?

Модуль освоен, если вы наблюдаете смену leader, выполняете запись desired state на majority, возвращаете follower в Ready/Reachable и объясняете границу отказоустойчивости.

Удалите только ресурс модуля и подтвердите три здоровых manager.

terminal
ssh swarm-manager-2 docker service rm swarm-m04-web
ssh swarm-manager-2 docker service ls
ssh swarm-manager-2 docker node ls