Резервная копия Galleon состоит из трёх частей — все три обязательны:
- База данных PostgreSQL — каталог артефактов всех форматов (включая метаданные образов контейнеров), пользователи и права, настройки.
- Каталог хранилища (
storage.default.local.rootцеликом:blobs/,docker/и маркерgalleon-storage.json) — содержимое артефактов. - Файл ключей шифрования (
security.secret_key_file) — без него дамп базы не восстановим: не расшифруются учётные данные внешних реестров и служебные секреты (Секреты и ключ шифрования).
Резервная копия одной только базы данных бесполезна: без каталога хранилища не будет самих артефактов, без файла ключей — доступа к зашифрованным настройкам.
Порядок снятия копии
Правило согласованности: база данных никогда не должна опережать хранилище.
Лишние файлы в хранилище без записей в базе только занимают место; записи в базе без файлов в хранилище означают потерянные артефакты: каждое скачивание такого артефакта завершается ошибкой.
Поэтому копия снимается в порядке: сначала база данных, потом каталог хранилища. Всё, что опубликуют между двумя моментами, попадёт в копию лишними файлами.
Идущая параллельно сборка мусора может нарушить это правило: если между дампом базы и копией хранилища кто-то удалит артефакт, сборка мусора успеет удалить и файл, на который ссылается уже снятый дамп.
Удалённое содержимое остаётся на диске не меньше gc.grace_period
(по умолчанию сутки), поэтому копирование, которое укладывается
в этот срок, согласовано само по себе.
Если окно копирования длиннее grace-периода или он уменьшен, приостановите сборку мусора на время работ кнопкой «Приостановить» на странице «Настройки» → «Сборка мусора» (Хранилище и сборка мусора). То же самое можно сделать запросом к API, если копирование запускается скриптом. Пауза останавливает и плановые циклы, и ручной запуск. Она действует ограниченное время, по умолчанию сутки, и снимается автоматически, поэтому забытая пауза не остановит освобождение места навсегда. Кнопка «Возобновить» снимает её сразу, как только копирование закончено.
Обе копии можно снять и атомарными снимками на один момент времени (LVM, ZFS, облачные снимки), приостановив запись.
Восстановление
Порядок восстановления:
- Восстановите файл ключей — тот же, что действовал на момент копии.
- Восстановите базу данных.
- Восстановите каталог хранилища — копией, снятой одновременно с дампом базы данных или позже. Копия хранилища, снятая раньше дампа, оставит записи, для которых нет файлов, и такие артефакты перестанут скачиваться.
- Перезапустите все серверы инстанса.
Каталог хранилища восстанавливайте вместе с маркером galleon-storage.json:
без него сервер не стартует.
Восстанавливайте базу целиком: выборочное восстановление отдельных таблиц рассинхронизирует служебные секреты, каталог артефактов и метаданные образов. Лишние файлы хранилища, попавшие в копию, останутся на диске: сборка мусора их не удаляет. Удалять их вручную нельзя (Хранилище и сборка мусора).