Резервное копирование серверов и баз данных

Настраиваю резервное копирование Linux-серверов, баз данных и файлов для небольших IT-команд: автоматически, с шифрованием и хранением отдельно от самих данных.

Главное в бэкапе - не копия, а восстановление. Поэтому в настройку входит проверка восстановления, и вы заранее знаете, сколько времени займёт возврат данных после сбоя.

  • PostgreSQL, MySQL, файлы
  • Шифрование и S3
  • Проверка восстановления

Что входит в настройку бэкапов

Можно начать с самого ценного, обычно это база данных, и добавить остальное позже.

Базы данных

База меняется каждую секунду, и копировать её нужно её же средствами, а не копированием файлов.

  • ✓PostgreSQL: дампы и непрерывный архив журналов
  • ✓MySQL и MariaDB
  • ✓восстановление на нужную минуту
  • ✓Redis и ClickHouse, если в них важные данные

Файлы и серверы

Загрузки пользователей, конфигурация, сертификаты.

  • ✓restic: дедупликация и шифрование
  • ✓после первой копии передаются только изменения
  • ✓без кеша и временных файлов
  • ✓конфигурация серверов в Git как ещё одна страховка

Хранение

Бэкап на том же сервере, что и данные, пропадёт вместе с ним.

  • ✓S3 у другого провайдера или в другом регионе
  • ✓шифрование до отправки
  • ✓версионирование и отдельные ключи доступа
  • ✓сроки хранения: дни, недели, месяцы

Расписание

Частота зависит от того, сколько данных можно потерять.

  • ✓база: от непрерывного архива до раза в сутки
  • ✓файлы: раз в сутки или чаще
  • ✓удаление старых копий по правилам
  • ✓запуск в часы низкой нагрузки

Проверка восстановления

Копия, из которой ни разу не пробовали восстановиться, - это надежда, а не бэкап.

  • ✓автоматическое восстановление на тестовом сервере
  • ✓проверка, что данные читаются и полны
  • ✓замер времени восстановления
  • ✓отчёт о каждой проверке

Алерты

Бэкапы часто ломаются молча: кончилось место, сменился пароль, отвалился ключ.

  • ✓алерт, если бэкап не выполнился
  • ✓контроль размера: резкое изменение - повод посмотреть
  • ✓свободное место в хранилище
  • ✓уведомления в Telegram

Защита от шифровальщиков

Тот, кто получил доступ к серверу, не должен получить доступ к бэкапам.

  • ✓хранилище с запретом удаления на срок
  • ✓ключи только на запись, без права удалять
  • ✓копия у другого провайдера
  • ✓алерт на массовое удаление

План восстановления

Когда сервер упал, разбираться в командах некогда.

  • ✓пошаговая инструкция под ваш проект
  • ✓кто и в каком порядке восстанавливает
  • ✓целевое время восстановления
  • ✓учебное восстановление по инструкции

Стоимость настройки резервного копирования

Стоимость зависит от числа серверов и баз. Оценку в часах даю до начала работ. Место в хранилище оплачивается провайдеру отдельно.

ФорматЦенаЧто входит
Аудит бэкаповот 10 000 ₽что копируется, где хранится, можно ли восстановиться; пробное восстановление и отчёт
Настройка3 000 ₽/часбэкапы баз и файлов, хранилище, шифрование, проверка восстановления, алерты
Обслуживание20 000 ₽/месконтроль бэкапов и проверок восстановления, реакция на сбои

Примеры расчёта

ЗадачаОценка
Бэкапы одной базы PostgreSQL в S3 с алертами2-4 часа
Бэкап файлов сервера через restic с шифрованием2-3 часа
Автоматическая проверка восстановления на тестовом сервере3-6 часов
План восстановления и учебное восстановление3-5 часов

Как проходит настройка

  1. 1

    Что нельзя потерять

    Определяем данные и допустимые потери: сколько часов работы не жалко и как быстро нужно восстановиться.

  2. 2

    Проверка текущих бэкапов

    Если бэкапы есть, пробую из них восстановиться. Часто это первое восстановление за всё время.

  3. 3

    Настройка

    Расписание, хранилище, шифрование и сроки хранения под ваши требования.

  4. 4

    Пробное восстановление

    Восстанавливаю данные на тестовом сервере и замеряю время.

  5. 5

    Контроль

    Подключаю алерты и автоматическую проверку восстановления, передаю инструкцию.

С чем приходят

Бэкап есть, а восстановиться не вышло

Копия оказалась пустой, неполной или без ключа шифрования. Узнают об этом в день аварии.

Бэкапы лежат на том же сервере

Сервер удалили или зашифровали, и копии пропали вместе с ним.

Бэкап делает хостер

Снапшот раз в сутки без проверки, а база в снимке работающего сервера может не подняться.

Данные удалили по ошибке

Нужна копия на вчерашний вечер, а хранится только последняя, уже без этих данных.

Правило 3-2-1

Классическое правило надёжного резервного копирования:

  • 3 копии данных: рабочая и две резервные;
  • 2 разных носителя или хранилища;
  • 1 копия в другом месте: у другого провайдера или в другом регионе.

Для небольшого проекта это выглядит так: рабочая база на сервере, ежедневный бэкап в S3 того же облака и еженедельная копия у другого провайдера. Сейчас к правилу часто добавляют копию, которую нельзя изменить или удалить, на случай шифровальщика.

Как проверить, что бэкап рабочий

Минимальная проверка, которую стоит делать хотя бы раз в месяц:

  1. Найдите последний бэкап и проверьте его дату: restic snapshots или список файлов в хранилище.
  2. Восстановите его на отдельный сервер, а не поверх рабочих данных.
  3. Для PostgreSQL восстановите дамп в пустую базу через pg_restore и сравните число строк в ключевых таблицах.
  4. Запустите приложение на восстановленных данных и проверьте вход и главные страницы.
  5. Запишите, сколько времени это заняло: это и есть ваше реальное время восстановления.

Если на каком-то шаге что-то пошло не так, хорошо, что это выяснилось сейчас, а не во время аварии.

Технологии

Инструменты
resticpg_dumpmysqldump
Базы
PostgreSQLMySQLRedisClickHouse
Хранилища
S3Yandex Object StorageSelectel S3
Контроль
PrometheusGrafanaTelegram

Примеры работ

IPTV-сервис: сервер можно поднять заново

Конфигурация и данные жили только на самих серверах, копий не было.

Настроил ежедневные бэкапы на внешнее хранилище и описал конфигурацию в Ansible: сервер поднимается из кода и последней копии данных.

~100 ТБтрафика в месяц обслуживает сервис

Мобильное приложение: бэкапы, которые проверены

Данные приложения нужно было защитить так, чтобы восстановление не оказалось сюрпризом.

Настроил бэкапы в S3 с регулярной проверкой восстановления и алертами в Telegram.

S3хранилище отдельно от серверов

Почему со мной удобно

Проверяю восстановление

Считаю бэкап рабочим только после того, как из него удалось восстановиться.

Данные остаются вашими

Хранилище и ключи шифрования оформлены на вас. Я не храню ваши данные у себя.

Без дорогих лицензий

restic и встроенные средства баз данных бесплатны. Вы платите только за место в хранилище.

Знаю, что важно приложению

Как бывший разработчик понимаю, какие данные нельзя потерять, а какие пересоздаются сами.

Частые вопросы

Сколько стоит настройка резервного копирования? +

Бэкапы одной базы PostgreSQL в S3 с алертами занимают 2-4 часа, по 3 000 ₽/час. Аудит существующих бэкапов с пробным восстановлением стоит от 10 000 ₽. Место в хранилище оплачивается провайдеру отдельно.

Как часто делать бэкапы? +

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

Сколько хранить резервные копии? +

Частая схема: ежедневные за неделю, еженедельные за месяц, ежемесячные за год. Сроки зависят от бизнеса и требований к хранению данных.

Хватит ли бэкапов от хостинга? +

Как дополнение - да, как единственная копия - нет: они хранятся у того же провайдера, редко проверяются, а база в снимке работающего сервера может не подняться.

Где хранить бэкапы? +

В S3-совместимом хранилище у другого провайдера или хотя бы в другом регионе. 100 ГБ в таком хранилище стоят несколько сотен рублей в месяц.

Можно ли восстановить базу на определённый момент? +

Да, для PostgreSQL и MySQL это делается через непрерывный архив журналов: базу можно вернуть на минуту до ошибочного удаления.

Оставить заявку

Напишите, какие у вас данные, где они лежат и как сейчас делаются бэкапы. Скажу, можно ли из них восстановиться и что стоит добавить.

Смотрите также