Как сделать резервную копию сервера LAMP с помощью Bacula в Ubuntu 14.04

Вступление

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

Из этого туториала Вы узнаете, как создавать правильные резервные копии приложения PHP, используя стек LAMP на одном сервере Ubuntu 14.04, используя отдельный сервер резервных копий, на котором работает Bacula. Одним из преимуществ использования системы резервного копирования, такой как Bacula, является то, что она дает вам полный контроль над тем, что должно быть сохранено и восстановлено, на уровне отдельных файлов и графиком, когда должны быть созданы резервные копии. Детализация на уровне файлов при создании резервных копий позволяет ограничить выбор резервных копий только теми файлами, которые необходимы, что сэкономит дисковое пространство по сравнению с резервным копированием всей файловой системы.

изображение: https: //assets.digitalocean.com/articles/architecture/production/backup_system.png [Диаграмма резервного копирования]

Если это кажется вам чрезмерным, вы можете рассмотреть DigitalOcean резервные копии капель (резервные копии всех снимков вашей капли), которые должны быть включается при создании капли. Эти резервные копии просты в настройке и могут быть достаточными для ваших нужд, если вам требуется только еженедельное резервное копирование. Если вы выбираете резервное копирование DigitalOcean, обязательно настройте «горячее» резервное копирование вашей базы данных, следуя разделу «Создание оперативного резервного копирования вашей базы данных» * - это необходимо для обеспечения того, чтобы резервные копии вашей базы данных были согласованными (пригодными для использования).

Предпосылки

В этом руководстве предполагается, что вы запускаете приложение PHP, такое как WordPress, которое работает в стеке LAMP (Linux, Apache, MySQL / MariaDB и PHP) на одном сервере Ubuntu 14.04 с включенной частной сетью. Мы будем называть это сервером * LAMP *. В нашем примере мы будем создавать резервные копии сервера WordPress, созданного с помощью следующих руководств:

Если вы работаете с другим приложением PHP или используете Nginx вместо Apache, этот учебник все равно будет работать нормально, если вы внесете необходимые изменения в выбор резервной копии.

Конечно, вам понадобится доступ sudo к серверу, на котором будет установлено программное обеспечение сервера Bacula, которое мы будем называть сервером * backups *. В идеале он должен находиться в том же центре обработки данных, что и ваш сервер LAMP, и иметь включенную частную сеть. Созданные резервные копии будут храниться на этом сервере, поэтому на диске должно быть достаточно места для хранения нескольких копий выбранной вами резервной копии.

Выбор резервной копии

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

  • * Файлы приложений PHP: * Это будет DocumentRoot вашего веб-сервера. В Ubuntu это будет по умолчанию + / var / www / html

  • * База данных MySQL: * Хотя файлы данных MySQL обычно хранятся в + / var / lib / mysql +, мы должны создать горячую резервную копию базы данных в другом месте. Горячие резервные копии будут частью нашей резервной копии

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

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

Если вы не уверены, почему мы включаем вышеупомянутые файлы в выбор резервной копии, ознакомьтесь с Recovery Planning сегмент из нескольких частей * Сборка для производства: веб-приложения * серия учебных пособий. В нем описывается, как можно разработать план восстановления для веб-приложения, используя в качестве примера многосерверную настройку.

Давайте настроим горячие резервные копии нашей базы данных.

Создание горячих резервных копий базы данных

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

Установите Percona XtraBackup

На вашем сервере * LAMP * установите и настройте Percona XtraBackup, следуя этому руководству: https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona -xtrabackup-on-ubuntu-14-04 [Как создавать горячие резервные копии баз данных MySQL с помощью Percona XtraBackup в Ubuntu 14.04]. Остановитесь, когда дойдете до раздела * Perform Full Hot Backup *.

Создать скрипт XtraBackup

Percona XtraBackup готова создавать горячие резервные копии вашей базы данных MySQL, которые в конечном итоге будут создаваться резервными копиями Bacula (или резервными копиями DigitalOcean), но горячие резервные копии должны быть запланированы каким-либо образом. Мы создадим самое простое решение: скрипт bash и задание cron.

Создайте bash-скрипт с именем + run_extra_backup.sh + в + / usr / local / bin:

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

Добавьте следующий скрипт. Обязательно замените пользователя и пароль тем, что вы установили при установке XtraBackup:

/usr/local/bin/run_xtrabackup.sh

#!/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=  --password= --no-timestamp /data/backups/full

# xtrabackup prepare backup
innobackupex --apply-log /data/backups/full

Сохранить и выйти. Запуск этого скрипта (с привилегиями суперпользователя) удалит существующую резервную копию XtraBackup в + / data / backups / full + и создаст новую полную резервную копию. Короче говоря, этот сценарий будет поддерживать единственную копию горячей резервной копии базы данных. Более подробную информацию о создании резервных копий с помощью XtraBackup можно найти в https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on- ubuntu-14-04 # выполнить полное горячее резервное копирование [Выполнить полное горячее резервное копирование] учебного руководства по XtraBackup.

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

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

Чтобы правильно сделать резервную копию нашей базы данных, мы должны запустить (и завершить) сценарий XtraBackup, прежде чем Bacula попытается сделать резервную копию базы данных. Хорошее решение - настроить задание резервного копирования Bacula для запуска сценария как «сценария предварительного резервного копирования», но мы решим использовать https://www.digitalocean.com/community/tutorials/how-to-schedule- рутинные задачи с cron-and-anacron-on-a-vps [cron job] для простоты.

Создайте файл конфигурации cron (файлы в + / etc / cron.d + добавляются в crontab root):

sudo vi /etc/cron.d/xtrabackup

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

/etc/cron.d/xtrabackup

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

Это планирует запуск скрипта от имени root каждый день в 22:30 (22 час, 30 минута). Мы выбрали это время, потому что задание резервного копирования Bacula по умолчанию планируется запускать в 23:05 дня ежедневно - об этом мы поговорим позже. Это позволяет 35 минут для завершения сценария XtraBackup.

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

Установите Bacula на сервер резервного копирования

На вашем сервере * backups * настройте сервер Bacula, следуя этому руководству: How To Установите сервер Bacula на Ubuntu 14.04.

Затем следуйте разделу * Organize Bacula Director Configuration (Server) * этого руководства: https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with. -bacula # organiz-bacula-Director-configuration- (сервер) [Как сделать резервную копию сервера Ubuntu 14.04 с Bacula]. Имя директора вам понадобится при настройке клиентов Bacula (на серверах, для которых вы хотите создать резервную копию). Остановитесь, когда перейдете в раздел * Установка и настройка Bacula Client *.

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

Установите клиент Bacula на сервер LAMP

На своем сервере * LAMP * установите клиент Bacula, следуя разделу * Установка и настройка клиента Bacula * этого учебного руководства: https://www.digitalocean.com/community/tutorials/how-to-back-up-an- ubuntu-14-04-server-with-bacula # install-and-configure-bacula-client [Как создать резервную копию сервера Ubuntu 14.04 с помощью Bacula]. Остановитесь, когда достигнете раздела * Добавить наборы файлов (сервер) *.

Обратите внимание, что вам понадобятся * FileDaemon Name * (обычно имя хоста, добавляемое «-fd») и * Director Director * (пароль, который сервер Bacula будет использовать для подключения к клиенту Bacula) от `+ bacula-fd Файл .conf + `на сервере LAMP.

Добавить резервный клиент на сервер резервных копий

На своем сервере * backups *, сервере Bacula, добавьте ресурс * Client * для сервера LAMP в файл + / etc / bacula / conf.d / clients.conf +.

Откройте файл + clients.conf +:

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

Определение клиентского ресурса для сервера LAMP должно выглядеть примерно так: Обратите внимание, что значение * Name * должно совпадать с именем ресурса * FileDaemon *, а пароль * должен совпадать с паролем ресурса * Director * на сервере LAMP - эти значения можно найти в `+ / etc / bacula / bacula-fd.conf + `на сервере LAMP:

clients.conf - пример определения клиентского ресурса

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

Сохранить и выйти. Это настраивает Bacula Director на сервере * backups * для возможности подключения к клиенту Bacula на каждом сервере.

Более подробную информацию об этом разделе можно найти в разделе * Установка и настройка клиента Bacula * по адресу https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server. -with-bacula # install-and-configure-bacula-client [Как создать резервную копию сервера Ubuntu с помощью Bacula].

Теперь давайте настроим резервные наборы файлов Bacula.

Настроить наборы файлов Bacula

Bacula создаст резервные копии файлов, указанных в наборах файлов, связанных с заданиями резервного копирования, которые будут выполнены. В этом разделе описывается создание наборов файлов, которые включают файлы, которые мы определили как часть нашего * резервного выбора *, ранее. Более подробную информацию о добавлении наборов файлов в Bacula можно найти по адресу https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula#add- наборы файлов- (сервер) [Добавить наборы файлов (сервер)] учебника Bacula.

На вашем сервере * backups * откройте файл + filesets.conf +:

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

Необходимые резервные копии для нашего сервера LAMP, в соответствии с нашим выбором резервного копирования, включают в себя:

  • * Файлы приложений PHP: * + / var / www / html

  • * База данных MySQL: * + / data / backups / full + - полное горячее резервное копирование создается ежедневно в 22:30 с помощью нашего скрипта XtraBackup

Для удобства мы также включим следующие файлы:

  • * Конфигурация MySQL: * + / etc / mysql

  • * Конфигурация Apache: * + / etc / apache2 +

  • * Сценарий XtraBackup: * + / usr / local / bin / run_xtrabackup.sh +

  • * Файл cron XtraBackup: * + / etc / cron.d / xtrabackup +

Помня о выборе резервной копии, мы добавим следующий набор файлов в нашу конфигурацию Bacula:

filesets.conf - База данных MySQL

FileSet {
 Name = "LAMP Files"
 Include {
   Options {
     signature = MD5
     compression = GZIP
   }






 }
 Exclude {

 }
}

Сохранить и выйти. Обратите внимание, что все выделенные директивы * File * находятся в блоке * Include *. Это все файлы, которые мы хотим сохранить. Если вы хотите исключить какие-либо файлы из задания резервного копирования, которые существуют во включенных каталогах, добавьте их в блок * Exclude *.

Теперь наш FileSet настроен. Перейдем к созданию задания резервного копирования Bacula, которое будет использовать этот набор файлов.

Создать задание резервного копирования Bacula

Мы создадим задание резервного копирования Bacula, которое будет запускаться, и создадим резервные копии нашего сервера LAMP.

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

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

Задание резервного копирования сервера LAMP

Для нашего задания резервного копирования сервера LAMP мы создадим новое задание с именем «Backup LAMP». Здесь важно указать правильные * Client * (lamp-fd) и * FileSet * (файлы LAMP):

jobs.conf - Резервное копирование db1

Job {
 Name = "Backup LAMP"
 JobDefs = "DefaultJob"
 Client =
 Pool = RemoteFile
 FileSet=""
}

Сохранить и выйти.

Теперь наше задание резервного копирования настроено. Последний шаг - перезапустить Bacula Director.

Перезагрузите Bacula Director

На сервере * backups * перезапустите Bacula Director, чтобы все наши изменения вступили в силу:

sudo service bacula-director restart

На этом этапе вы захотите протестировать подключение клиента и задание резервного копирования, оба из которых описаны в https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14. -04-server-with-bacula # test-client-connection [Как создать резервную копию сервера с помощью Bacula]. В этом руководстве также рассказывается, как восстановить резервные копии Bacula. Обратите внимание, что восстановление базы данных MySQL потребует от вас соблюдения https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on- ubuntu-14-04 # выполнить восстановление резервной копии [Выполнить восстановление резервной копии] в учебном руководстве по Percona XtraBackup.

Расписание резервного копирования

Расписание резервного копирования Bacula можно изменить, изменив конфигурацию Bacula Director (+ / etc / bacula / bacula-dir.conf +). Задание резервного копирования, которое мы создали, использует JobDef «DefaultJob», который использует расписание «WeeklyCycle», которое определяется как:

  • Полная резервная копия в первое воскресенье месяца в 23:05

  • Разностные резервные копии по всем остальным воскресеньям в 23:05

  • Инкрементные резервные копии в другие дни, с понедельника по субботу, в 23:05

Вы можете проверить это с помощью консоли Bacula, чтобы проверить статус директора. Он должен вывести все ваши запланированные задания:

Director Status - Scheduled JobsScheduled 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 lamp         Remote-0002

Не стесняйтесь добавлять или настраивать расписание любых заданий резервного копирования. Если вы хотите, чтобы ваши резервные копии были более гибкими, было бы целесообразно отделить резервные копии базы данных от всего остального. Таким образом, вы можете изменить расписание задания резервного копирования файлов приложения, чтобы оно выполнялось одновременно с выполнением сценария Percona XtraBackup (22:30), и создавать резервную копию «горячей» копии базы данных (созданной XtraBackup) после ее завершения. быть готовым. Это снизит вероятность несовместимости приложений и резервных копий базы данных.

Настройка удаленного резервного копирования (необязательно)

Если вы хотите, вы можете создать удаленный сервер, который будет хранить копии ваших резервных копий Bacula. Этот удаленный сервер должен находиться в географически отдельном регионе, чтобы у вас была копия критических резервных копий, даже если в вашем производственном центре обработки данных произошла авария. Например, если ваши серверы LAMP и резервные копии находятся в Нью-Йорке, вы можете использовать регион DigitalOcean в Сан-Франциско (SFO1) для своего сервера * remotebackups *.

Мы расскажем о простом методе отправки наших резервных копий с нашего сервера * backups * на наш сервер * remotebackups * с использованием открытых ключей SSH, rsync и cron.

На сервере * remotebackups * create user, который будет использоваться для входа в систему rsync.

Затем на сервере * backups * создайте пару паролей SSH без пароля в качестве пользователя root. Установите открытый ключ на только что созданного пользователя * remotebackups *. Это описано в нашем учебнике https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys—​2[How To Setup SSH Keys.

На сервере * backups * напишите команду rsync, которая копирует данные резервной копии Bacula (+ / bacula / backup +) куда-нибудь на сервер * remotebackups *. Использование Rsync описано в нашем Как использовать Rsync руководство. Команда, вероятно, будет выглядеть примерно так:

rsync -az /bacula/backup @:/

Добавьте команду в скрипт, такой как + / usr / local / bin / rsync_backups.sh +, и сделайте ее исполняемой.

Наконец, вы захотите настроить задание cron, которое запускает скрипт + rsync_backups.sh + от имени пользователя root после того, как задания резервного копирования Bacula обычно завершаются. Это описано в нашей How планировать рутинные задачи с помощью Cron руководство.

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

Ознакомьтесь с требованиями к резервному диску

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

В нашем примере, если ваше PHP-приложение не имеет достаточно большого объема контента и мультимедиа, резервные копии, вероятно, будут занимать относительно небольшое количество дискового пространства. Это потому, что наш выбор резервных копий очень консервативный, и задание резервного копирования по умолчанию создает * инкрементные * резервные копии, когда это возможно.

Заключение

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

Related