Создание для производства: Web-приложения — резервное копирование

ИнTRодукЦИЯ

После разработки плана восстановления всех компонентов вашего приложения вы должны установить систему бэкаps, которую требует его поддержание. Этот портал будет фокусироваться на использовании Bacula как решения для бэксов. Преимуществами использования полнофункциональной системы бэксов, как Bacula, являются возможность контроля над индивидуальными файлами и возможность расписать бэкс и восстановление по своему времени.

Различные программы, как DigitalOcean Droplet Backups (snapshot backups of your entire Droplet), can be set up quickly and may be sufficient for your needs if you only need weekly backups. If you choose DigitalOcean Backups, make sure to set up hot backups of your database by following the Create Hot Backups of Your Database section.

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

Давайте приступаем к работе.

Установите Bacula на сервере резервов

Создайте Bacula на вашем сервере backups следуя этому руководству: How To Install Bacula Server on Ubuntu 14.04.

Последовать за разделом Organize Bacula Director Configuration (Server) данного руководства: How To Back Up an Ubuntu 14.04 Server with Bacula. Вам потребуется имя директора Bacula при установке клиентов Bacula (на серверах, которые вы хотите сохранять). Замените, когда вы дойдете до раздела Install and Configure Bacula Client.

请注意,我们将为所有建立的备份作业使用 RemoteFile 池。 этим сказав, можете изменить некоторые настройки, прежде чем продолжить.

Install Bacula Client on Each Server

Установите клиент Bacula на каждый сервер, который вы хотите сохранять (db1, app1, app2 и lb1), следуя разделу Install and Configure Bacula Client этого руководства: How To Back Up an Ubuntu 14.04 Server with Bacula. Замените, когда вы дойдете до раздела Add FileSets (Server).

Neобходимо использовать Имя FileDaemon (обычно hostname с добавлением “-fd”) и Пароль Директора (пароль, который сервер Bacula будет использовать для подключения к каждому клиенту) из файла bacula-fd.conf на каждом сервере.

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

На сервере backups, который является сервером Bacula, добавьте ресурс Клиента в файл /etc/bacula/conf.d/clients.conf для каждого сервера, на котором вы установили клиент Bacula.

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

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

Вот пример определения ресурса Клиента для сервера баз данных db1. Обратите внимание, что значение Имя должно соответствовать Имени ресурса FileDaemon, а Пароль должен соответствовать Паролю ресурса Директор на сервере клиента — эти значения можно найти в файле /etc/bacula/bacula-fd.conf на каждом сервере клиента Bacula:

clients.conf — Example Client resource definition
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. Это настроит Директора Bacula на сервере backups для возможности подключения к клиенту Bacula на каждом сервере…

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

Дополнительные сведения о данном разделе можно найти в разделе Установить и настроить клиент Bacula учебника Как сделать резервную копию сервера Ubuntu с использованием Bacula.

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

Чтобы убедиться, что мы получаем последовательные (т.е. используемые) резервные копии нашей активной базы данных, необходимо приложить специальное усилие.简便有效的方法来创建MySQL的热备份是使用Percona XtraBackup.

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

На вашем сервере базы данных db1, установите и настройте Percona XtraBackup, следуя этому руководству: Как создавать горячие резервные копии баз данных MySQL с использованием Percona XtraBackup на Ubuntu 14.04. Застойте, когда вы дойдете до раздела Выполните полную горячую резервную копию.

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

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

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

  1. 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 "{}" \;

# удалить существующий полный резерв
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 и создавать новую полную резервную копию. Более подробные сведения о создании резервов с помощью XtraBackup можно найти в разделе Выполнение полной горячей резервной копии руководства по XtraBackup.

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

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

Проверяем базу данных на предмет безопасности, прежде чем пытаться выполнить бэкуард Бакула. Мы должны выполнить скрипт XtraBackup перед тем, как Бэкула попытается выполнить бэкуард для стороннего сервера базы данных. Достаточно хорошо решить это вопрос, чтобы использовать его в качестве “превью бэкуарда”, но мы будем использовать сrontab для простоты.

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

  1. sudo vi /etc/cron.d/xtrabackup

Добавить следующий cron запуск:

/etc/cron.d/xtrabackup
30 22    * * *   root    /usr/local/bin/run_xtrabackup.sh

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

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

Конфигурирование файловет Бэкулы

Bacula создаст резервные копии файлов, указанных в FileSets, связанных с задачами резервного копирования, которые будут выполнены. Этот раздел охватывает создание FileSets, которые включают необходимые резервные копии, которые мы идентифицировали в наших планах восстановления. Более подробную информацию о добавлении FileSets в Bacula можно найти в разделе Добавление FileSets (Сервер) руководства Bacula.

На вашем сервере резервного копирования откройте файл filesets.conf:

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

FileSet сервера базы данных

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

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

Мы также включим скрипт XtraBackup: /usr/local/bin/run_xtrabackup.sh, и связанный с ним файл cron.

Помня о наших необходимых резервных копиях, мы добавим этот FileSet “MySQL Database” в нашу конфигурацию Bacula:

filesets.conf — MySQL Database
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 в нашем примере

С учетом необходимых резервных копий мы добавим этот “файловый набор документов Apache” в нашу настройку Bacula:

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

Вы также можете включить файл настройки портов Apache, но это легко заменимо.

Теперь перейдем к файловому набору сервера load balancer.

Файловый набор сервера load balancer

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

  • Сертификат SSL (PEM) и связанные файлы: расположены в /root/certs в нашем примере
  • Файл настройки HAProxy: расположен в /etc/haproxy

С учетом необходимых резервных копий мы добавим этот “файловый набор документов Apache” в нашу настройку Bacula:

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

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

Нашы файлыеты уже настроены. Переходим к созданию задач для бэкапов в Бакула.

Создание задачи для бэкапов в Бакула

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

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

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

База данных Бэкапа

Для бэкапа базы данных мы создаем новую задачу под названием “Backup_db1”. Отличающийся момент здесь в том, что мы указываем правильную Клиент (db1-fd) и Филет (Музей Базеда):

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

Теперь рассмотрим настройки бэкапов для серверов приложений.

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

Для нашего сервера приложений мы создаем две задачи бэкапов, которые называются “Backup_app1” и “Backup_app2”. Очень важным моментом здесь является указание правильной Клиент (app1-fd и app2-fd) и Филет (Документационный корпус Apache):

Задача app1:

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

Пример работы:

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

Сегодня мы будем настроить задачу для резервирования сервера балансировщика.

Load Balancer Server Backup Job

Для настройки нашей задачи резервного бэк업 для сервера балансировщика мы создаем новую задачу под именем “Backup lb1”. Основной информацией здесь является правильный Клиент (lb1-fd) и Файлсет (SSL Certs and HAProxy Config):

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

Сохраните и выходят.

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

Restart Bacula Director

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

  1. sudo service bacula-director restart

В этой точке вы можете выполнить тесты ваших клиентских соединений и резервных копий, о которых рассказано в руководстве Как создавать резервные копии сервера с Bacula. Это руководство также описывает процедуру восстановления резервных копий Bacula. Обратите внимание, что восстановление базы данных MySQL требует следовать шагам Выполнение восстановления резервных копий из руководства Percona XtraBackup.

Просмотр расписания резервных копий

Расписание резервных копий Bacula может быть настроено путём изменения конфигурации директора Bacula (/etc/bacula/bacula-dir.conf). Все резервные задания, которые мы создали, используют задание “DefaultJob”, которое использует расписание “WeeklyCycle”, определённое следующим образом:

  • Полная резервная копия первого воскресенья месяца в 23:05
  • Разничные резервные копии во всех других воскресеньях в 23:05
  • Incremental backups on other days, Monday through Saturday, at at 11:05pm

Вы можете проверить это использованием консоли Bacula для проверки состояния директора. Она должна вывести все запланированные вами задания:

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

Пусть все ваши задачи безопасности будут выполнены по своей расписанию. Это было бы sensibly изменять расписание приложений на серверах так, чтобы оно соответствовало времени выполнения скрипта Percona XtraBackup (10:30 вечера). Это предотвратит несогласие между образами приложений и базы данных.

Настройка бэкups на удаленном сервере

Теперь мы готовы настроить сервер для хранения копий ваших бэкups Бакулы. Этот удаленный сервер должен быть размещен в географически отдельной области, чтобы вы имели копию ваших критических бэкups даже если произошла катастрофа в центре данных вашего производственного центра. В нашем примере мы используем регион DigitalOcean San Francisco (SFO1) для настройки нашей remotebackups сервера.

Мы расскажем о простом методе, как отправлять наши бэкups от нашего backups сервера на наш remotebackups сервер используя публичные ключи SSH, rsync и cron.

На remotebackups сервере, создайте пользователь который будет использоваться для подключения через rsync.

Далее, на сервере 备份, сгенерируйте пары ключей SSH без пароля root. Установите открытый ключ на учетной записи 远程备份, которую вы только что создали. Это описано в нашем руководстве 如何设置SSH密钥.

На сервере 备份 напишите команду rsync, которая копирует данные резервного копирования Bacula (/bacula/backup) где-то на сервере 远程备份. Использование rsync описано в нашем руководстве 如何使用rsync. Команда, вероятно, будет выглядеть примерно так:

  1. 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, как правило, заканчиваются. Это описано в нашем руководстве 如何使用cron计划常规任务.

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

其他考虑因素

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

Как правило, вы также должны установить резервные копии для любых других серверов, которые добавляются в вашу систему. Например, вы должны настроить Bacula, чтобы создать резервные копии ваших мониторинг и централизованных журналов серверов после того, как вы получите их в работу.

КонCLЮСИОН

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

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

Source:
https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-backups