Модуль 4 / 24
Raft, leader election и quorum
Содержание
1. Цели и результат модуля
После модуля вы сможете связать Raft majority с доступностью control plane, наблюдать election нового leader и доказать, что кластер принимает изменения после отказа одного manager.
- объяснять replicated log, term, leader и follower
- рассчитывать quorum и допустимое число отказов
- различать доступность control plane и уже запущенных tasks
- безопасно остановить и вернуть один manager
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.
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 могут продолжить работу
4. Control plane и data plane при отказе
После остановки одного из трёх managers новый leader избирается среди двух оставшихся. Краткая пауза управления во время election ожидаема. После election создание, scale и reconciliation снова доступны.
Работа уже запущенного контейнера не доказывает наличие quorum. Доказательством служит успешная запись desired state, например scale сервиса. Остановка второго manager лишит кластер majority.
5. Методические указания
- До отказа подтвердите три Ready manager и определите текущий Leader
- Останавливайте Docker только на подтверждённом leader
- После остановки опрашивайте оставшийся manager до появления нового Leader
- Проверьте запись control plane командой scale
- Верните остановленный Engine и дождитесь Ready/Reachable
- Не используйте force-new-cluster в обычном election-сценарии
6. Лабораторная работа: baseline
В проверенном запуске leader был swarm-manager-3. Если node ls показывает другого leader, замените имя в командах остановки и восстановления. Создайте временный replicated service и дождитесь трёх Running tasks.
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-web7. Лабораторная работа: отказ leader и проверка quorum
Остановите Docker на одном leader. Первая node ls может попасть в окно election; повторите её через несколько секунд. Затем измените desired state. Успешный scale и четыре Running tasks доказывают, что два оставшихся manager образуют majority.
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-web8. Лабораторная работа: возврат manager
Запустите Docker на остановленном узле. Дождитесь Ready/Reachable; возврат follower не должен менять desired state сервиса.
ssh swarm-manager-3 sudo systemctl start docker
ssh swarm-manager-2 docker node ls
ssh swarm-manager-3 systemctl is-active docker9. Диагностика и guardrails
Если manager остаётся Unreachable, проверяйте Engine, журнал, стабильный advertise address и TCP 2377/7946. Сообщение no elected leader требует проверки majority, а не немедленного disaster recovery.
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. Контроль, критерии освоения и cleanup
- Почему три managers переносят один отказ?
- Что Raft хранит и чего он не резервирует?
- Почему работающий контейнер не доказывает quorum?
- Как scale подтверждает доступность control plane?
- Что означает новый term?
- Почему два managers хуже трёх?
Модуль освоен, если вы наблюдаете смену leader, выполняете запись desired state на majority, возвращаете follower в Ready/Reachable и объясняете границу отказоустойчивости.
Удалите только ресурс модуля и подтвердите три здоровых manager.
ssh swarm-manager-2 docker service rm swarm-m04-web
ssh swarm-manager-2 docker service ls
ssh swarm-manager-2 docker node ls