Иногда проснувшись утром отчетливо понимаешь — что то не так. Хотя ты побрился и даже ни разу не порезался, кофе не выкипел, на улице солнечное утро, добрался до работы быстро и без приключений, вроде бы все хорошо, а все равно что то не так. Но войдя в офис ты видишь общую панику, истеричные вопли, о том, что все пропало и «весь офисный планктон» умрет, а ты находишься во главе тех кто погибнет.
Оказывается ночью отказали файловый и почтовый серверы. И тут понимаешь, что не с проста утро началось так хорошо. Работы предстоит достаточно, но данные надежно сохранены, ибо ты позаботился об их резервном копировании.
В принципе обычная рабочая ситуация, если есть бекапы данных. Именно «о вовремя сделанном бекапе» мы сегодня и поговорим.
Систем резервного копирования данных достаточно много, с открытым исходным кодом — значительно меньше, а уровня предприятия, да еще и с открытым кодом можно пересчитать по пальцам рук, ну или ног, кому как удобнее.
После детального изучения возможностей была выбрана система с неброским названием 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 сервера, ведь системы мониторинга никто не отменял, да и наверное столь важные серверы можно развернуть на рейд массивах.
Ситуация со сбоем сразу двух серверов вымышленная и приведена исключительно для примера.
+44
21 марта 2010, 18:45
136
+6
Mithgol 21 марта 2010, 20:50 #
Благослови тя Господь, добрый человек.
+1
bog.pp.ru/work/bacula.html
не моё, так что все плюсы этому человеку, я только нашёл этот сайт на просторах интернета.
0
За то и спасибо…
Перерыть весь Инет для себя — нереально…
+3
alexpaknix 21 марта 2010, 21:28 #
А кто ни будь использовал эту систему для создания/восстановления резервных копий машин под windows? Интересны отзывы
+1
princeps 22 марта 2010, 09:10 # ↑
я пробовал
www.lissyara.su/articles/freebsd/programms/bacula/
0
Встроено в ALT Linux «Школьный сервер» с простым и удобным интерфейсом управления.
Для тех, кому консоль — смерть…
Не ради рекламы ALT Linux, но ради информации о применении Subj.
0
logan 22 марта 2010, 10:43 # ↑
Я использую. Работает.
+1
mitnlag 21 марта 2010, 23:44 #
Для бакулы есть отличный веб-интерфейс bacula-web.
Скриншот с сайта в адском качестве
0
bondbig 22 марта 2010, 04:58 # ↑
кстати, у меня так и не получилось прикрутить этот веб-интерфейс, все зависимости соблюдены, тест какой-то встроенный в него показывает «ОК», но в итоге не работает, засранец такой. Может у кого есть положительный опыт прикручивания веб-морды к Бакула?
0
Werebear 22 марта 2010, 07:16 # ↑
Довольно легко прикрутился.
0
bondbig 22 марта 2010, 07:47 # ↑
Вы на какой ОС пробовали? Я на работе применяю SLES, на ней не хочет работать.
0
logan 22 марта 2010, 10:44 # ↑
Проверяйте соотвествие версий. Он не со всеми версиями работает.
0
bondbig 22 марта 2010, 10:45 # ↑
да, надо попробовать снова, год прошел уже с той попытки.
0
Да уж, надо было действительно поискать такой скрин.
Вот все на странице официально, свежие, с хорошим качеством.
www.bacula.org/en/?page=screenshot
0
pepelac 27 марта 2010, 21:36 # ↑
Самый вменяемый вэб интерфейс к бакуле — Webacula. Юзаю уже пару лет её.
0
Статья рассказывает про очень интересный продукт, который хочется попробовать.
Единственное, замечание — сложно понять на какой системе и в каком файле нужно прописывать те или иные опции, а так же — какой кусок кода к чему относиться. Было бы хорошо добавить перед кодом путь к файлу. Спасибо )
А так — плюс!
0
Исправил, теперь указанно к какому из конфигов относятся секции и на каком из серверов.
Спасибо.
0
Werebear 21 марта 2010, 23:50 #
Хорошая статья. Особенно если учесть что рунете про нее довольно мало.
Как раз недавно с ней разбирался.
Из недостатков bacula стоит отметить недостаточно гибкий шедулер, а также некоторая недоработанность по части работы с винчестерами. Видно что система в основном под ленту делалась. Еще мне не очень понравилась скорость на множестве мелких файлов, но возможно я сам чего то не то сделал, хочу заняться оптимизацией.
К bacula кстати есть неплохой веб интерфейс Webacula webacula.sourceforge.net/index_ru.html
0
Меня шедулер полностью устроил, хотя на вкус и цвет все фломастеры разные.
Вместо веб интерфейса пользуюсь bacula-console-qt, очень удобно, особенно восстанавливать файлы.
0
Werebear 22 марта 2010, 07:24 # ↑
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
DarkboodZed 22 марта 2010, 00:04 #
Следующий вопрос возник, можно ли с помощью bacula снимать образы дисков.
А системного? А с рабочей машины?
0
Werebear 22 марта 2010, 00:10 # ↑
Напрямую нет. Можно заставить ее выполнять скрипт и забирать конкретный файл.
0
С целью «быстро сделать такую же машинку»?
Нужен загрузочный диск с режимом «Восстановление из резервной копии».
Теоретически — можно. Попытку реализовать видел, но не проверял.
Где видел, не скажу, а то обвинят в рекламе ;)
0
princeps 22 марта 2010, 11:00 # ↑
в документации написано, как это делать
0
logan 22 марта 2010, 10:45 # ↑
Если файловая система умеет делать snapshots — то да, можно. DUMP-ом снимать образ с загрузочного винта нельзя.
0
Может ли бакапать mysql DB?
0
StamPit 22 марта 2010, 01:38 # ↑
Легко. Но не совсем on-line, ибо mysqldump блокирует таблицы.
0
walker 22 марта 2010, 02:40 # ↑
зависит от типа engine — в innodb блокировка только записей участвующих в транзакции
0
StamPit 22 марта 2010, 08:42 # ↑
Спасибо за уточнение, бакулой бэкапил только MyISAM.
0
В свое время, когда смотрел решения для бэкапа, бакула показалась ну уж слишком сложной и навороченной. В конце концов хватило bksh на сервере бэкапов и скрипта в cron на каждом резервируемом сервере:
tar --exclude=/все/ненужное -cpvf — /все/нужное | bzip2 -9 | ssh -T backups@backupserver `hostname`.tar.bz2 -t60
0
luckyredhot 22 марта 2010, 02:55 # ↑
Иногда просто решение самое лучшее :) Но в Вашем варианте не предусмотрено инкрементальный бэкап. Иногда это очень важно
0
glebofff 22 марта 2010, 10:52 # ↑
Не менее важным считаю чтение мануалов, люди не зря их пишут.
gtar -cvf — /всё/нужное -g /var/log/нужное.snar | bzip2 -9 | \
ssh -T backup@server cat ">" "`hostname`-`date "+%Y-%m-%d"`".tar.bz2
0
luckyredhot 22 марта 2010, 23:12 # ↑
Спасибо, в избранное. Надеюсь, вближайшее время появится возможность читать маны снова :)
englishextra 22 марта 2010, 03:01 #
>>>ротация бекапов
Не увидел примеров
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 # максимальное количество том которыми может #оперировать бакула
}
englishextra 22 марта 2010, 05:15 # ↑
спасибо
+1
Zagrebelion 22 марта 2010, 07:24 #
Внедряя готовую (или разрабатывая мелкую самописную) систему бакапов необходимо заранее, в спокойной обстановке, написать «восстановление из бакапов step-by-step», выполнить тестовое восстановление, а если всё нормально, то заламинировать и прибить документ гвоздиками на стену.
+1
Надеюсь этот человек не будет против, но самый исчерпывающий мануал по бакуле и многому другому вы найдёте тут: bog.pp.ru/work/bacula.html
0
Как раз собирался статью писать… Ну ладно. все равно ее напишу. :)
0
кто-нибудь делал связку bacula — Amazon S3?
0
Вот когда первый раз увидел статью подумал что слишком сложная.
Когда начал с бакулой разбираться эта статья оказалась самой простой и полезной!
Вообще очень рекомендую эту систему. Мощная, не требовательная к ресурсам
0
Raven2000 12 июля 2011, 16:21 #
Написал статью про Bacula более расширенная и дополненная web интерфейсом.
0
Raven2000 12 июля 2011, 16:22 #
www.ignix.ru/book/freebsd/daemon/bacula
0
А как у нее логгированием управлять?