Bacula, бекап различных сервисов

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Bacula, бекап различных сервисов

Непрочитанное сообщение kharkov_max » 2016-10-11 14:18:05

День добрый.

Хочется на полную заюзать данную систему, и бекапить по возможности все.
Собственно удачно получилось бекапить пользовательскую файлопомойку с нужными файлами.
Получилось как бекапить так и восстанавливать старые версии при необходимости.
Full backup и его инкрименты круто сохранили место на хранилище.

Вот сейчас пытаюсь разобраться как к примеру можно бекапить БД.
Судя из возможности bacula это можно делать только запуская пользовательский скрипт на клиенте "ClientRunBeforeJob = /path/to/script".
Вот тут начинается мой вопрос.

А если скрипт не выполнился до конца, скажем выполнился как то частично, что в результате получит бакула?
Или в самом скрипте нужно отслеживать целосность бекапа и потом как то заставить бакулу ожидать передачи удачного параметра (что бекап прошел), а если параметр не вернулся (скрипт недовыполнился или не выполнился вообще) то генерировать ошибку бекапа ?

Собственно у кого какая была практика, как то хочется раскурить данный вопрос ...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

FiL
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2010-02-05 0:21:40

Bacula, бекап различных сервисов

Непрочитанное сообщение FiL » 2016-10-14 1:36:53

если скрипт выполнился с ошибкой, то эта ошибка будет в логе бакапа.
но вообще у меня что-то с бакулой не сложилось. как-то там всё не так, как я привык :(

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Bacula, бекап различных сервисов

Непрочитанное сообщение kharkov_max » 2016-10-26 16:37:29

Вернулся к данному вопросу.

Для бекапа jail, созданного ezjail написал скрипт

Код: Выделить всё

#!/bin/sh

ezjail="/usr/local/bin/ezjail-admin"
jailname=$1
backup_dir=$2
jailstop=$3

# ------------ Тело скрипта ------------------------
# Проверяем существование директории и если нет то создаем
if [ ! -d $backup_dir ];then
   mkdir -p $backup_dir
fi
# Если директория была, то очищаем...
rm -rf $backup_dir/*

# Бекап с остановкой Jail
if [ $jailstop -eq 1 ]; then
    $ezjail stop $jailname > /dev/null 2>&1
    $ezjail archive -f -a $jailname -d $backup_dir $jailname > /dev/null 2>&1
    $ezjail start $jailname > /dev/null 2>&1
fi

# Бекап без остановки Jail
if [ $jailstop -eq 0 ]; then
    $ezjail archive -f -a $jailname -d $backup_dir $jailname > /dev/null 2>&1
fi

chown -R bacula:bacula $backup_dir

exit 0
Скрипт из bacula запускаю так:

Код: Выделить всё

ClientRunBeforeJob = "/bin/sh /usr/home/Scripts/bacula-before-jail_backup.sh jail1 /usr/home/bacula-backup 1"
Где параметры скрипта:
- имя jail
- временный, локальный каталог бекапа для бакула
- флаг старт/стоп jail при бекапе.

Если настраиваю на реальный jail, то все бекапится, бакула себе зятягивает файл и в статусе Job пишет "OK".
Если указываю не существующий jail, то весь механизм отрабатывает, в статусе Job пишет "OK", но на самом деле скрипт ни чего не забекапил т.к. jail не существует.

Вот и вопрос как мне скриптом контролировать бекап и потом передать состояние бакуле ?

У кого какие идеи ?

FiL
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2010-02-05 0:21:40

Bacula, бекап различных сервисов

Непрочитанное сообщение FiL » 2016-10-26 19:50:35

Так у тебя скрипт всегда 0 возвращает. Чего-ж ты хочешь?

Таки проверяй в скрипте ошибки и возвращай код ошибки какой-то из скрипта.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 331
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

Bacula, бекап различных сервисов

Непрочитанное сообщение Amadeus » 2016-10-27 0:18:31

Так, касательно БД

1) Исходя из боевого опыта работы с БД размером доХ и еще 10 раз по ДоХ если в качестве бекап системы вы хотите использовать бакулу, алгоритм следующий

- Кроном на сервере БД снимайте дамп
- Во время дампа желательно сразу еще жать его через pipe. Так как на некоторых базах, внезапно дамп может весить в 1,5 раза больше самой БД, так как там (в бд) данные сюриализованные. А дамп - в обычном виде текстовый файл
- Через некоторое время забирайте его бакулой простым файл сетом

Для дампов БД before скрипты не лучшее решение, так как некоторые дампы могут делаться крайне долго, и в итоге вы получите на бакуле - Network pipe или тому подобные ошибки.

2) Например, я не юзаю никаких оберток на джейлах. Простые снепшоты и zfs rcv в gz архив.
- Далее алгоритм такой же.

Бакула офигенная система. В плане сочетания юзабилити и возможностей которые она предоставляет. Главное уметь готовить

Отправлено спустя 5 минут 17 секунд:
Но то что я написал выше - это по сути когда уже идут реально большие объемы дампов.

Например у меня бакула в сутки ест около 100 гигов дампов с gzip 9


Если данных не так много, и укладывается в маленькое время само снятие - то да, тут можно использовать before скрипты

Отправлено спустя 6 минут 18 секунд:
kharkov_max писал(а): А если скрипт не выполнился до конца, скажем выполнился как то частично, что в результате получит бакула?

Касательно этого момента - невыполнение After/Before скрипта приводит к Error статусу задания в целом

При этом сам volume с бекапом, может и создастся. Но задание будет в Error статусе. И дальше уже, в зависимости от правил ротации volume - может и перезаписаться.
Нет ничего невозможного

FiL
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2010-02-05 0:21:40

Bacula, бекап различных сервисов

Непрочитанное сообщение FiL » 2016-10-27 0:25:44

Amadeus писал(а): Бакула офигенная система. В плане сочетания юзабилити и возможностей которые она предоставляет. Главное уметь готовить
Бакула офигенная система за свои деньги. Но в плане юзабилити и возможностей посравнению с нормальными системами - это жутко неудобный монстр.

Вот на днях у меня пришел юзер и попросил "вытащить из бакапа файлик 3-4-5 дневной давности, который у него был на десктопе в каталоге что-то там про TRPM7 и файл с #541 в названии". И вот такое на бакуле искать нужную версию непонятно какого файла непонятно где - повеситься можно (или я не нашел толкового UI). Потому как поднять полностью весь бакап легко и просто. А вот найти что-то...

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 331
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

Bacula, бекап различных сервисов

Непрочитанное сообщение Amadeus » 2016-10-27 2:28:41

Бакула офигенная система за свои деньги
За чего простите?) Free версия системы позволяет на данный момент закрывать потребности проекта полностью + Free версия UI прекрасно дает интерфейс если надо. Их несколько. Я про UI. Про энтерпрайз версию сейчас речи не идет.

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

Но отчасти я тут согласен, запросы "Найди что то там, примерно тогда то" на больших объемах решать не быстро. Тут спорить не буду.

Отправлено спустя 10 минут 42 секунды:
Единственное уточнение
Во втором типе - есть возможность искать по имени файла.
Что бы вот этот тип работал адекватно - бекенд любая SQL база. sqllite - тут не подходит в принципе. Если хотите вещать на бакулу нормальный UI

Отправлено спустя 1 час 31 минуту 14 секунд:
Сейчас даже ради интереса проверил.

1) Поиск по части имени файла - присутствует. Выдает все задания, которые содержаться в базе
2) Восстановление задания по клику из поиска - работает в полной мере
3) Восстановление отдельного файла по клику из поиска - бажное, но если кому то надо будет - UI открытый, там даже понятно по сути в чем баг. Любому php программисту исправить час +-. Не программисту - если задаться целью чуть больше - но смысл не меняется. Там код в этом плане детский.
Нет ничего невозможного

Аватара пользователя
Neus
капитан
Сообщения: 1790
Зарегистрирован: 2008-09-08 21:59:56

Bacula, бекап различных сервисов

Непрочитанное сообщение Neus » 2016-10-27 3:50:10

бекенд любая SQL база
Самое время задать каверзный вопрос: как бэкапить бакулу? ;)
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Bacula, бекап различных сервисов

Непрочитанное сообщение kharkov_max » 2016-10-27 7:41:37

1. Neus, Смотря что Вы понимаете под бекапом бакулы ...

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

2. Для web доступа я использую Baculum, скромно, но все устраивает.
Статусы заданий видно, файлы восстановить можно.
Поиском еще не игрался ...

3. Amadeus,
Тот механизм что Вы описали по бекапу больших БД и т.д., я прекрасно понимаю.
На данный момент у меня нет таких больших сервисов бекапля которые через before я получил бы в бакуле большую задержку.

Я привел как пример бекап Jail, но этот вопрос касается и бекапа БД и т.д.

Вот к примеру по бекапу БД.
Как правильно написать скрипт бекапа какойто БД MySQL, что бы в случае ошибки, mysqldump что то вернул скрипту.
Допустим я указал mysqldump не существующую БД, как скрипту получить эту ошибку?
Или допустим при удачном бекапе передавать скрипту состояние OK.

На сколько я понимаю дале точно так же эту ошибку можно передать и в бакулу...
И в статусе задания в состоянии Fail, возможно можно будет увидеть ошибку от mysqldump.

Или я не прав?

FiL
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2010-02-05 0:21:40

Bacula, бекап различных сервисов

Непрочитанное сообщение FiL » 2016-10-27 8:20:05

web-based интерфейсы я не рассматривал. не люблю я веб. Я пытался пользоваться bat'ом. Ужасно кривая хрень.
То есть опять-таки, за свои деньги (именно, что за бесплатно) - весьма даже. Но как толковый рабочий инструмент - не, не тянет.
Но раз говорите, что вебовская морда поприличнее, то я посмотрю.

Но просто поиск по маске нихрена не поможет. У меня в каждой лабе по несколько десятков юзеров, все они работают на более-менее одних и тех-же проектах. От каждого проекта есть туча файлов, разбросанных в зависимости от версии и под-проекта по разным фолдерам. Если я на бакапе запрошу поиск файла по маске "*#541*", то я получу список из сотни километровых путей, из которых таки зело неудобно выбирать нужный. Мне нужен не поиск (вернее поиск тоже нужен, но это реже), а нормальный способ просмотреть дерево файлов и каталогов, чтоб можно было походить, посмотреть, показать юзеру в таком виде в котором он это поймет, найти нужный файл и по каждому файлу возможность посмотреть историю сохраненных версий. И если мне система бакапа такой возможности не предоставляет, то мне таки ей пользоваться неудобно.

Что касается скриптов, то таки mysqldump вполне себе возвращает код завершения. И его вполне можно ловить и обрабатывать ( $? ). Ну и соответственно завершать свой скрипт с таким-же (или иным) кодом.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Bacula, бекап различных сервисов

Непрочитанное сообщение kharkov_max » 2016-10-27 9:12:42

FiL, Если у вас все так плохо может как бекап использовать нечто как SVN или GIT, там и версионность и т.д.
И его вполне можно ловить и обрабатывать ( $? )
Покажите кодом пожалуйста...

FiL
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2010-02-05 0:21:40

Bacula, бекап различных сервисов

Непрочитанное сообщение FiL » 2016-10-27 15:30:57

Код: Выделить всё

#!/bin/bash

$db = $1
$dir = $2
$fname = $(date +%y.%m.%d)

mysqlbackup $db > $dir/db-$fname.sql

if [ $? -eq 0 ]
then
  exit 0
else
  echo "mysql backup failed."
  exit 2
fi
Ну и далее обработать по вкусу.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Bacula, бекап различных сервисов

Непрочитанное сообщение kharkov_max » 2016-10-27 16:11:15

Спасибо ...
Попробую поиграться ...