Настраиваем резервное копирование

Wednesday, 21 Apr 2010

Администрирование

Админы делятся на две категории:
те, у кого еще не пропадали данные
и те, кто уже делает резервные копии.
(с) Народная мудрость

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


Разумеется, хотелось бы, чтобы хостинг компании относились к таким событиям трезво ( я полагаю оборудование и помещение застрахованы ) и своевременно освещали в прессе как само событие, так и прогнозы по восстановлению датацентра. А если хостер приложит информацию по  компенсациям для пользователей услуг хостинга, то ему вообще цены не будет. Абсолютно непонятно почему hosting.ua молчал, но это мы оставим на их совести и вернемся к вопросу создания резервных копий.

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

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

FSBackup

Довольно мощный инструмент от Maxim Chirkov, работы по которому начались еще в далеком 2001-ом году.

Плюсы:

  • Гибкая работа с базами mysql и postgresql, вплоть до указания таблиц;
  • Поддерживается инкрементный тип бэкапа;
  • Поддерживается залив бэкапа на другой хост при помощи ssh или ftp протоколов;
  • Возможность шифрования бэкапа с помощью PGP;
  • Большое количество опций для конфигурирования бэкапа.

Минусы:

  • Конфиги находятся прямо в скриптах, это конечно хорошо для производительности, но несколько напрягает с точки зрения юзабилити и если бы не обзор – врядли я бы полез разбираться внутрь.

К сожалению при всех своих плюсах мы имеем типичный наколеночный продукт.  Тщательно отлаженный и доработанный, он все равно никогда не сравнится с такими гигантами как BoxBackup и Bacula. Видимо поэтому последние изменения в продукте датированы 2007-ым годом. Указал этот продукт в обзоре сугубо как лучший наколеночный продукт из всех имеющихся.

BoxBackup

Описание принципов работы этого инструмента находится тут. Продукт активно разрабатывается с 2004 года, и это первый серьезный продукт из найденных. У ребят есть trac, код покрыт юниттестами, а документация просто таки впечатляет. И хоть нативная работа с базами отсутствует, но это легко реализуется довешиванием вызова mysqldump на событие backup-start.

Плюсы:

  • Онлайн бэкап – файлы копируются по факту их изменения. Традиционный режим снапшота тоже возможен.
  • Используется механизм версифицирования – удаленные файлы и предыдущие версии будут доступны.
  • Шифрование данных

Минусы:

  • Отсутствует нормальный интерфейс. Есть сторонние инструменты, но они не внушают доверия.

Bacula

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

Плюсы:

  • Шифрование данных;
  • Большой зоопарк интерфейсов, от нативных gui приложений, до нескольких веб-интерфейсов;
  • Весьма гибкая и обширная система настроек.

Минусы:

  • В их сайте и документации сам черт ногу сломит. Видимо консультация и есть их основной источник заработка.
  • Архитектура заточена под enterprise, тобишь кроме софта который следит за файлами и софта, который принимает файло на хранение, нужно еще будет установить Director, который управляет демоном хранения данных.

Настраиваем резервное копирование

Из всех рассмотренных инструментов, bacula понравился больше всего ориентации на большой парк компьютеров и большого количества родных интерфейсов, в том числе и web. Было принято решение попробовать его в работе.

Установка софта не вызывает никаких сложностей. Традиционно распаковываем и собираем bacula-5.0.1.tar.gz:

./configure --with-mysql --with-python --with-openssl
make
make install

Разумеется у нас должны быть установлены mysql и python со своими devel пакетами, но как пользоваться менеджером пакетов я рассказывать не буду :)

Таким образом мы получим все три сервиса на одной машинке – хорошая возможность пощупать инструмент. Далее создаем базу:

/etc/bacula/grant_mysql_privileges -uroot -pпароль_рута
/etc/bacula/create_mysql_database -uroot -pпароль_рута
/etc/bacula/make_mysql_tables -uroot -pпароль_рута

И стартуем демоны

/etc/bacula/bacula start

Не так уж и сложно, да?

Переходим к настройке. В принципе, есть очень замечательная статья по настройке bacula с нуля, и я рекомендую её прочесть для общего понимания. С другой стороны, как ни странно, но конфиги уже содержат все нужные настроки и осталось только включить компрессию и указать список файлов. Дописываем в bacula-dir.conf:

# List of files to be backed up
FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
      compression = gzip
    }
    File = /var/www
    File = /etc/apache2
  }
}

Думаю принцип понятен и вы быстро подкинете свой список файлов. А как же базы? Да элементарно – пропишите их экспорт в Job RunBeforeJob с помощью mysqldump. Например

Job {
RunBeforeJob = "mysqldump -uroot -pпароль --databases db1 db2 db3 ... dbn --result-file=/var/dumps/databases.sql"
}

Ну и разумеется после этого /var/dumps нужно добавить в список файлов.

Осталось пару мелочей.

Проверяем создание бэкапа. Заходим в консоль, /etc/bacula/bconsole и вводим команду run, а затем выбираем первую задачу из списка. Консоль скажет что задача добавлена в очередь, а через некоторое время мы получим сообщение об ошибке “cannot find any appendable volumes”.  Тут нам поможет туториал – создадим том с помощью команды label. После рестарта сервисов все должно заработать и повторная попытка выполнить команду вручную должна привести к успеху.

Проверяем восстановление из бэкапа. Это самый важный этап, ибо иначе можно долго спокойно чета там писать, а потом в один прекрасный день окажется что восстановится не получится. К слову сказать у bacula изначально имеется задача для проверки восстановления, которая и выполняется регулярно. Ну а мы сейчас попробуем выполнить её вручную. Опять заходим в консоль /etc/bacula/bconsole и вводим команду run, но уже выбираем задачу с именем restore, после чего указываем для какого из бэкапов собственно выполнять восстановление и … и облом в виде ошибки “Cannot restore without a bootstrap file”. А вот тут надо обратится к руководству по восстановлению, которое я очень настойчиво рекомендую почитать дабы ознакомится со всеми возможностями системы.

Согласно руководству надо выполнить команду restore all, затем выбрать пункт 1 ” List last 20 Jobs run”, чтобы найти задачу для восстановления и ввести её код с помощью пункта 3 “Enter list of comma separated JobIds to select”, после чего в приглашении достаточно ввести done и идти смотреть распакованные файлы.

Что нам еще не хватает для полного счастья. Ну во-первых перенести bacula-sd на отдельный комп. Ну и может быть попробовать в работе веб интерфейс, хотя функциональность bconsole меня более чем устроила – ребята хорошо над ней поработали.

Настраиваем web-интерфейс. Все что нужно – распаковать и подкинуть bacula-web из архива bacula-gui-5.0.1.tar.gz

Удобство самой админки и её качество лично я оценил на троечку, ибо по меркам 2010 года это ацтой. К тому же, если вы попытаетесь воспользоваться ею до выполнения первого задания по бэкапу, то получите вместо графиков и текста “error query 4″ на главной странице. Кто разбирается в php может глянуть в код админки и ужаснутся. Резолюция по админке – лучше чем ничего.

Подведение итогов

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

, ,

Ваш отзыв

Please leave these two fields as-is:

Protected by Invisible Defender. Showed 403 to 901,709 bad guys.