«Когда-то я был админом, который не делал бэкапы. Теперь я очень грустный, но бэкапы делаю», — цитата одного сисадмина.

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

Предлагаем в честь праздника сыграть в игру «Было/ не было». Мы опишем частые косяки и лучшие практики при работе с бэкапами, а вы поделитесь в комментариях, что из этого было или не было в вашей карьере.

Поучительные байки в треде приветствуются! Мы же в текст добавили истории клиентов Selectel, которые подключили услугу автоматических бэкапов по расписанию в облачной платформе.

Составлял подробную документацию по бэкапам


Достойный подход, одобренный сотнями крепко спящих по ночам админов. Многие согласятся, что первый шаг в работе с бэкапами — это составление документа, в котором описывается, что и как часто нужно делать, где хранить, как восстанавливать. Нередко такой документ является частью Disaster Recovery Plan компании.

Документация нужна не только для того, чтобы ничего не забыть, но и выбрать максимально рациональный способ снятия и хранения бэкапов. Так получится найти баланс между эффективным расходованием средств и надежностью решения. Ведь далеко не каждой системе подойдет ежедневный полный бэкап.

Вот что рассказывает о своем опыте клиент Selectel, который занимается инфраструктурой страховой компании:

«По разным системам у нас есть разные регламенты бэкапирования. Их формулируют владельцы сервиса / приложения исходя из собственных аргументированных потребностей и требований государственных регуляторов, если они есть.

Некоторые системы бэкапятся каждый день или каждую неделю. Если есть активная на запись база данных и потери критичны, бэкап снимается с логов каждый час. Если база большая, то в будни ночью делается дифференциальный бэкап, а полный — в выходные. Для некоторых данных нужно еще организовать долгосрочное хранение на ленточных кассетах до 5-10 лет.

В ответственности админа могут быть сотни серверов. Знать и помнить требования к бэкапам каждого — невыполнимая задача. Документация выручает: сисадмин все настраивает по регламенту и далее следит, чтобы все работало. К составлению таких документов в компании относятся крайне серьезно».

Ошибся с выбором окна снятия бэкапов


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

Разработчики знают, что, когда бэкапится база данных, индексы лучше не обновлять, иначе задачи накладываются друг на друга. Как минимум обе операции будут идти дольше и часть ресурсов будет «выедаться» текущей нагрузкой, как максимум — наткнешься на более диковинные конфликты, известные лишь DBA.

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

«Все расписания бэкапов у нас лежат в репозитории. На их основании можно найти свободное окно для резервирования нового сервиса.

Окно определяется в зависимости от порядка взаимодействия с сервисом. Где-то пользователи работают с 9:00 до 18:00 — например, бухгалтеры в 1С. После окончания рабочего дня они не задерживаются, так что бэкапиться можно с 6 вечера.

С какими-то системами люди могут взаимодействовать постоянно. Тогда мы снимаем бэкапы с реплики в момент минимальной нагрузки. Потому что, когда реплика бэкапится, входящие записи копятся и занимают место. И нужно рассчитать так, чтобы места хватило как на сам рост базы, так и для wal»
.

Использовал непроверенное решение для бэкапов


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

Один из клиентов рассказал такую поучительную историю из прошлого:

«Однажды использовал бесплатную программу, которая делала что-то наподобие zip-архивов данных. Впоследствии оказалось, что zip нечитаемые — все архивы побиты. К сожалению, понял я это только тогда, когда нужно было восстановить данные. Сделать это, разумеется, не удалось. Зато с тех пор я всегда проверяю работоспособность копий».

Не проверял работоспособность резервных копий


Говорят, все системные администраторы делятся на три группы: те, кто не делает бэкапы, те, кто делает бэкапы, и те, кто проверяет их консистентность и работоспособность.

Действительно, далеко не всегда бэкапы — это «сделал и забыл». Работа по проверке целостности и периодические восстановления из бэкапа не менее важны. Это даст гарантии, что в экстренном случае резервные копии восстановятся штатно. То есть вы найдете их там, куда положили, они будут консистентными, и вы вернете последнюю версию системы за известное количество времени.

Способов проверки немало. Так, один из опрошенных нами специалистов пробовал и ручные проверки, и решения из «коробки»:

«Сейчас у меня нет регламентов проверки. Просто проверяю работоспособность копий время от времени. Делаю это нерегулярно, но, если настраиваю что-то новое, обязательно чекаю архив.

У ряда компаний этот процесс задокументирован. Так, мой коллега раз в полгода обязательно восстанавливал бэкап production-базы данных и передавал разработчикам на проверку. Некоторые команды хотят, например, видеть базу, развернутую из бэкапа только на чтение, чтобы убедиться, что все данные записаны корректно».

Другой сисадмин с десятилетним стажем уверен, что формирование механизмов проверки бэкапов требует много ресурсов, но, если они есть, нужно делать:

«При первом запуске системы и бэкапов проверяем работоспособность бэкапов и развертку из них. Если бюджет позволяет, проводим искусственные тесты возникновения внештатных ситуаций — так называемые Monkey testing.

В рамках теста начинаем отключать инфраструктуру по частям и, руководствуясь регламентом, тренируем необходимые действия в каждом случае. Такие тесты нужны в сложных системах, где есть распределенность не только за счет репликаций, но и функционала (если у вас микросервисы, например)».

Масштабные тесты нужны не всегда. Иногда для проверки достаточно развернуть пустой проект, наполнить его данными, сделать бэкап и восстановиться из него. Также есть практика закрывать риски для систем несколькими способами резервирования: одна копия из 3-4 будет целостной с большей вероятностью.

Использовал несколько способов резервного копирования


Кто-то называет это оверхедом, а кто-то — лучшими практиками. Тем не менее, как показывает опыт сисадминов, чем богаче панель инструментов для бэкапов, тем надежнее. В некоторых компаниях реализовывать бэкапы несколькими способами — корпоративная норма. Главное, чтобы было место для их хранения. Часть клиентов бэкапов по расписанию Selectel подключили решение как раз в добавку к существующим способам бэкапирования — чаще всего кастомным скриптам.

DevOps-специалист, с которым нам удалось поговорить, отметил, что несколько видов бэкапов полезны там, где нужно закрыть и риск падения инфраструктуры, и риск потери данных. Для критических сервисов стоит поднять реплику, чтобы быстро переключиться на нее при отказе «железа». Исключительно на RAID и SMART-мониторинг дисков полагаться не стоит.

Защита данных тоже может быть в двух вариациях. Вот, так, например, решал эту задачу один наш клиент:

«В нашей компании есть правило: резервируем всю инфраструктуру и всегда двумя способами. Так, база данных бэкапится и в режиме plain text — это чистый SQL, который описывает всю структуру базы данных, и в формате бинарных файлов. В экстренном случае это позволит нам более гибко подойти к восстановлению базы».


Не ставил алерты


Хорошо настроенные бэкапы усыпляют бдительность. Они могут долгое время работать без нареканий — вы уже забудете о них, но в определенный момент что-то может пойти не так. Регулярно проверять статус бэкапов сложно, особенно если их много. Правильным решением будет поставить уведомления в систему мониторинга или на личную почту о том, что случилось какое-то триггерное действие.

Один из опрошенных клиентов Selectel предлагает не мелочиться и ставить алерты на все: на факт снятия копии; на то, что копия не больше и не меньше, чем должна быть; на остаточный объем места на сервере, куда отправляются бэкапы (чтобы место не кончилось); на статус для команды бэкапа (может завершиться ошибкой) и другое.

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

«У нас есть проверка на размер бэкапа: он должен расти. То есть текущая резервная копия должна быть больше или равна предыдущей. Если бэкап меньше, сразу формируется тикет — мы расследуем причины. Иногда это связано не с ошибками в копировании, а, например, с чисткой базы. Проверки проводятся в среднем раз в неделю, в зависимости от объема базы данных. Скрипт запускается автоматически по планировщику в GitLab».

Хранил резервные копии на одном сервере с бэкапируемыми данными


Иногда это объясняется тем, что другого места нет и так экономнее (плохой сценарий). Или же так админ решает хранение горячей копии данных, чтобы восстановление конкретного утерянного файла происходило быстрее (хороший сценарий). В таком случае правильность решения определяется наличием холодной копии на стороннем сервере.

Не всегда проблема с системой может затронуть весь сервер. Например, если работник компании нечаянно удалит несколько важных файлов, самой инфраструктуре ничего не грозит. Но, если проблема более сложная, под раздачу попадет весь сервер вместе с бэкапами. Подобных случаев в практике немало. Вот, например, рассказ инженера, который администрировал серверы 1C:

«Ситуация: в пятницу вечером взломали сервер. В субботу бухгалтер захотел поработать, а у него ничего не открывалось. На самом сервере все файлы были зашифрованы. Хорошо, что резервные копии хранились отдельно и нам удалось все восстановить».

Проблема с сервером может произойти как в ПО, так и в «железной» части. Поэтому резервирование серверов часто идет рука об руку с бэкапами данных. Есть такая неприятная история:

«У сервера с базой данных сгорел блок питания — машина перестала работать. Блок питания заменили, но система не загружалась. Вчерашний бэкап “умер” вместе с сервером. Пришлось брать более старую холодную копию. Разницу между репликами восстанавливали вручную всем отделом: вспоминали, что делали последние два дня, какие документы выписывали и меняли».

Забывал делать бэкапы


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

Проблему забывчивости, нехватки времени и добрую половину ранее озвученных вызовов решит сервис бэкапов сетевых дисков по расписанию. Бэкапы создаются автоматически по плану, который достаточно настроить один раз и применить ко всем дискам. Для переноса резервных копий в хранилище используются выделенные сети провайдера (не нужно нужно думать о торможении систем из-за ограничений собственных каналов). А для объема хранимых бэкапов нет ограничений — можно забыть о страхе, что однажды бэкап не сделается из-за отсутствия свободного места на диске.

Цена за бэкап 1 ГБ данных — 3,70 рублей в месяц. Рассчитать цену за хранение ваших бэкапов можно по ссылке.

Комментарии (11)


  1. YMA
    31.03.2022 10:25
    +6

    Бэкап - лучшее снотворное ;) Когда я был студентом и подрабатывал сисадминством, в одной конторе был очень экономный владелец - даже на ПК, назначенном сервером, у него работал сотрудник. Об отдельной машине для бэкапов не было и речи, а про СХД/NAS тогда и не знали особо в малом бизнесе (1999 год). У меня тогда была практика, хоть как-то, но бэкап делать.

    В итоге сервер всё равно бэкапился по сети на другую пользовательскую машину с винчестером побольше. А там работал нехитрый скрипт, подчищающий бэкапы - неделю хранились ежедневные инкрементальные, потом в выходной делался недельный бэкап + ежегодно делался еще один, неудаляемый.

    В итоге, когда я уже там не работал года четыре - этот владелец позвонил, и спросил - кто занимается восстановлением данных. Диск на "сервере" всё-таки накрылся. И да, хэппи энд, машина пользователя уцелела и исправно сохранила бэкапы. А за пароль от архивов получил ящик пива ;)


    1. lodz Автор
      31.03.2022 12:17
      +1

      Респект за то, что делали бэкапы даже в таких условиях! Такая продуманность всегда окупается, и ящик пива — очень неплохая цена :D


  1. Akon32
    31.03.2022 10:53
    +2

    Мы же в текст добавили истории клиентов Selectel, которые подключили услугу автоматических бэкапов по расписанию в облачной платформе.

    Поучительные байки в треде приветствуются!

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


    1. lodz Автор
      31.03.2022 12:21

      Кстати, да, есть и такие истории( К сожалению, не всем провайдерам стоит доверять свои бэкапы. Только ооочень надежным, да и то все равно лучше подстраховаться холодной копией. Радует, что вы не стали жертвой!


    1. inkvizitor68sl
      31.03.2022 14:06
      +1

      Недорогой хостинг звали cloudmouse и, помнится, системных администраторов у них как раз не было.


  1. mkvmaks
    31.03.2022 20:16

    Делал всегда бэкап на отдельный сервак + переносной HDD. Не раз спасало.


    1. lodz Автор
      01.04.2022 14:56

      Вариант супер — две реплики всегда лучше одной. А руками делали или автоматизировали?


      1. mkvmaks
        02.04.2022 22:19

        Руками, т.к. HDD сам лично подключал, копировал, смотрел, что копировать. Базы делали бэкапы, их сам тоже переносил. В принципе да долго, но зато с гарантией и эта гарантия меня не раз выручала. Да ПК было всего 25, если было бы штук 200, тогда конечно делал бы все по-другому. А самое классное, меня это спасло от шифровальщика ))) Я просто все восстановил, быза пострадали суточные, а остальные данные недельные - край 2-х недельные.


  1. askharitonov
    31.03.2022 21:17

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


    1. lodz Автор
      01.04.2022 15:00

      Звучит как анекдот, конечно) Похоже, это закончилось плохо.

      А вы как делаете бэкапы?


  1. speshuric
    02.04.2022 18:54

    А я 22 года назад восстановил бэкап БД MS SQL не в отдельную среду (нужна была копия системы то ли для проверки чего-то, то ли для долгого отчета), а на её старое место. Меня, конечно, спасли резервные копии журналов транзакций (и то, что они делались, и то, что я вообще знал, что это такое), но "упс" был тот еще.

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