Модуль 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, а 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