Настройка и понимание Bacula

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

    В принципе обычная рабочая ситуация, если есть бекапы данных. Именно «о вовремя сделанном бекапе» мы сегодня и поговорим.
    Систем резервного копирования данных достаточно много, с открытым исходным кодом — значительно меньше, а уровня предприятия, да еще и с открытым кодом можно пересчитать по пальцам рук, ну или ног, кому как удобнее.
    После детального изучения возможностей была выбрана система с неброским названием Bacula.
    Минимальный список требований:
    1.клиент-серверная архитектура
    2.возможность бекапа. восттановления nix,win систем
    3.различные варианты бекапов (полный, дифференциальный, инкрементальный )
    4.возможность варировать тип бекапа от времени выполнения
    5.ротация бекапов
    6.«достаточная» документированность
    7.высокая надежность (уровня «палкой не убьешь»)
    Кто слышит в первые о Bacula, советую посетить википедию, дабы иметь минимальное представление от теме «статьи».
    Для тех, кто «осилил много букв», но не желает лазать по википедии привожу список основных модулей.
    Bacula Director — процесс управляющий системой в целом(управление, планирование, восстановление бекапов).
    Storage Director — запускается на сервере отвечающим за «физическое» хранение данных.
    File Director — сервис запускаемый на каждом из клиентов.
    Bconsole — консоль управления.

    Задание: наладить систему резервного копирования и восстановления данных, таким образом, что бы: на server1 и server3 в понедельник делался «полный» бекап, со вторника и до воскресенья включительно дифф. бекпы, а для server2 всю неделю делались «полные» бекапы.
    Данные должны храниться не менее 3х недель.
    Для примера возьмем конфигурацию для резервного копирования и восстановления данных с server3.

    Начнем с настройки Bacula Director
    (файл конфига: /etc/bacula/bacula-dir.conf. Расположение: сервер с запущенным bacula-director )
    Director {
    Name = backup-dir
    Dirport = 9101
    QueryFile = "/etc/bacula/scripts/query.sql" #набор sql запросов для работы с метаданными
    WorkingDirectory = "/var/lib/bacula"
    PidDirectory = "/var/run/bacula"
    Password = "some_password"
    Messages = Daemon
    DirAddress = 10.10.0.1
    }


    В связи с тем, что система интенсивно хранит метаданные в базе данных настраиваем доступ к mysql базе данных.
    Catalog {
    Name = MyCatalog
    dbname = bacula; DB Address = "10.10.0.1"; user = bacula; password = "some_password"
    }

    Настраиваем доступ к консоли управления
    Console {
    Name = backup-mon
    Password = "some_password"
    CommandACL = status, .status
    }

    Отправка отчетов о проделанной работе на почту администратору
    Messages {
    Name = Daemon
    mailcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
    mail = admin@domain.com = all, !skipped
    console = all, !skipped, !saved
    append = "/var/lib/bacula/log" = all, !skipped
    }

    Определяем сервера «хранилища»
    Storage {
    Name = stor_server1
    Address = 10.10.0.2
    SDPort = 9103
    Password = "storage_pass"
    Device = FileStorage
    Media Type = File
    }

    Создаем расписания согласно которому будем выполнять задания копирования или восстановления.
    Согласно расписанию в понедельник будет создан «полный» бекап, в остальные дни будут создаваться дифференциальные бекапы. Так например, что бы восстановить данные за пятницу, необходимо развернуть задание бекапа выполненное в понедельник, после чего «сверху накатить» пятничный диф. бекап.
    Schedule {
    Name = "WeeklyDiff"
    Run = Level=Full on mon at 05:01
    Run = Level=Differential on tue-sun at 02:02
    }

    Расписание, для создания «полных» бекапов. Применяется для данных, потеря которых приведет к «полному» разочарованию начальства в «вашей квалификации» с занесением в личное дело, или «в грудную клетку», кому как повезет.
    Schedule {
    Name = "WeeklyFull"
    Run = Level=Full on mon-sun at 03:03
    }

    Создаем задание для бекапа сервера server3
    Job {
    Name = "server3" #Имя задания
    Type = Backup #Тип работы(создание бекапа)
    Level = Differential #Уровень бекапа
    Client=server3-fd #Клиент на котором будет производиться бекап
    FileSet="server3" #Где описано как и какие файлы будем сохранять
    Storage = stor_server1 #Куда будем «сливать» бекап
    Pool = mainpool #Определяем с каким «пулом»(как) будем работать
    Messages = Standard #Как отрапортовать о проделанной работе
    Schedule = "WeeklyDiff" #По какому расписанию делать бекапы
    }


    Указываем что именно и как будем сохранять с сервера server3
    FileSet {
    Name = "server3"
    Include {
    Options {
    signature = MD5 #Для сверки используем MD5
    Compression=GZIP #Используем GZIP компрессию
    }
    File = /etc #Что именно бекапить
    File = /home/
    File = /var/www

    }

    Exclude { #А что не бекапить, например логи
    File = /home/logs
    File = /var/www/logs
    }
    }

    Описание параметров клиента, для server3
    Client {
    Name = server3-fd
    Address = 10.10.0.3
    FDPort = 9102
    Catalog = MyCatalog
    Password = "fd_password
    File Retention = 28 days #Сколько сохранять метаданные о сохраненных файлах для
    #данного клиента
    Job Retention = 28 days #Сколько сохранять метаданные касательно заданий для данного #клиента
    AutoPrune = yes #Может ли бакула очищать метаданные
    }

    В данной секции определяем параметры ротации.
    Исходя из конфигурации: мы используем 4 тома, в томе храниться не более 7 зданий (недельный бекап), время хранения тома 3 недели (21 день).
    Таким образом мы храним каждое задание 21 день, на 22 день очищаем том с данными заданиями и используем его заново.
    Так, если мы хотим хранить данные не 3 недели, а 4, то Volume Retention должны быть не 21, а 28 и Maximum Volumes должно быть 5. И не забудьте создать дополнительный том.
    Pool {
    Name = mainpool
    Pool Type = Backup
    Recycle = yes # Может ли бакула удалять задания из томов
    AutoPrune = yes # Может ли бакула очищать тома
    Volume Retention = 21 days # Как долго бакула должна "бояться" очистить том
    Maximum Volume Jobs = 7 # Сколько заданий хранить в каждом из томов
    Maximum Volumes = 4 # максимальное количество том которыми может #оперировать бакула
    }

    Описание задания, для восстановления данных
    Job {
    Name = "server3-resotre"
    Type = Restore
    Client=server3
    FileSet="server3"
    Storage = stor_server1
    Pool = mainpool
    Messages = Standard
    Where = /var/lib/bacula-restores
    }


    Для работы bacula-director, бекапа и восттановления «server3» данного конфига вполне достаточно.
    Что у нас получилось: в понедельник происходит «полный» бекап сервера, со вторника по понедельник идут диф. бекапы.
    На севере «хранилище» для данного задания создается 4 тома, в каждом томе хранится 7 заданий.(том линкуется(создается) командой label)
    По заполнении всех 4 томов, происходит очистка самого старого тома.
    Далее идет конфиг сервера «хранилища»(storage director) и клиента(file director) для сервера server3

    Описание настроек для Bacula Storage Director
    (файл конфига: /etc/bacula/bacula-sd.conf. Расположение: сервер с запущенным bacula-sd (storage director) )
    Storage {
    Name = stor_server1
    SDPort = 9103
    WorkingDirectory = "/var/lib/bacula"
    Pid Directory = "/var/run/bacula"
    SDAddress = 10.10.0.2
    }
    Director {
    Name = backup-dir
    Password = "storage_pass"
    }

    Device {
    Name = FileStorage
    Media Type = File
    Archive Device = /var/bacula
    LabelMedia = yes;
    Random Access = Yes;
    AutomaticMount = yes;
    RemovableMedia = no;
    AlwaysOpen = no;
    }

    Messages {
    Name = Standard
    director = backup-dir = all
    }


    Описание настроек для file-director на сервере server3

    (файл конфига: /etc/bacula/bacula-fd.conf. Расположение: сервер с запущенным bacula-fd ( server3))
    Director {
    Name = backup-dir
    Password = "server3-fd"
    }

    FileDaemon {
    Name = server3-fd
    FDport = 9102
    WorkingDirectory = /var/lib/bacula
    Pid Directory = /var/run/bacula
    FDAddress = 10.10.0.3
    }

    Messages {
    Name = Standard
    director = server3-fd = all, !skipped, !restored
    }

    Надеюсь комментарии в конфигурационных файлах сервера «хранилища» и клиента на сервере server3 излишни.

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

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

    Комментарии 46

      +6
      Благослови тя Господь, добрый человек.
        +1
        bog.pp.ru/work/bacula.html
        не моё, так что все плюсы этому человеку, я только нашёл этот сайт на просторах интернета.
          0
          За то и спасибо…
          Перерыть весь Инет для себя — нереально…
        +3
        А кто ни будь использовал эту систему для создания/восстановления резервных копий машин под windows? Интересны отзывы
          +1
            0
            Встроено в ALT Linux «Школьный сервер» с простым и удобным интерфейсом управления.
            Для тех, кому консоль — смерть…
            Не ради рекламы ALT Linux, но ради информации о применении Subj.
              0
              Я использую. Работает.
              +1
              Для бакулы есть отличный веб-интерфейс bacula-web.
              Скриншот с сайта в адском качестве
                0
                кстати, у меня так и не получилось прикрутить этот веб-интерфейс, все зависимости соблюдены, тест какой-то встроенный в него показывает «ОК», но в итоге не работает, засранец такой. Может у кого есть положительный опыт прикручивания веб-морды к Бакула?
                  0
                  Довольно легко прикрутился.
                    0
                    Вы на какой ОС пробовали? Я на работе применяю SLES, на ней не хочет работать.
                      0
                      Проверяйте соотвествие версий. Он не со всеми версиями работает.
                        0
                        да, надо попробовать снова, год прошел уже с той попытки.
                  0
                  Да уж, надо было действительно поискать такой скрин.
                  Вот все на странице официально, свежие, с хорошим качеством.
                  www.bacula.org/en/?page=screenshot
                    0
                    Самый вменяемый вэб интерфейс к бакуле — Webacula. Юзаю уже пару лет её.
                    0
                    Статья рассказывает про очень интересный продукт, который хочется попробовать.
                    Единственное, замечание — сложно понять на какой системе и в каком файле нужно прописывать те или иные опции, а так же — какой кусок кода к чему относиться. Было бы хорошо добавить перед кодом путь к файлу. Спасибо )
                    А так — плюс!
                      0
                      Исправил, теперь указанно к какому из конфигов относятся секции и на каком из серверов.
                      Спасибо.
                      0
                      Хорошая статья. Особенно если учесть что рунете про нее довольно мало.
                      Как раз недавно с ней разбирался.
                      Из недостатков bacula стоит отметить недостаточно гибкий шедулер, а также некоторая недоработанность по части работы с винчестерами. Видно что система в основном под ленту делалась. Еще мне не очень понравилась скорость на множестве мелких файлов, но возможно я сам чего то не то сделал, хочу заняться оптимизацией.
                      К bacula кстати есть неплохой веб интерфейс Webacula webacula.sourceforge.net/index_ru.html
                        0
                        Меня шедулер полностью устроил, хотя на вкус и цвет все фломастеры разные.
                        Вместо веб интерфейса пользуюсь bacula-console-qt, очень удобно, особенно восстанавливать файлы.
                          0
                          bacula-console-qt тоже пользуюсь.
                          А с шедулерем там все хорошо если не закорачиваться. К примеру задачу делать бекап через день на разные винчестеры просто на нем сделать нельзя. Пришлось писать вот так с некоторой избыточностью.

                          Schedule {
                          Name= «WeeklyCycle-every-first»
                          Run = Full 1st sat at 1:00
                          Run = Incremental mon at 1:00
                          Run = Incremental wed at 1:00
                          Run = Incremental fri at 1:00
                          Run = Differential sat at 1:00
                          }

                          Schedule {
                          Name= «WeeklyCycle-every-second»
                          Run = Full 3rd sun at 2:00
                          Run = Incremental tue at 2:00
                          Run = Incremental thu at 2:00
                          Run = Incremental sat at 2:00
                          Run = Differential sun at 2:00
                          }
                        0
                        Следующий вопрос возник, можно ли с помощью bacula снимать образы дисков.
                        А системного? А с рабочей машины?
                          0
                          Напрямую нет. Можно заставить ее выполнять скрипт и забирать конкретный файл.
                            0
                            С целью «быстро сделать такую же машинку»?
                            Нужен загрузочный диск с режимом «Восстановление из резервной копии».
                            Теоретически — можно. Попытку реализовать видел, но не проверял.
                            Где видел, не скажу, а то обвинят в рекламе ;)
                            0
                            Если файловая система умеет делать snapshots — то да, можно. DUMP-ом снимать образ с загрузочного винта нельзя.
                            0
                            Может ли бакапать mysql DB?
                              0
                              Легко. Но не совсем on-line, ибо mysqldump блокирует таблицы.
                                0
                                зависит от типа engine — в innodb блокировка только записей участвующих в транзакции
                                  0
                                  Спасибо за уточнение, бакулой бэкапил только MyISAM.
                              0
                              В свое время, когда смотрел решения для бэкапа, бакула показалась ну уж слишком сложной и навороченной. В конце концов хватило bksh на сервере бэкапов и скрипта в cron на каждом резервируемом сервере:
                              tar --exclude=/все/ненужное -cpvf — /все/нужное | bzip2 -9 | ssh -T backups@backupserver `hostname`.tar.bz2 -t60
                                0
                                Иногда просто решение самое лучшее :) Но в Вашем варианте не предусмотрено инкрементальный бэкап. Иногда это очень важно
                                  0
                                  Не менее важным считаю чтение мануалов, люди не зря их пишут.

                                  gtar -cvf — /всё/нужное -g /var/log/нужное.snar | bzip2 -9 | \
                                  ssh -T backup@server cat ">" "`hostname`-`date "+%Y-%m-%d"`".tar.bz2
                                    0
                                    Спасибо, в избранное. Надеюсь, вближайшее время появится возможность читать маны снова :)
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  0
                                  Добавил описание.
                                  В данной секции определяем параметры ротации.
                                  Исходя из конфигурации: мы используем 4 тома, в томе храниться не более 7 зданий (недельный бекап), время хранения тома 3 недели (21 день).
                                  Таким образом мы храним каждое задание 21 день, на 22 день очищаем том с данными заданиями и используем его заново.
                                  Так, если мы хотим хранить данные не 3 недели, а 4, то Volume Retention должны быть не 21, а 28 и Maximum Volumes должно быть 5. И не забудьте создать дополнительный том.
                                  Pool {
                                  Name = mainpool
                                  Pool Type = Backup
                                  Recycle = yes # Может ли бакула удалять задания из томов
                                  AutoPrune = yes # Может ли бакула очищать тома
                                  Volume Retention = 21 days # Как долго бакула должна "бояться" очистить том
                                  Maximum Volume Jobs = 7 # Сколько заданий хранить в каждом из томов
                                  Maximum Volumes = 4 # максимальное количество том которыми может #оперировать бакула
                                  }
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                  +1
                                  Внедряя готовую (или разрабатывая мелкую самописную) систему бакапов необходимо заранее, в спокойной обстановке, написать «восстановление из бакапов step-by-step», выполнить тестовое восстановление, а если всё нормально, то заламинировать и прибить документ гвоздиками на стену.
                                    +1
                                    Надеюсь этот человек не будет против, но самый исчерпывающий мануал по бакуле и многому другому вы найдёте тут: bog.pp.ru/work/bacula.html
                                      0
                                      Как раз собирался статью писать… Ну ладно. все равно ее напишу. :)
                                        0
                                        кто-нибудь делал связку bacula — Amazon S3?
                                          0
                                          Вот когда первый раз увидел статью подумал что слишком сложная.

                                          Когда начал с бакулой разбираться эта статья оказалась самой простой и полезной!

                                          Вообще очень рекомендую эту систему. Мощная, не требовательная к ресурсам
                                            0
                                            Написал статью про Bacula более расширенная и дополненная web интерфейсом.
                                                0
                                                А как у нее логгированием управлять?
                                                  0
                                                  при большом количестве серверов = большом объеме даных для резервного копирования, существенно увеличивается время, необходимое на бэкап.
                                                  Я находился в ситуации, когда бэкапы всех серверов LAMP (linux-apache-mysql) выполнялись около 8-ми часов. Из-за большого размера баз данных и вэб контента.
                                                  Для решения даной проблемы было решено переводить все сервера на ежедневный диференциальный бэкап. Полные бэкапы делать только в пятницу, субботу и воскресение для отдельных 3-х груп серверов. Как не странно времени это не сильно сэкономило. (~1,5 часа).
                                                  Спасло положение сжатие баз данных вызовом отдельного скрипта:

                                                  #!/bin/bash
                                                  root_pass='mysql_root_password'
                                                  databases=`echo «show databases»|mysql -u root -p$root_pass|grep -v "^D" | grep -v «information_schema»`
                                                  if [ "$1" == «full» ]; then
                                                  echo Starting full backup
                                                  for FLS in ${databases}
                                                  do
                                                  /usr/bin/mysqldump --force --single-transaction --opt -u root -p$root_pass ${FLS} |/bin/bzip2 -c -9 > /var/lib/mysql/backup/${FLS}.full.mysql.bz2
                                                  done
                                                  fi
                                                  if [ "$1" == «clean» ]; then
                                                  /bin/rm /var/lib/mysql/backup/*
                                                  fi

                                                  размещается он на клиент-сервере в папке /etc/bacula/scripts/. Устанавливаются права на выполнение (chmod +x).
                                                  Также нужно создать папку куда будут падать сжатые базы: mkdir /var/lib/mysql/backup

                                                  На сервере бакулы нужно создать отдельную джобу для бэкапа баз даных, где и указать использование скрипта:
                                                  JobDefs {
                                                  Name = «DabasesBackupJobName»
                                                  Type = Backup
                                                  Level = Full
                                                  ClientRunBeforeJob = "/etc/bacula/scripts/mysqlbackup_script_name 'full'"
                                                  ClientRunAfterJob = "/etc/bacula/scripts/mysqlbackup_script_name 'clean'"
                                                  }

                                                  На этом этапе пару сотен гигабайт предварительно сжатых и отобраных даных залетают на сервер бакулы на 2-3 часа.

                                                  Еще лучше сделать крон задание и запускать этот скрипт в одно и то же время на всех серверах, а дампы забирать вместе с другими файлами. Просто нужно включить /var/lib/mysql/backup в соответсвующий FileSet (если вы делаете бэкап выбраных папок, а не полный бэкап всего сервера. + ~1 час экономии.
                                                    0
                                                    Мне кажется, что тут используется один пул под все бекапы, что в принципе не совсем правильно.

                                                    Если у вас для хранения бекапов только один сервер, то имеет смысл делать 3 пула: для полных, дифференциальных и инкрементальных бекапов. При этом для каждого пула указывается свой Volume Retention, чтобы можно было хранить полные бекапы несколько месяцев, дифференциальные месяц, а инкрементальные за неделю (при том, что полные бекапы делаются раз в месяц, дифференциальные — раз в неделю, а инкрементальные — каждый день).

                                                    Еще удобно использовать правило, что один Volume, это одна задача и маркировать его примерно так: ${Client}_${JobId}_${Level}, в этом случае удобнее файлами управлять. Также можно использовать виртуальный AutoChanger, т.к. Device в bacula-sd умеет работать только с одним открытым Volume.

                                                    P.S. В этой статье не упоминается дедупликация на клиенте и сторадже — видимо потому что статья 2010 года. С тех пор Bacula заметно развилась, если хотите бесплатно, то советую посмотреть на свежую версию 9, в ней появилось много функций из Enterprise-версии (базовая дедупликация, Aligned Volumes, Client Initiated Backup, Progressive Virtual Full и другие). Ну или сразу взять Enterprise, в нее фичи добавляют быстрее, чем в Community версию (насколько в знаю, в русскоязычном сегменте его продает только backup-solutions.ru, или можно напрямик в baculasystems.com).

                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                    Самое читаемое