← До програми курсу

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