Однажды в результате наложения двух человеческих ошибок при выкатке кода
на базы мы сделали DROP SCHEMA data CASCADE;
на всех шардах одного из
кластеров, в котором лежало около 3 ТБ данных. Это добавило нам много седых
волос, позволило проверить свои навыки в PITR прямо в бою и заставило
по-другому относиться к резервным копиям.
Та история закончилась хорошо. Инцидент случился ближе к концу рабочего дня, когда нагрузка уже спадала, а к утру мы восстановили всё из бэкапов на нужный момент времени. Резервные копии мы делали всегда и всегда мониторили тот факт, что они делаются. А вот проверку того, сможем ли мы из них восстановиться, мы в момент переезда на barman выкинули из-за затратности.
Восстановление одного из шардов затянулось дольше остальных из-за того, что из
последнего бэкапа нам подняться не удалось, пришлось восстанавливаться из
предпоследнего (бэкапы мы делаем каждый день). Потому проверку консистентности
после факапа решили вернуть и в результате получилась пара скриптов, которые
можно посмотреть
тут. Один из
них (check_backup_consistency.py
) последовательно разворачивает последний
бэкап каждого кластера, запускает PostgreSQL с recovery_target = 'immediate'
и дожидается достижения базой консистентного состояния.
Второй (check_xlogs.sh
) проверяет тот
факт, что на машине с бэкапами есть все необходимые WAL’ы (с первого WAL’а
первого бэкапа до последнего заархивированного). В общем случае archiver
гарантирует последовательную отправку WAL’ов в архив и если у вас правильно
указан archive_command
, то проблем с этим быть не должно. Но у нас
бывали случаи, когда на разделе с pg_xlog
заканчивалось место и мы меняли
archive_command
на перекладывание WAL’ов локально. При очередной выкатке
состояния на базы archive_command
возвращалась на место, а вот переложенные
локально WAL’ы до архива донести могли забыть.
Эти проверки мы запускаем по cron’у, а мониторинг смотрит на status-файлы,
которые скрипты пишут в /tmp
. Бэкапы мы начинаем делать в 2:00 и последние
из них добегают около 6:00 (слава инкрементальным бэкапам в barman 1.4). И в
середине дня (около 15:00-16:00) мы уже знаем, можно ли снова делать DROP
SCHEMA
:)
Возможно, кому-то эти скрипты пригодятся. Будут вопросы - обращайтесь.
Comments
comments powered by Disqus