сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · SRE и надёжность

RPO, RTO и проверка бэкапов

Копии и восстановление после катастрофы

Посчитал честно. База на 500 гигабайт, канал 120 мегабайт в секунду - только копирование данных займёт 1,2 часа, и это без запуска, прогрева и проверки. Если бизнесу обещано «поднимемся за час», такая схема не работает в принципе, и узнавать об этом лучше не в момент катастрофы.

Стержень: два числа задают всю схему - сколько данных допустимо потерять и за сколько надо подняться; реплика при этом не заменяет копию.

// Формулировки: «что такое RPO и RTO?», «реплика это бэкап?», «как проверить, что копии рабочие?»

Два числа, из которых растёт схема

RPO (recovery point objective) - сколько данных допустимо потерять, измеряется во времени. Копия раз в сутки означает потерю до суток. Архив журнала изменений (базы пишут все правки в отдельный журнал) с выгрузкой раз в пять минут - до пяти минут. Синхронная реплика - ноль, но за неё платят задержкой каждой записи.

RTO (recovery time objective) - за сколько надо вернуться в строй. Именно оно упирается в физику: мой расчёт с 500 гигабайтами и часовым обещанием показывает, что копированием тут не обойтись. Если нужен час, то нужна уже поднятая и работающая копия базы, готовая принять трафик, - на неё переключаются, а не восстанавливаются из архива.

// Эти два числа не выбираются техническим отделом. Их называет бизнес, отвечая на вопрос «сколько стоит час простоя и сколько стоит потеря часа данных», а инженеры переводят ответ в схему и в её цену. Разговор в обратную сторону («мы сделали копии раз в сутки, вам хватит?») почти всегда заканчивается неприятным открытием в момент аварии.

RPO
допустимая потеря данных во времени (recovery point objective)
RTO
допустимое время восстановления (recovery time objective)

Реплика не заменяет копию

Реплика повторяет за основной базой всё, включая ошибки. Удалили таблицу командой без условия - реплика послушно удалила её у себя через миллисекунды. Приложение записало испорченные данные - реплика записала их же. От чего реплика защищает: от смерти машины, диска, зоны. От чего не защищает: от ошибки человека, от бага приложения, от шифровальщика.

Копия защищает от второго класса именно потому, что она отстаёт и неизменна. Поэтому копии держат в нескольких поколениях (вчера, неделю назад, месяц назад) и, желательно, в режиме, где их нельзя переписать или удалить раньше срока - иначе тот, кто добрался до вашей инфраструктуры, удалит и копии.

// Отсюда обычный минимум: копии лежат в другом месте, чем основная база; есть несколько поколений; есть проверка, что архив журнала действительно пишется. Последнее ломается чаще всего и молча: архивация отвалилась месяц назад, база от этого не тормозит, никто не замечает, а восстановление на точку становится невозможным.

неизменяемая копия
копия, которую нельзя переписать или удалить раньше срока
поколения копий
несколько копий разной давности, а не одна последняя

Проверка и учения

Копия, которую ни разу не восстанавливали, копией не считается. Причины отказа известны и повторяются: файл бьётся, версия не совпадает, забыли одну из баз, нет прав, не хватает места на целевой машине, а иногда архив просто пуст, потому что скрипт падал молча.

Поэтому восстановление проверяют по расписанию и автоматически: развернуть копию в отдельном месте, проверить, что данные читаются и сходятся, ЗАМЕРИТЬ время. Это время и есть настоящее значение, которое можно обещать бизнесу, а не то, которое кажется.

// Уровнем выше стоят учения по переключению целиком: увести трафик на резервную площадку и пожить там. Они находят то, чего не найдёт проверка копий: забытые записи в системе имён, сертификаты, которых нет во второй зоне, конфиги с прибитыми адресами, права доступа, выданные только в основной площадке. Практика простая: план переключения, который ни разу не проходили целиком, при аварии не сработает.

проверка восстановления
регулярное разворачивание копии с замером времени
учения по переключению
перевод трафика на резервную площадку в спокойное время

Как отвечать: «Есть реплика. Зачем ещё и бэкапы?»

Потому что они закрывают разные классы бед. Реплика повторяет за основной базой всё, включая ошибки: команда удаления без условия доедет до неё за миллисекунды, и испорченные приложением данные тоже. Она защищает от смерти машины, диска или зоны и ни от чего больше. Копия защищает именно тем, что отстаёт и неизменна: можно вернуться на состояние до ошибки. Поэтому держат несколько поколений копий, в другом месте, и по возможности в режиме, где их нельзя удалить раньше срока - иначе тот, кто добрался до инфраструктуры, удалит и копии. И третье, о чём спрашивают реже, чем стоило бы: копию надо регулярно восстанавливать и замерять время. Я считал простой пример - 500 гигабайт на канале 120 мегабайт в секунду это 1,2 часа только на копирование, так что обещание «поднимемся за час» такой схемой не выполняется.

Ответ разводит два класса аварий, добавляет требование неизменности и заканчивается измеримым временем восстановления. Именно эти три вещи и проверяются вопросом.

На чём валятся

  • Считают реплику заменой копии и теряют данные при ошибке человека.
  • Держат копии рядом с базой: авария или взлом уносит и то и другое.
  • Не проверяют восстановление и называют время наугад.
  • Не следят за архивацией журнала: она отваливается молча.
  • Пишут план переключения и ни разу не проходят его целиком.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 6, остальные разбираются в тренажёре.

  1. #dvo_backup_dr1 / 5
    Что означают RPO и RTO в плане восстановления?
    A)RPO — потеря данных, RTO — время подъёма
    B)RPO — время восстановления, RTO — частота снятия резервных копий
    C)RPO — срок хранения копий, RTO — их количество
    D)RPO — доступность за год, RTO — допустимое число аварий
    показать ответ и разбор
    +A)RPO — потеря данных, RTO — время подъёма

    // разбор: RPO задаёт глубину потери данных: копия раз в сутки означает готовность потерять сутки работы. RTO задаёт время возвращения сервиса. Эти два числа определяют схему: RPO в минутах требует непрерывного архивирования журнала или репликации, RTO в минутах — тёплого резерва и отрепетированного переключения. Обе цифры берут из требований бизнеса, а не из возможностей текущей схемы.

  2. #dvo_backup_dr2 / 5
    База реплицируется на две реплики. Достаточно ли этого вместо резервных копий?
    A)Достаточно: реплики хранят полную копию данных
    B)Нет: ошибочное удаление доедет до реплик за секунды
    C)Достаточно, если реплики стоят в разных зонах доступности
    D)Нет, но хватит снапшотов дисков раз в неделю
    показать ответ и разбор
    +B)Нет: ошибочное удаление доедет до реплик за секунды

    // разбор: Репликация защищает от отказа узла, а не от ошибки: команда, снёсшая таблицу, приедет на реплики мгновенно и не оставит выбора. Нужен независимый по времени слепок — резервная копия плюс архив журнала для восстановления на точку до сбоя. Хранят их отдельно от боевой системы и желательно с защитой от удаления, чтобы взломанный доступ не снёс заодно и копии.

  3. #dvo_backup_dr3 / 5
    Копии снимаются каждую ночь, задание зелёное уже год. Что здесь всё ещё не сделано?
    A)Копии стоит дублировать во второе хранилище
    B)Задание надо перевести на инкрементальную схему
    C)Восстановление ни разу не проверяли и время его не мерили
    D)Не настроено уведомление об успешном завершении задания
    показать ответ и разбор
    +C)Восстановление ни разу не проверяли и время его не мерили

    // разбор: Зелёное задание говорит лишь о том, что файл записался. Пока из него не подняли рабочую систему, неизвестно, полон ли дамп, читается ли он, есть ли ключи шифрования, хватает ли места и укладывается ли восстановление в RTO. Потому учения делают по расписанию: поднять копию в отдельном окружении, прогнать проверки целостности, замерить время и записать результат.

  4. #dvo_backup_dr4 / 5
    Резервные копии лежат на том же сервере/в том же аккаунте, что и прод. Какое правило это нарушает?
    A)3-2-1: копии офсайт и часть неизменяемой
    B)Копии должны совпадать с продом по формату один в один
    C)Бэкапы надо снимать только вручную, не по расписанию
    D)Резервные копии положено хранить дольше самих данных
    показать ответ и разбор
    +A)3-2-1: копии офсайт и часть неизменяемой

    // разбор: Правило 3-2-1: три копии данных, на двух разных типах носителей, одна — офсайт (в другом месте/аккаунте/регионе). Бэкапы рядом с продом бесполезны против того, что убивает прод: пожар/потеря региона, компрометация аккаунта, шифровальщик — снесут заодно и копии. Поэтому часть копий держат вне досягаемости и неизменяемыми (immutable/WORM, отдельные права), чтобы их нельзя было затереть вместе с продом.

  5. #dvo_backup_dr5 / 5
    Снимок диска работающей базы восстановили — а данные оказались битыми/несогласованными. Почему?
    A)Снимок диска для баз данных использовать не стоит
    B)Диск был зашифрован, поэтому данные нечитаемы
    C)Восстановили не на ту версию движка базы
    D)Снимок «на ходу» поймал незавершённые записи
    показать ответ и разбор
    +D)Снимок «на ходу» поймал незавершённые записи

    // разбор: Снимок диска работающей БД без согласования — crash-consistent: он ловит момент как при внезапном выключении, с незавершёнными транзакциями и данными в кэше, ещё не сброшенными на диск. Отсюда битость. Нужен app-consistent бэкап: заморозить/согласовать состояние (нативный дамп БД, quiesce/flush перед снимком, снапшот через механизм БД, согласованный снапшот файловой системы). Тогда копия соответствует целостному состоянию.

дальше

Теорию прочитали. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.