arculaДокументация

Бэкапы

Способы бэкапа и согласованность

Способ бэкапа — то, как агент снимает данные ресурса. Его видно в плане защиты, в колонке «Как копировать», и на обзоре сервера, в блоке «Что входит в бэкап». Способ предлагает агент, когда находит ресурс.

Зачем согласованность

База данных постоянно пишет в свои файлы. Если просто скопировать файлы работающей базы, копия может оказаться снятой посреди записи: часть файлов — до изменения, часть — после. Такая база может не запуститься или потерять последние данные.

Согласованная копия — снимок на один момент: дамп базы или штатный снимок самого приложения. Для этого у arcula есть адаптеры.

Способы

Способ в ЛКДля чегоКак
«копия файлов»Каталоги, файлы, тома Dockerrestic читает их с диска в момент отправки в хранилище
«pg_dump — согласованный дамп»PostgreSQL в контейнере, в том числе в GitLab Omnibuspg_dump -Fc каждой базы и pg_dumpall --globals-only внутри контейнера
«настройки хоста»Сам серверПользователи и группы, службы systemd, cron, конфиги Docker, Caddy, nginx, сертификаты Let's Encrypt
«снимок Redis (RDB)»RedisBGSAVE в контейнере и копия готового файла RDB
«согласованная копия SQLite»Приложение со встроенной базой SQLite, например GrafanaКаталог копируется, пока приложение работает; файлы базы — пока контейнер на паузе
«снимок Prometheus»PrometheusСнимок базы через admin API Prometheus
«снимок Vault (raft)»Vault на Raft — только по вашему выборуСнимок через API Vault
«gitlab-backup»GitLab Omnibus: репозитории, загрузки, артефакты, LFS, пакеты, registryШтатный gitlab-backup create

Пароли баз и Redis агент берёт внутри контейнера, из его окружения и конфигурации. В панель они не уходят.

Дампы и снимки готовятся на сервере один раз, в каталоге staging, и уходят во все хранилища одинаковыми. Каталоги и тома restic читает с диска в момент отправки в каждое хранилище — поэтому в разных хранилищах они на разный момент. Подробно — Точки и копии.

Особенности адаптеров

Redis

Если BGSAVE не удался, в бэкап идёт последний автоматический файл RDB с предупреждением. Если в Redis включён AOF — тоже предупреждение: при восстановлении сначала выключите appendonly.

SQLite

Контейнер ставится на паузу (docker pause) только на время копии файлов базы и только если они не больше 1 ГБ. База больше или контейнера нет — копия без паузы, с предупреждением. Это единственный случай, когда arcula что-то приостанавливает на сервере: сервисы он не останавливает.

Prometheus

Admin API в Prometheus по умолчанию выключен. Тогда агент копирует каталог данных файлами и пишет предупреждение. Чтобы был снимок, запустите Prometheus с флагом --web.enable-admin-api.

Vault

По умолчанию Vault копируется файлами. Снимок raft — только по вашему выбору в плане: «снимок Vault (raft) — нужна настройка на сервере». Перед этим на сервере:

sudo arcula vault setup

Команда создаёт в Vault вход с одним правом — делать снимок. Если снимок не вышел (Vault запечатан, хранилище не raft, вход не настроен), агент копирует файлы и пишет предупреждение. Ключи unseal агент не хранит: восстановить снимок можно только исходными ключами — держите их у себя.

GitLab

gitlab-backup снимает всё, кроме базы: базу снимает pg_dump, а gitlab.rb и секреты — копия файлов. Для восстановления нужна та же версия и редакция GitLab. Снимок Vault и архив GitLab arcula restore извлекает, а восстанавливаете их вы — по подсказке в шаге восстановления.

Без согласованности

«Копия файлов, без согласованности» значит: restic копирует файлы живого тома или каталога как есть, без договорённости с приложением. arcula не обещает, что такая копия базы поднимется.

Так бывает, когда:

  • для ресурса нет адаптера: MySQL, MariaDB, MongoDB, ClickHouse, Elasticsearch и другие базы;
  • вы включили том или каталог из «Нужно решение» как «защищать — копия файлов»;
  • агент сервера ещё не умеет нужный способ: «… — агент пока не умеет (обновите его); пока копия файлов без согласованности». После обновления агента план сам перейдёт на адаптер новой ревизией;
  • адаптер не смог: admin API Prometheus выключен, Vault запечатан. Тогда в журнале предупреждение.

Когда копии файлов достаточно

  • загрузки пользователей, статика, медиа, документы — файлы, которые пишутся целиком и редко меняются;
  • конфиги, каталоги проектов, файлы Compose;
  • данные приложения, которое не держит их открытыми или остановлено.

Когда мало

Живая база, которая пишет постоянно. Её файловая копия может не подняться или поднимется без последних данных. Надёжнее делать свой дамп — например, заданием cron (mysqldump, mongodump) в каталог, который отмечен в плане. Тогда в бэкап попадёт готовый дамп, а копия файлов базы станет запасной.

Та же статья — в панели, в разделе «Справка».