Модуль 22 / 24
Backup и восстановление manager
Содержание
1. Цели и результат модуля
После модуля вы создадите согласованный offline backup manager state, проверите restore media и подтвердите service, config и secret после возврата follower.
- понимать состав backup
- останавливать Engine для consistency
- проверять архив и checksum
- отличать media test от disaster recovery
2. Теория: что хранит manager
Каталог /var/lib/docker/swarm содержит Raft log, snapshots, node identity, certificates и ключи manager. В Raft находятся service specs, networks, configs и encrypted secrets. Images, named volumes и application data в этот backup не входят.
Копия одного manager должна быть согласованной. Файловый backup работающего Engine может смешать состояния разных моментов.
3. Backup strategy, RPO и защита
Выберите follower, проверьте quorum, остановите на нём Engine и архивируйте весь swarm directory с ownership и modes. Храните копию вне node, шифруйте, ограничивайте доступ и фиксируйте checksum.
Частота задаёт RPO. RTO включает подготовку совместимого Engine, restore state, force-new-cluster при полной потере quorum и возврат workloads/data.
4. Restore media и полноценное восстановление
Распаковка в отдельный каталог и diff проверяют читаемость и точность media без риска для рабочего state. Это обязательная репетиция, но она не доказывает запуск восстановленного control plane.
Запуск из backup выполняют на изолированном node: нельзя одновременно поднимать копию с той же identity рядом с исходным cluster. Полный disaster-recovery drill выполняется в следующем модуле.
5. Методические указания
- Создайте контрольные objects
- Берите backup с follower
- Останавливайте один Engine
- Не копируйте unlock key вместе с backup
- Проверяйте tar, checksum и diff
- Сначала запускайте неизменённый node, затем cleanup
6. Лабораторная работа: контрольные объекты
Создайте config и secret. Inspect показывает metadata, но не раскрывает secret payload.
printf 'module-22-config\n' | ssh swarm-manager-3 docker config create swarm-m22-config -
printf 'module-22-secret\n' | ssh swarm-manager-3 docker secret create swarm-m22-secret -
ssh swarm-manager-3 docker config inspect swarm-m22-config
ssh swarm-manager-3 docker secret inspect swarm-m22-secret
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls7. Лабораторная работа: согласованный backup
Остановите manager-1 и создайте archive. Два других managers сохраняют quorum и service availability.
ssh swarm-manager-1 sudo systemctl stop docker
ssh swarm-manager-1 sudo tar -C /var/lib/docker -czf /tmp/swarm-m22-state.tgz swarm
ssh swarm-manager-1 sudo tar -tzf /tmp/swarm-m22-state.tgz
ssh swarm-manager-1 sudo sha256sum /tmp/swarm-m22-state.tgz
ssh swarm-manager-1 sudo du -h /tmp/swarm-m22-state.tgz8. Лабораторная работа: restore rehearsal
Распакуйте archive только в /tmp и сравните деревья. Пустой вывод diff означает совпадение. Затем запустите исходный manager.
ssh swarm-manager-1 sudo rm -rf /tmp/swarm-m22-restore
ssh swarm-manager-1 sudo mkdir -p /tmp/swarm-m22-restore
ssh swarm-manager-1 sudo tar -C /tmp/swarm-m22-restore -xzf /tmp/swarm-m22-state.tgz
ssh swarm-manager-1 sudo diff -qr /var/lib/docker/swarm /tmp/swarm-m22-restore/swarm
ssh swarm-manager-1 sudo systemctl start docker
sleep 159. Проверка и диагностика
Подтвердите Reachable, 3/3, IDs контрольных objects и HTTPS.
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls
ssh swarm-manager-3 docker config inspect swarm-m22-config --format 'config={{.ID}}'
ssh swarm-manager-3 docker secret inspect swarm-m22-secret --format 'secret={{.ID}}'
curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/- tar повреждён — отвергните backup
- diff отличается — исследуйте consistency
- manager не Reachable — Engine, identity, certificates и time
- objects есть, data нет — application data требует отдельного backup
10. Контроль, критерии освоения и cleanup
- Что находится в Raft backup?
- Почему volumes не входят?
- Почему Engine останавливают?
- Что доказывает checksum?
- Чего не доказывает diff?
- Почему restore node изолируют?
Модуль освоен, если archive читается, diff пуст, follower возвращён в quorum, objects и service доступны. Cleanup удаляет только учебные files, config и secret.
ssh swarm-manager-1 sudo rm -rf /tmp/swarm-m22-restore
ssh swarm-manager-1 sudo rm -f /tmp/swarm-m22-state.tgz
ssh swarm-manager-3 docker config rm swarm-m22-config
ssh swarm-manager-3 docker secret rm swarm-m22-secret
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls