Разработка и производство веб-приложений: резервное копирование

Составив план восстановления компонентов установки, необходимо настроить систему резервного копирования: без неё невозможно восстановить данные некоторых компонентов.

Данное руководство поможет настроить систему резервного копирования Bacula.

Основное преимущество полноценных систем типа Bacula состоит в том, что они предоставляют полный контроль над копируемыми данными, а также позволяют планировать резервное копирование и восстановление.

В данном случае Bacula будет ежедневно создавать бэкап серверов db1, app1, app2 и lb1. По сути, это руководство покажет, как использовать Bacula на стеке LAMP. Также вы узнаете, как использовать Percona XtraBackup для создания горячих резервных копий MySQL. Скопированные данные будут перемещаться на удаленный сервер с помощью rsync. Таким образом, у вас появится два новых сервера:

backups и remotebackups.

1: Установка Bacula

Установите Bacula на сервер backups с помощью этих руководств:

Для всех процессов сервера backups будет использоваться пул RemoteFile.

2: Установка клиента Bacula

Установите клиент Bacula на все серверы, которые нуждаются в резервном копировании (в данном случае это db1, app1, app2 и lb1). Все необходимые инструкции вы найдете в руководстве Резервное копирование сервера Ubuntu 14.04 с помощью Bacula.

Укажите  FileDaemon Name (обычно это имя хоста с суффиксом –fd) и Director Password (этот пароль сервер Bacula использует для подключения к клиентам) в файле bacula-fd.conf на каждом сервере.

3: Добавление клиентов Bacula на сервер

Перейдите на сервер backups и добавьте клиентов в /etc/bacula/conf.d/clients.conf.

Откройте файл:

sudo vi /etc/bacula/conf.d/clients.conf

Ниже вы найдете пример определения ресурсов клиента, сервера db1. Обратите внимание: значение Name должно совпадать со значением FileDaemon, а значение Password – с паролем Director Password (эти значения можно найти в файле /etc/bacula/bacula-fd.conf  на каждом клиентском сервере).

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

По этому примеру создайте ресурс для каждого клиента Bacula. В данном случае нужно добавить клиентские записи для db1-fd, app1-fd, app2-fd и lb1-fd.

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

Читайте также: Резервное копирование сервера Ubuntu 14.04 с помощью Bacula

4: Горячее резервное копирование базы данных

Чтобы получить согласованные, не конфликтующие резервные копии базы данных, необходимо соблюдать особую осторожность. Простой и эффективный способ создания горячих резервных копий  MySQL предлагает Percona XtraBackup.

Установка Percona XtraBackup

Перейдите на сервер базы данных, db1, и установите и настройте Percona XtraBackup, следуя руководству Горячее резервное копирование данных MySQL при помощи Percona XtraBackup в Ubuntu 14.04.

Создание сценария Percona XtraBackup

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

Для этого можно создать сценарий bash и и добавить запись в cronjob.

Создайте сценарий run_extra_backup.sh in /usr/local/bin:

sudo vi /usr/local/bin/run_xtrabackup.sh

Добавьте в него следующий код (вместо условных данных укажите свои учетные данные, полученные во время установки XtraBackup).

#!/bin/bash
# pre xtrabackup
chown -R mysql: /var/lib/mysql
find /var/lib/mysql -type d -exec chmod 770 "{}" \;
# delete existing full backup
rm -r /data/backups/full
# xtrabackup create backup
innobackupex --user=bkpuser  --password=bkppassword --no-timestamp /data/backups/full
# xtrabackup prepare backup
innobackupex --apply-log /data/backups/full

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

Запустите сценарий с правами суперпользователя. Он удалит все текущие резервные копии XtraBackup из /data/backups/full и создаст новый полный бэкап.

Читайте также: Горячее резервное копирование данных MySQL при помощи Percona XtraBackup в Ubuntu 14.04

Сделайте сценарий исполняемым:

sudo chmod +x /usr/local/bin/run_xtrabackup.sh

Чтобы создать цельную резервную копию базы данных, сценарий XtraBackup должен выполниться до того, как Bacula начнет создавать резервную копию сервера базы данных. Для этого можно использовать cron.

Читайте также: Планирование рутинных задач Linux при помощи Cron и Anacron

Создайте конфигурационный файл cron в /etc/cron.d.

sudo vi /etc/cron.d/xtrabackup

Добавьте в него строку:

30 22    * * *   root    /usr/local/bin/run_xtrabackup.sh

Сценарий будет запускаться с помощью пользователя root каждый день в 22:30. Bacula начинает резервное копирование ежедневно в 23:05. На выполнение сценария XtraBackup есть 35 минут.

5: Настройка Bacula FileSets

Bacula создаст резервные копии файлов, указанных в FileSets. Создайте FileSets для бэкапа файлов, которые необходимы для восстановления.

На сервере backups создайте файл filesets.conf.

sudo vi /etc/bacula/conf.d/filesets.conf

FileSet для базы данных

Для восстановления сервера БД необходимо копировать:

  • Базу данных MySQL (копия поддерживается сценарием XtraBackupв /data/backups/full).
  • Конфигурационный файл MySQL, /etc/mysql.

Также нужно указать сценарий XtraBackup (/usr/local/bin/run_xtrabackup.sh) и файл cron.

Добавьте в FileSet следующие строки:

FileSet {
Name = "MySQL Database"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /data/backups
File = /etc/mysql/my.cnf
File = /usr/local/bin/run_xtrabackup.sh
File = /etc/cron.d/xtrabackup
}
Exclude {
File = /data/backups/exclude
}
}

FileSet для серверов приложений

Для восстановления сервера приложений нужно резервная копия корневого каталога веб-сервера, /var/www/html

В FileSet для Apache DocumentRoot добавьте такие строки:

FileSet {
Name = "Apache DocumentRoot"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /var/www/html
}
Exclude {
File = /var/www/html/exclude
}
}

Также сюда можно добавить файл ports для Apache.

FileSet для балансировщика нагрузки

Для восстановления балансировщика нагрузки понадобятся резервные копии следующих файлов:

  • Файлы сертификата SSL (/root/certs).
  • Конфигурационный файл HAProxy (/etc/haproxy).

Добавьте в FileSet для HAProxy такие параметры:

FileSet {
Name = "SSL Certs and HAProxy Config"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /root/certs
File = /etc/haproxy
}
Exclude {
File = /root/exclude
}
}

Сохраните и закройте файл.
h2>6: Создание задач Bacula

Создайте задачи (Jobs) Bacula, чтобы своевременно копировать данные.

Создайте файл jobs.conf  в /etc/bacula/conf.d:

sudo vi /etc/bacula/conf.d/jobs.conf

Задачи для сервера БД

Для бэкапа сервера БД создайте задачу Backup db1. Укажите клиента (db1-fd) и FileSet (MySQL Database).

Job {
Name = "Backup db1"
JobDefs = "DefaultJob"
Client = db1-fd
Pool = RemoteFile
FileSet="MySQL Database"
}

Задачи для серверов приложений

Для серверов приложений нужно создать задачи Backup app1 и Backup app2. Укажите правильное значение в Client (app1-fd и app2-fd) и FileSet (Apache DocumentRoot).

Задача для сервера app1:

Job {
Name = "Backup app1"
JobDefs = "DefaultJob"
Client = app1-fd
Pool = RemoteFile
FileSet="Apache DocumentRoot"
}

Задача для сервера app2:

Job {
Name = "Backup app2"
JobDefs = "DefaultJob"
Client = app2-fd
Pool = RemoteFile
FileSet="Apache DocumentRoot"
}

Задача для балансировщика

Создайте задачу Backup lb1 для балансировщика нагрузки, указав соответствующие значения в Client (lb1-fd) и FileSet (SSL Certs and HAProxy Config).

Job {
Name = "Backup lb1"
JobDefs = "DefaultJob"
Client = lb1-fd
Pool = RemoteFile
FileSet="SSL Certs and HAProxy Config"
}

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

7: Перезапуск Bacula Director

На сервере backups перезапустите Bacula Director:

sudo service bacula-director restart

Теперь нужно протестировать клиентские подключения и задачи. Об этом можно прочитать в этом руководстве.

Для поддержки резервных копий MySQL нужно настроить ротацию копий.

8: Планирование бэкапа

План бэкапа Bacula можно отредактировать на в настройках Bacula Director (/etc/bacula/bacula-dir.conf). Все созданные ранее задачи используют DefaultJob, который привязан к плану WeeklyCycle. Он:

  • создает полный бэкап в первое воскресенье месяца в 23:05.
  • поддерживает дифференциальное копирование в другие воскресенья месяца в 23:05.
  • Поддерживает инкрементное копирование в другие дни недели в 23:05.

Убедиться в этом можно в настройках Bacula Director.

Director Status — Scheduled Jobs
Scheduled Jobs:
Level          Type     Pri  Scheduled          Name               Volume
===================================================================================
Incremental    Backup    10  20-May-15 23:05    BackupLocalFiles   MyVolume
Incremental    Backup    10  20-May-15 23:05    Backup lb1         Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup app2        Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup app1        Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup db1         Remote-0002

Вы можете добавить или откорректировать план бэкапа. Было бы целесообразно изменить расписание бэкапа серверов приложений, чтобы они выполняли сценарий Percona XtraBackup одновременно (в 22:30) . Это предотвратит несоответствие данных.

 9: Удаленное резервное копирование

Теперь можно настроить удаленный сервер remotebackups, на котором будут храниться копии бэкапов Bacula. Этот удаленный сервер должен находиться в другом регионе: так вы сможете получить доступ к данным даже тогда, когда в центре обработки данных произошел сбой.

Подключитесь к серверу remotebackups и создайте пользователя.

Читайте также: Начальная настройка сервера Ubuntu 14.04

Подключитесь к серверу backups как пользователь root и создайте пару ключей SSH. Установите открытый ключ на сервере remotebackups.

Читайте также: Как настроить SSH-ключи

На сервере backups запустите команду rsync, которая скопирует резервные данные Bacula (/bacula/backup) на сервер remotebackups.

Читайте также: Использование Rsync для синхронизации локального и удаленного каталогов на VPS

rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup

Поместите команду в сценарий /usr/local/bin/rsync_backups.sh.

Настройте cron для запуска сценария rsync_backups.sh с помощью пользователя root после копирования Bacula.

10: Дополнительные рекомендации

Данное руководство не охватывает распределение дискового пространства.

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

В дальнейшем вы сможете настроить резервное копирование новых серверов – сервера мониторинга и сервера логирования.

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

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

Tags: , ,