Site icon 8HOST.COM

Удалённое резервное копирование с помощью Bacula на сервере Ubuntu 12.04

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

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

Сервер резервного копирования будет называться BackupServer, а клиентский сервер – ClientMachine. Не забудьте заменить эти условные имена хостов своими данными.

Примечание: Строки, которые нужно отредактировать или ввести самостоятельно, выделены красным. Остальной код можно просто скопировать и вставить.

Установка клиента

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

Установите bacula-fd (file-daemon) и bconsole (bacula console) на клиентскую машину. Для этого используйте apt-get и метапакет bacula-client.

sudo apt-get update
sudo apt-get install bacula-client

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

Настройка клиента

Настройка окружения клиента относительно проста. Нужно только отредактировать конфигурационный файл bacula file daemon (или fd). Откройте этот файл с привилегиями root:

sudo nano /etc/bacula/bacula-fd.conf

В нём нужно изменить несколько строк и сохранить некоторые данные, которые понадобятся позже при настройке сервера. для начала найдите раздел Director.

Директор Bacula находится на резервном VPS. Измените параметр Name, указав имя хоста сервера резервного копирования и добавив опцию -dir.

Также нужно скопировать пароль, сгенерированный программой Bacula для file daemon клиента, в доступную локацию:

Director {
Name = BackupServer-dir
Password = "u2LK-yBrQzfiEsc6NWftHEhymmdPWsklN"  # Copy this password for later reference!
}

Затем нужно отредактировать параметры в разделе FileDaemon. В строке FDAddress укажите IP или доменное имя клиента. Параметр Name должен уже быть заполнен верно (он содержит имя fd клиента):

FileDaemon {                          # this is me
Name = ClientMachine-fd
FDport = 9102                  # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
FDAddress = ClientMachine.DomainName.com
}

Также нужно настроить fd для отправки сообщений журналов на резервный облачный сервер. Найдите раздел Messages и отредактируйте параметр director, указав имя резервного сервера.

Messages {
Name = Standard
director =  BackupServer-dir = all, !skipped, !restored
}

Сохраните файл и закройте его.

Проверьте синтаксис файла при помощи команды:

sudo bacula-fd /etc/bacula/bacula-fd.conf

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

sudo service bacula-fd restart

Теперь клиентская машина настроена должным образом.

В этом руководстве нужно будет восстановить файлы в папку на этом же компьютере. Создайте файловую структуру и заблокируйте доступ для повышения безопасности с помощью следующих команд:

sudo mkdir -p /bacula/restore
sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula

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

Настройка сервера резервного копирования

Теперь нужно настроить сервер резервного копирования.

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

Для начала откройте bacula-dir.conf  привилегиями администратора:

sudo nano /etc/bacula/bacula-dir.conf

Настройка раздела Job

Найдите раздел Job. Текущим настройкам задано имя BackupClient1, которое используется для локальных резервных копий данного сервера. Это имя нужно изменить:

Job {
Name = "LocalBackup"
JobDefs = "DefaultJob"
}

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

Измените имя, чтобы объявить сценарий удаленного резервного копирования. Параметр Client задаёт удаленный fd клиента целью резервного копирования. Параметр Pool позволяет Bacula хранить удаленные резервные копии отдельно от локальных резервных копий (подробнее о настройках Pool – далее в руководстве):

Job {
Name = "RemoteBackup"
JobDefs = "DefaultJob"
Client = ClientMachine-fd
Pool = RemoteFile
}

Затем нужно указать место для хранения удалённых копий. Для этого можно использовать каталог, созданный ранее на клиенте.

Найдите определение RestoreFiles. Скопируйте следующий блок кода и вставьте его ниже (затем нужно будет скорректировать некоторые записи):

Job {
Name = "RestoreRemote"
Type = Restore
Client=ClientMachine-fd
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /bacula/restore
}

Раздел Client

В данном разделе нужно изменить параметр Address, указав IP-адрес облачного сервера резервного копирования вместо localhost. Пароль должен уже быть установлен верно.

Client {
Name = BackupServer-fd
Address = BackupServer.DomainName.com
FDPort = 9102
Catalog = MyCatalog
Password = "CRQF7PW-mJumFtENX2lqGvJ6gixPTyRQp"          # password for Local FileDaemon
File Retention = 30 days            # 30 days
Job Retention = 6 months            # six months
AutoPrune = yes                     # Prune expired Jobs/Files
}

Далее нужно определить клиентскую машину, на которую ссылаются настройки. Скопируйте только что отредактированную запись Client и вставьте её под текущим определением. Это новое определение предназначено для удаленной машины, резервную копию которой нужно создать.

В строке Name укажите имя хоста клиента, а затем флаг –fd. Строка Address должна содержать IP-адрес или домен клиента.

Обратите внимание: именно здесь нужно указать пароль, который был скопировали из конфигурационного файла fd удаленного клиента. Убедитесь, что ввели свой уникальный пароль, иначе Bacula не будет работать.

Client {
Name = ClientMachine-fd
Address = ClientMachine.DomainName.com
FDPort = 9102
Catalog = MyCatalog
Password = "u2LK-yBrQzfiEsc6NWftHEhymmdPWsklN"          # password for Remote FileDaemon
File Retention = 30 days            # 30 days
Job Retention = 6 months            # six months
AutoPrune = yes                     # Prune expired Jobs/Files
}

Раздел Storage

Затем найдите раздел Storage. Параметр Address в этом разделе должен содержать IP или домен сервера резервного копирования (опять же, файл уже должен содержать верный пароль):

Storage {
Name = File
# Do not use "localhost" here
Address = BackupServer.DomainName.com      # N.B. Use a fully qualified name here
DPort = 9103
Password = "097dnj3jw1Yynpz2AC38luKjy5QTnGoxS"
Device = FileStorage
Media Type = File
}

Раздел Pool

Найдите раздел Pool. В него нужно добавить параметр Label Format и определить префикс для имени файлов с резервными копиями. В данном руководстве используется префикс Local-.

Pool {
Name = File
Pool Type = Backup
Recycle = yes                       # Bacula can automatically recycle Volumes
Label Format = Local-
AutoPrune = yes                     # Prune expired volumes
Volume Retention = 365 days         # one year
Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
Maximum Volumes = 100               # Limit number of Volumes in Pool
}

Затем нужно скопировать только что отредактированный раздел и вставить его сразу под текущей записью. Это создаст новый раздел для удалённого резервного хранилища.

Укажите соответствующее имя и задайте в параметре Label Format префикс Remote-.

Pool {
Name = RemoteFile
Pool Type = Backup
Recycle = yes                       # Bacula can automatically recycle Volumes
Label Format = Remote-
AutoPrune = yes                     # Prune expired volumes
Volume Retention = 365 days         # one year
Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
Maximum Volumes = 100               # Limit number of Volumes in Pool
}

Сохраните и закройте файл.

Редактирование файла bacula-sd.conf

Откройте bacula-sd.conf с правами root.

sudo nano /etc/bacula/bacula-sd.conf

В параметре SDAddress укажите IP-адрес или доменное имя сервера резервного копирования:

Storage {                             # definition of myself
Name = BackupServer-sd
SDPort = 9103                  # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 20
SDAddress = BackupServer.DomainName.com
}

Сохраните и закройте файл.

Проверка настроек и перезапуск сервисов

Чтобы проверить настройки, используйте команды:

sudo bacula-dir /etc/bacula/bacula-dir.conf
sudo bacula-sd /etc/bacula/bacula-sd.conf

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

sudo service bacula-director restart
sudo service bacula-sd restart

Создание удалённой резервной копии

Откройте консоль bacula, чтобы попробовать создать тестовую резервную копию.

sudo bconsole

Проверьте, может ли директор bacula подключиться к удалённой машине, введя:

status
Status available for:
1: Director
2: Storage
3: Client
4: All
Select daemon type for status (1-4):

Выберите пункт 3, чтобы подключиться к клиенту, а затем выберите удаленную машину.

3: Client
2: ClientMachine-fd

Это должно вернуть сводку статистики, что значит, что сервер может подключиться к fd удаленной машины.

Запустите тестовое резервное копирование при помощи команды:

run
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
1: LocalBackup
2: RemoteBackup
3: BackupCatalog
4: RestoreFiles
5: RestoreRemote
Select Job resource (1-5):

Выберите опцию RemoteBackup, чтобы запустить резервное копирование удалённой машины; введите yes для подтверждения:

2: RemoteBackup

После этого Bacula отправит задачу удалённому fd, который передаст информацию в хранилище сервера копирования. Состояние задачи можно проверить при помощи команды status. Также нужно проверять сообщения при помощи команды:

messages

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

Termination: Backup OK

если всё прошло должным образом.

Восстановление резервной копии

Теперь протестируйте функцию восстановления данных:

restore all

Выберите опцию Select the most recent backup for a client, а затем выберите только что скопированный клиент:

5: Select the most recent backup for a client
2: ClientMachine-fd

На экране появится дерево файлов, позволяющее выбрать файлы, которые нужно восстановить. Чтобы выбрать файлы, используйте команду mark; чтобы исключить файл из восстановления, используйте команду unmark.

Чтобы восстановить все файлы, просто введите done. Запустите соответствующую задачу и введите yes для подтверждения.

done
2: RestoreRemote

Для проверки процесса восстановления используйте команды status и messages. Полученная сводка сообщений должна содержать строку:

Termination: Restore OK

Это значит, что восстановление прошло успешно. Чтобы закрыть консоль bacula, введите:

exit

Проверка файловой системы

При помощи следующей команды можно убедиться, что удаленный файл с резервной копией имеет правильный формат:

sudo ls /bacula/backup
LocalBackup   Remote-0002

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

Войдя на удаленную клиентскую машину, можно проверить, как прошло восстановление; для этого введите:

sudo ls /bacula/restore
bin   dev  home        lib      media  opt       run   selinux  sys  var
boot  etc  initrd.img  lost+found  mnt      root     sbin  srv      usr  vmlinuz

Как видите, файловая система была восстановлена правильно.