Бэкапы, которые восстанавливаются
Бэкап — это не файл в S3, а проверенная процедура восстановления. Разница обнаруживается в худший день года.
Бэкап ≠ восстановление
У большинства команд бэкапы «есть»: cron, pg_dump, файл уходит в хранилище. Проверяют же их обычно в день аварии — и тогда выясняется, что дамп пустой уже три месяца, потому что упали права, или что восстановление занимает шесть часов, а бизнес рассчитывал на тридцать минут.
Рабочее определение: бэкап существует, только если восстановление из него недавно репетировали.
Два числа, о которых договариваются заранее
- RPO (recovery point objective) — сколько данных можно потерять. Бэкап раз в сутки = RPO 24 часа: всё, что записано после ночного дампа, при аварии исчезнет.
- RTO (recovery time objective) — сколько времени можно лежать, пока идёт восстановление.
Оба числа — решение бизнеса, а не инженера. Задача инженера — честно сказать, какие RPO/RTO даёт текущая схема, и сколько стоит их уменьшить (WAL-архивация вместо суточного дампа, реплика вместо холодного восстановления).
Правило 3-2-1
Три копии данных, на двух разных типах носителей, одна — вне площадки. Практический минимум для сервера: локальный дамп для быстрого восстановления плюс копия в объектном хранилище другого провайдера или региона. Бэкап на том же диске, что и база, переживёт ошибку DROP TABLE, но не переживёт смерть диска — а это как раз главный сценарий.
Как бэкапы умирают молча
- cron-задача сломалась, и никто не заметил — мониторьте не «задача запустилась», а «свежий бэкап существует и не пустой»;
- retention чистит по возрасту, и после месяца сбоев в хранилище нет ни одной валидной копии;
- дамп делается без
--single-transactionи ловит базу в несогласованном состоянии; - секреты/ключи шифрования бэкапа лежали на том же умершем сервере.
# минимальная проверка свежести и размера, годится для алерта
find /backups -name "db-*.dump" -mtime -1 -size +10M | grep -q . || echo "ALARM"
Репетиция
Раз в квартал: поднять чистую машину, восстановить прод-бэкап, запустить приложение поверх, замерить время. Это единственный способ узнать реальный RTO — и единственный момент, когда ошибки процедуры стоят дёшево.