Автоматическая проверка восстановления
Бэкап, который ни разу не восстанавливали, остаётся предположением. Верификатор достаёт снимок из репозитория на отдельной машине, восстанавливает его в изолированной песочнице и сравнивает копию с отпечатком, который источник снял при бэкапе. Статус «Проверено» появляется только после этого.
Как идёт проверка
Верификатор — агент с ролью verifier на отдельной машине. Стадии идут по порядку, первая непрошедшая останавливает проверку, уборка идёт всегда:
- снимок есть в репозитории, а отпечаток из задания совпадает с хешем в теге снимка: серверу не верим;
- рабочий том смонтирован с noexec, места хватает;
- restic check с чтением части данных;
- для баз: песочница с контейнером нужной версии PostgreSQL, без сети;
- восстановление: restic restore --verify или pg_restore в песочнице;
- копия открывается в своём приложении;
- отпечаток копии, снятый кодом плагина, совпадает с отпечатком источника;
- копия, контейнер и его тома удаляются.
Пять уровней и время восстановления
Итог проверки — самый высокий достигнутый уровень: целостность хранилища, восстановление, запуск, смысл данных. На пятом уровне пройдены все стадии и измерено время восстановления, то есть фактический RTO.
Пять итогов, а не два
Пройдено, провал, не можем проверить, сбой инфраструктуры и отменена. Провал бэкапа и сбой самой проверки разделены: упавший верификатор не выглядит как плохой бэкап, а проваленное восстановление не выглядит как предупреждение.
Безопасность верификатора
- Верификатор отказывается проверять снимок своей машины, что бы ни прислал сервер.
- У него свой ключ репозитория: пароль источника на верификатор не переносится.
- Доступ к хранилищу только на чтение, все команды restic идут без блокировки репозитория.
- Восстановленные файлы не исполняются: рабочий том смонтирован noexec.
- Контейнер песочницы без сети, с лимитами процессора, памяти и процессов, а пароль сервера в нём случайный на каждую проверку.
- Данные идут из хранилища к верификатору мимо сервера. Через сервер проходят только отпечаток, идентификатор снимка, задания и отчёты.
Что видно в консоли и в Telegram
- Последнее проверенное восстановление: главная метрика обзора, а у источника своя.
- Вкладка «Проверки» источника и запись каждой проверки: стадии, длительности, отпечатки рядом.
- Расхождения словами: что именно не совпало у источника и у копии.
- Подсказка «нет верификатора» с готовыми командами, если проверять некому.
- Порог «давно не проверялся» (от 1 до 90 дней) и уведомления в Telegram о проверках.
- Отчёт о проверках источника для печати.
Что проверяется сегодня
Бэкапы PostgreSQL (pg_dump) и файлов. Проверка идёт ежедневным циклом по расписанию, которое задаётся в настройках, и по запросу из консоли. Для баз верификатору нужен Docker или Podman, мы рекомендуем Podman без root. Другие источники появятся вместе со своими плагинами.