为生产而构建:网络应用程序 - 备份

简介

在为应用程序的各个组件制定恢复计划后,您应该设置支持它所需的备份系统。本教程将重点介绍如何使用bacula作为备份解决方案。使用成熟的备份系统(如BAKULA)的好处是,它使您能够完全控制您在单个文件级别备份和恢复的内容,并且您可以根据最适合您的情况安排备份和恢复。

备份示意图

DigitalOcean Drop Backups(整个水滴的快照备份)]等解决方案易于设置,如果您只需要每周备份,则可能足以满足您的需求。如果您选择DigitalOcean备份,请务必按照创建数据库热备份 部分设置数据库的热备份。

在本教程的这一部分中,我们将设置一个bacula来维护组成您的应用程序设置(DB1、App1、App2和Lb1)的服务器的必需备份 的日常备份,这些备份在我们的恢复计划中已经定义-本质上,这是一个向您展示如何使用bacula创建LAMP堆栈的备份的教程。我们还将使用Percona XtraBackup为您的MySQL数据库创建热备份。最后,我们将使用rsync在远程数据中心的服务器上创建备份副本。这将向您的设置添加两台服务器:** 备份** 和** 远程备份** (位于单独的数据中心)。

我们开始吧

在备份服务器上安装bacula

按照以下教程在您的 备份 服务器上设置Bacula:如何在Ubuntu 14.04上安装Bacula服务器

然后按照本教程的组织Backula Director配置(服务器) 部分进行操作:如何使用Bacula.备份Ubuntu14.04服务器在设置BAKULA客户端(在要备份的服务器上)时,您将需要Director名称。当您到达** 安装和配置bacula客户端** 部分时停止。

请注意,我们将对将要设置的所有备份作业使用RemoteFile池。话虽如此,在继续操作之前,您可能需要更改一些设置。

在每台服务器上安装bacula客户端

按照本教程的 安装和配置Bacula客户端 部分的说明,在您要备份的每台服务器(db 1、app 1、app 2和lb 1)上安装Bacula客户端:如何使用Bacula备份Ubuntu 14.04服务器。到达 ** 添加文件集(服务器)** 部分时停止。

请注意,您需要每个服务器上的bacula-fd.conf文件中的FileDaemon名称 (通常是附加)和** Director密码** (bacula服务器将用来连接到每个客户端的密码)。

将BAKULA客户端添加到备份服务器

备份 (bacula服务器)上,为安装了bacula客户端的每台服务器的/etc/bacula/conf.d/clients.conf文件中添加一个** 客户端资源** 。

打开clients.conf文件:

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

以下是数据库服务器DB1 的客户端资源定义示例。请注意,** 名称** 的值应该与** FileDaemon** 资源的名称匹配,并且** 密码** 应该与客户端服务器上的** Director** 资源的密码匹配-这些值可以在每个bacula客户端服务器的/etc/bacula/bacula-fd.con中找到:

 1[label clients.conf — Example Client resource definition]
 2Client {
 3  Name = db1-fd
 4  Address = db1.nyc3.example.com
 5  FDPort = 9102
 6  Catalog = MyCatalog
 7  Password = "PDL47XPnjI0QzRpZVJKCDJ_xqlMOp4k46"          # password for Remote FileDaemon
 8  File Retention = 30 days            # 30 days
 9  Job Retention = 6 months            # six months
10  AutoPrune = yes                     # Prune expired Jobs/Files
11}

为剩余的每台BAKULA客户端服务器创建类似的客户端资源。在我们的示例中,完成后应该有四个客户端资源:DB1-fd 、** app1-fd** 、** app2-fd** 和** lb1-fd** 。这会将** 备份** 服务器上的bacula Director配置为能够连接到每台服务器上的bacula客户端。

保存并退出。

有关此部分的更多详细信息,请参阅How to Backup an Ubuntu Server With Backula tutorial.]中的**安装和配置BAKULA客户端

创建您的数据库热备份

为了确保我们的活动数据库产生一致(即可用)的备份,必须特别小心。使用MySQL创建热备份的一个简单而有效的方法是使用Percona XtraBackup。

==同步,由Elderman更正==@elder_man

在您的数据库服务器DB1 上,按照以下教程安装和配置Percona XtraBackup:如何在Ubuntu 14.04.上使用Percona XtraBackup创建MySQL数据库的热备份到达** 执行完全热备份** 部分时停止。

创建XtraBackup脚本

Percona XtraBackup已经准备好为MySQL数据库创建热备份,最终将由Bacula(或DigitalOcean Backups)备份,但热备份必须以某种方式进行计划。我们将设置最简单的解决方案:bash脚本和cron作业。

/usr/local/bin中创建一个名为run_Extra_backup.sh的bash脚本:

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

添加以下脚本。请确保将用户和密码替换为您在安装XtraBackup时设置的任何内容:

 1[label /usr/local/bin/run_xtrabackup.sh]
 2#!/bin/bash
 3
 4# pre xtrabackup
 5chown -R mysql: /var/lib/mysql
 6find /var/lib/mysql -type d -exec chmod 770 "{}" \;
 7
 8# delete existing full backup
 9rm -r /data/backups/full
10
11# xtrabackup create backup
12innobackupex --user=bkpuser  --password=bkppassword --no-timestamp /data/backups/full
13
14# xtrabackup prepare backup
15innobackupex --apply-log /data/backups/full

保存并退出。运行此脚本(以超级用户权限)将删除位于/data/ackups/full的现有XtraBackup备份,并创建新的完整备份。有关使用XtraBackup创建备份的更多详细信息,请参阅XtraBackup教程的执行完整的热Backup]部分。

使脚本可执行:

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

为了正确备份我们的数据库,我们必须在bacula尝试备份数据库服务器之前运行(并完成)XtraBackup脚本。一个不错的解决方案是将您的BAKULA备份作业配置为将该脚本作为)]来保持其简单性。

创建cron配置文件(将/etc/cron.d中的文件添加到根目录的crontab中):

1sudo vi /etc/cron.d/xtrabackup

添加以下cron作业:

1[label /etc/cron.d/xtrabackup]
230 22    * * *   root    /usr/local/bin/run_xtrabackup.sh

这将脚本安排为每天晚上10:30(22小时30分钟)以超级用户身份运行。我们之所以选择这个时间,是因为bacula当前计划在每天晚上11:05运行其备份作业-我们稍后将讨论调整这一时间。这为XtraBackup脚本提供了35分钟的完成时间。

现在已经设置了数据库热备份,让我们来看一看bacula备份文件集。

配置bacula文件集

BAKULA将创建在与将执行的备份作业相关联的文件集中指定的文件的备份。本节将介绍如何创建包含我们在恢复计划中确定的必需备份 的文件集。有关将文件集添加到BAKULA的更多详细信息,请参阅BAKULA教程的添加文件集(Server)部分。

在您的备份 服务器上,打开filesets.conf文件:

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

数据库服务器文件集

根据我们的数据库服务器恢复计划,数据库服务器所需的备份包括:

  • MySQL数据库: 我们的XtraBackup脚本在/data/Backps/full中创建备份副本,每天晚上10:30
  • MySQL配置: 位于/etc/mysql

我们还将包括XtraBackup脚本:/usr/local/bin/run_xtrabackup.sh,以及关联的cron文件。

考虑到所需的备份,我们将把这个MySQL数据库文件集添加到我们的bacula配置中:

 1[label filesets.conf — MySQL Database]
 2FileSet {
 3  Name = "MySQL Database"
 4  Include {
 5    Options {
 6      signature = MD5
 7      compression = GZIP
 8    }
 9    File = /data/backups
10    File = /etc/mysql/my.cnf
11    File = /usr/local/bin/run_xtrabackup.sh
12    File = /etc/cron.d/xtrabackup
13  }
14  Exclude {
15    File = /data/backups/exclude
16  }
17}

现在让我们转到应用程序服务器FileSet。

应用服务器文件集

根据我们的应用程序服务器恢复计划,应用程序服务器所需的备份包括:

*应用程序文件: 在我们的示例中位于/var/www/html

考虑到所需的备份,我们将把这个Apache DocumentRoot文件集添加到我们的bacula配置中:

 1[label filesets.conf  Apache DocumentRoot]
 2FileSet {
 3  Name = "Apache DocumentRoot"
 4  Include {
 5    Options {
 6      signature = MD5
 7      compression = GZIP
 8    }
 9    File = /var/www/html
10  }
11  Exclude {
12    File = /var/www/html/exclude
13  }
14}

您可能还想包括Apacheport配置文件,但这很容易被替换。

现在,让我们转到负载平衡器服务器文件集。

负载平衡器服务器文件集

根据我们的负载平衡器服务器恢复计划,负载平衡器服务器所需的备份包括:

*SSL证书(PEM)和相关文件: 在我们的示例中位于/root/certs中 *HAProxy配置文件: 位于/etc/haproxy

考虑到所需的备份,我们将把这个Apache DocumentRoot文件集添加到我们的bacula配置中:

 1[label filesets.conf — SSL Certs and HAProxy Config]
 2FileSet {
 3  Name = "SSL Certs and HAProxy Config"
 4  Include {
 5    Options {
 6      signature = MD5
 7      compression = GZIP
 8    }
 9    File = /root/certs
10    File = /etc/haproxy
11  }
12  Exclude {
13    File = /root/exclude
14  }
15}

保存并退出。

现在,我们的FileSet已配置好。让我们继续创建将使用这些文件集的bacula备份作业。

创建bacula备份作业

我们将创建Bacula备份作业,该作业将运行并创建我们服务器的备份。

/etc/bacula/conf.d中创建一个jobs.con文件:

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

数据库服务器备份作业

对于数据库服务器备份作业,我们将创建一个名为)和FileSet (MySQL数据库):

1[label jobs.conf — Backup db1]
2Job {
3  Name = "Backup db1"
4  JobDefs = "DefaultJob"
5  Client = db1-fd
6  Pool = RemoteFile
7  FileSet="MySQL Database"
8}

现在,我们将设置应用程序服务器备份作业。

应用程序服务器备份作业数

对于我们的应用程序服务器,我们将创建两个名为)和文件集 (Apache DocumentRoot)。

App1作业:

1[label jobs.conf — Backup app1]
2Job {
3  Name = "Backup app1"
4  JobDefs = "DefaultJob"
5  Client = app1-fd
6  Pool = RemoteFile
7  FileSet="Apache DocumentRoot"
8}

App2作业:

1[label jobs.conf — Backup app2]
2Job {
3  Name = "Backup app2"
4  JobDefs = "DefaultJob"
5  Client = app2-fd
6  Pool = RemoteFile
7  FileSet="Apache DocumentRoot"
8}

现在,我们将设置负载平衡器服务器备份作业。

负载均衡服务器备份作业

对于我们的负载均衡器服务器备份作业,我们将创建一个名为)和文件集 (SSL证书和HAProxy配置):

1[label jobs.conf — Backup lb1]
2Job {
3  Name = "Backup lb1"
4  JobDefs = "DefaultJob"
5  Client = lb1-fd
6  Pool = RemoteFile
7  FileSet="SSL Certs and HAProxy Config"
8}

保存并退出。

现在,我们的备份作业已配置完毕。最后一步是重新启动bacula Director。

重启bacula Director

备份 服务器上,重新启动bacula Director以使我们的所有更改生效:

1sudo service bacula-director restart

此时,您需要测试客户端连接和备份作业,如何使用BAKULA tutorial.备份服务器》中介绍了这两项内容该教程还介绍了如何恢复bacula备份。请注意,恢复MySQL数据库将要求您遵循Percona XtraBackup教程中的[Perform Backup Restoration](https://andsky.com/tech/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14-04 perform-backup-restoration)步骤。

查看备份计划

可以通过修改Bacula Director配置(/etc/bacula/bacula-dir.conf)来调整Bacula备份计划。我们创建的所有备份作业都使用DefaultJobJobDef,它使用WeeklyCycle计划,该计划定义为:

  • 每月第一个星期日晚上11:05进行完全备份
  • 其他所有星期日晚上11:05进行差异备份
  • 其他日期的增量备份时间为周一至周六晚上11:05

您可以通过使用bacula控制台检查Director的状态来验证这一点。它应该会输出您安排的所有作业:

1[secondary_label Director Status — Scheduled Jobs]
2Scheduled Jobs:
3Level Type Pri Scheduled Name Volume
4===================================================================================
5Incremental Backup 10 20-May-15 23:05 BackupLocalFiles MyVolume
6Incremental Backup 10 20-May-15 23:05 Backup lb1 Remote-0002
7Incremental Backup 10 20-May-15 23:05 Backup app2 Remote-0002
8Incremental Backup 10 20-May-15 23:05 Backup app1 Remote-0002
9Incremental Backup 10 20-May-15 23:05 Backup db1 Remote-0002

您可以随意添加或调整任何备份作业的时间表。将应用程序服务器的时间表修改为与Percona XtraBackup脚本执行的同时(晚上10:30)发生是有意义的。这将防止应用程序和数据库备份彼此不一致。

设置远程备份

现在,我们准备设置一个远程服务器,用于存储Bacula备份的副本。此远程服务器应位于地理上独立的区域中,这样即使生产数据中心发生灾难,您也将拥有关键备份的副本。在我们的示例中,我们将使用DigitalOcean的San Francisco(SFO 1)区域作为我们的 remotebacks 服务器。

我们将介绍一种使用公共SSH密钥、rsync和cron将备份从备份 服务器发送到** 远程备份** 服务器的简单方法。

remotebacks 服务器上,创建一个用户,用于rsync登录。

接下来,在备份 服务器上,以根用户身份生成无密码SSH密钥对。在您刚刚创建的** 远程备份** 用户上安装公钥。这在我们的如何设置SSH Keys教程》中有所介绍。

备份 服务器上,编写rsync命令,将bacula备份数据(/bacula/backup)复制到** 远程备份** 服务器上的某个位置。RSync用法在我们的How to Use Rsync tutorial.》中介绍该命令可能如下所示:

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

将命令添加到脚本中,如/usr/local/bin/rsync_backups.sh并使其可执行。

最后,您需要设置一个cron作业,在bacula备份作业通常完成之后,以超级用户身份运行rsync_ackups.sh脚本。这在我们的如何使用Cron tutorial.调度例行任务》中进行了介绍

完成所有这些设置后,请验证第二天远程备份 服务器上是否有备份的副本。

其他注意事项

我们没有讨论备份的磁盘要求。您肯定会想要检查您的备份使用了多少磁盘空间,并根据您的需求和资源修改您的设置和备份时间表。

除了创建应用程序服务器的备份外,您可能还希望为添加到设置中的任何其他服务器设置备份。例如,一旦启动并运行监控和集中日志服务器,您就应该配置bacula来创建它们的备份。

结论

现在,您应该拥有生产应用程序服务器的每日备份以及这些备份的远程副本。请确保您能够恢复文件,并将恢复数据的步骤添加到恢复计划中。

继续学习下一教程,开始设置生产服务器的监视设置:为生产构建:Web应用程序-Monitoring.

Published At
Categories with 技术
comments powered by Disqus