介绍
在为您的应用程序的各个组件制定恢复计划后,您应该设置支持它所需的备份系统。 本教程将重点介绍使用Bacula作为备份解决方案。 使用完整备份系统(例如Bacula)的好处是,它可以完全控制您在单个文件级别备份和还原的内容,并且可以根据最适合的情况安排备份和恢复。
解决方案如DigitalOceanDroplet备份 (整个Droplet的快照备份)是很容易设置和可能足以满足您的需求,如果你只需要每周备份。 如果您选择DigitalOcean备份,请务必遵循创建数据库节热备份设置您的数据库热备份。
在教程的这一部分,我们将成立一个Bacula的维护构成应用程序的设置(DB1,APP1,APP2和LB1)服务器所需的备份每日备份,在我们的恢复计划,基本上是以前定义的,这是一个教程,显示如何使用Bacula创建LAMP的备份。 我们还将使用Percona XtraBackup来创建MySQL数据库的热备份。 最后,我们将使用rsync在远程数据中心的服务器上创建备份的副本。 这将两台服务器添加到您的设置: 备份和remotebackups(位于一个单独的数据中心)。
让我们开始吧。
在备份服务器上安装Bacula
按照本教程设置Bacula的备份服务器上: 如何在Ubuntu 14.04安装Bacula的服务器 。
然后按照本教程的组织Bacula的Director配置(服务器)部分: 如何备份一个Ubuntu 14.04服务器与Bacula的 。 在设置Bacula客户端(在要备份的服务器上)时,您将需要“Director”名称。 当你到达了安装和配置客户端Bacula的部分停止。
请注意,我们将使用RemoteFile池作为我们将要设置的所有备份作业。 有了这个,你可能想改变一些设置,然后继续。
在每个服务器上安装Bacula客户端
:要按照本教程的安装和配置客户端Bacula的部分备份(DB1,APP1,APP2和LB1)每个服务器上安装客户端Bacula的如何备份一个Ubuntu 14.04服务器与Bacula的 。 当你到达添加文件集(服务器)部分停止。
请注意,您将需要FileDaemon名称 (通常由“-fd”Stapling的主机名)和密码主任从(该Bacula的服务器将用于连接到每个客户的密码) bacula-fd.conf
每台服务器上的文件。
将Bacula客户端添加到备份服务器
在备份 ,Bacula的服务器,添加客户端资源的/etc/bacula/conf.d/clients.conf
为您安装的客户端Bacula的每台服务器上的文件。
打开clients.conf
文件:
sudo vi /etc/bacula/conf.d/clients.conf
这里是数据库服务器,db1中的客户机资源定义的一个例子。 需要注意的是名称的值应该匹配的名称FileDaemon资源和密码应与主管资源的密码,客户端服务器的这些值中可以找到关于/etc/bacula/bacula-fd.conf
每个Bacula客户端服务器:
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客户端服务器创建一个类似的客户端资源。 在我们的例子,应该是当我们完成4客户资源:DB1-FD,APP1-FD,APP2-FD和LB1-FD。 此配置Bacula的主任, 备份服务器上,才能够连接到客户端Bacula的每台服务器上..
保存并退出。
关于这部分的更多细节可以在安装和配置客户端Bacula的在中找到如何备份一个Ubuntu服务器Bacula的教程 。
创建数据库的热备份
为了确保我们对活动数据库生成一致(即可用)备份,必须特别注意。 使用MySQL创建热备份的一个简单而有效的方法是使用Percona XtraBackup。
安装Percona XtraBackup
在您的数据库服务器,DB1,安装并按照本教程中配置的Percona XtraBackup: 如何在Ubuntu 14.04与Percona的XtraBackup创建MySQL数据库的热备份 。 停止当你到达进行全热备份一节。
创建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时设置的任何内容替换用户和密码:
#!/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
并创建一个新的完全备份。 可以在中找到有关使用XtraBackup创建备份的更多细节进行全热备份的的XtraBackup教程的部分。
使脚本可执行:
sudo chmod +x /usr/local/bin/run_xtrabackup.sh
为了正确备份我们的数据库,我们必须在Bacula尝试备份数据库服务器之前运行(并完成)XtraBackup脚本。 一个好的解决办法是配置Bacula的备份作业来运行该脚本作为“备份前脚本”,但我们会选择使用cron作业 ,以保持它的简单。
创建一个cron配置文件(文件/etc/cron.d
被添加到根的crontab):
sudo vi /etc/cron.d/xtrabackup
添加以下cron作业:
30 22 * * * root /usr/local/bin/run_xtrabackup.sh
这将调度脚本以root用户每天晚上10:30(第22小时,第30分钟)运行。 我们选择了这个时间,因为Bacula目前计划在每天下午11:05运行其备份作业 - 我们将在后面讨论调整。 这允许XtraBackup脚本完成35分钟。
现在,数据库热备份已设置,让我们看看Bacula备份FileSets。
配置Bacula FileSet
Bacula将创建在与将要执行的备份作业相关联的FileSets中指定的文件的备份。 本节将介绍创建文件集,包括我们在我们的恢复计划中确定的所需的备份 。 可以在中找到有关添加文件集Bacula的更多细节添加文件集(服务器)的Bacula的教程部分。
在备份服务器上,打开filesets.conf
文件:
sudo vi /etc/bacula/conf.d/filesets.conf
数据库服务器FileSet
根据我们的数据库服务器恢复计划,我们的数据库服务器所需的备份包括:
- MySQL数据库:备份副本是由我们XtraBackup脚本创建
/data/backups/full
日晚上10:30,每天 - MySQL配置:位于
/etc/mysql
我们也将包括XtraBackup脚本: /usr/local/bin/run_xtrabackup.sh
和关联的cron文件。
考虑到我们需要的备份,我们将这个“MySQL数据库”FileSet添加到我们的Bacula配置:
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。
应用程序服务器FileSet
根据我们的应用服务器恢复计划,我们的应用服务器所需的备份包括:
- 应用程序文件:位于
/var/www/html
在我们的例子
考虑到我们所需的备份,我们将把这个“Apache DocumentRoot”FileSet添加到我们的Bacula配置中:
FileSet {
Name = "Apache DocumentRoot"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /var/www/html
}
Exclude {
File = /var/www/html/exclude
}
}
您可能还希望包括Apache端口配置文件,但这是可以轻易替换的。
现在让我们继续到负载均衡器服务器FileSet。
负载平衡器服务器FileSet
根据负载均衡器服务器恢复计划,我们的负载均衡器服务器所需的备份包括:
- SSL证书(PEM)和相关文件:位于
/root/certs
在我们的例子 - HAProxy的配置文件:位于
/etc/haproxy
考虑到我们所需的备份,我们将把这个“Apache DocumentRoot”FileSet添加到我们的Bacula配置中:
FileSet {
Name = "SSL Certs and HAProxy Config"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /root/certs
File = /etc/haproxy
}
Exclude {
File = /root/exclude
}
}
保存并退出。
现在我们的FileSet被配置。 让我们继续创建将使用这些FileSet的Bacula备份作业。
创建Bacula备份作业
我们将创建Bacula备份作业,将运行和创建我们的服务器的备份。
创建一个jobs.conf
文件/etc/bacula/conf.d
:
sudo vi /etc/bacula/conf.d/jobs.conf
数据库服务器备份作业
对于我们的数据库服务器备份作业,我们将创建一个名为“备份db1”的新作业。 这里最重要的是,我们指定了正确的客户端 (DB1-FD)和文件集 (MySQL数据库):
Job {
Name = "Backup db1"
JobDefs = "DefaultJob"
Client = db1-fd
Pool = RemoteFile
FileSet="MySQL Database"
}
现在我们将设置应用程序服务器备份作业。
应用程序服务器备份作业
对于我们的应用服务器,我们将创建两个名为“备份app1”和“备份app2”的备份作业。 这里最重要的是,我们指定了正确的客户端 (APP1-FD和app2的-FD)和文件集 (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"
}
现在我们将设置负载均衡器服务器备份作业。
负载平衡器服务器备份作业
对于我们的负载均衡器服务器备份作业,我们将创建一个名为“备份lb1”的新作业。 这里最重要的是,我们指定了正确的客户端 (LB1-FD)和文件集 (SSL证书和HAProxy的配置):
Job {
Name = "Backup lb1"
JobDefs = "DefaultJob"
Client = lb1-fd
Pool = RemoteFile
FileSet="SSL Certs and HAProxy Config"
}
保存并退出。
现在我们配置了备份作业。 最后一步是重新启动Bacula Director。
重新启动Bacula Director
在备份服务器上,重新启动Bacula的主任把我们所有的更改生效:
sudo service bacula-director restart
在这一点上,你会想测试你的客户端连接和备份工作,这两者都覆盖在如何备份服务器与Bacula的教程 。 该教程还包括如何恢复Bacula备份。 请注意,还原MySQL数据库将要求您遵守执行备份恢复的Percona的XtraBackup教程一步。
查看备份计划
所述Bacula的备份时间表可以通过修改Bacula的Director配置(被调整/etc/bacula/bacula-dir.conf
)。 我们创建的所有备份作业都使用“DefaultJob”JobDef,它使用“WeeklyCycle”计划,定义为:
- 一个月的第一个星期日下午11:05完全备份
- 所有其他星期日晚上11点05分的差异备份
- 在其他日子(周一至周六,下午11: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 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脚本的同时(10:30 pm)是有意义的。 这将防止应用程序和数据库备份彼此不一致。
设置远程备份
现在我们准备好设置一个远程服务器,存储我们Bacula备份的副本。 此远程服务器应位于地理上分离的区域中,因此即使生产数据中心发生灾难,您也将拥有关键备份的副本。 在我们的例子中,我们将使用DigitalOcean旧金山(SFO1)地区为我们remotebackups服务器。
我们将介绍一个简单的方法来利用公共SSH密钥,rsync的和cron从我们的备份服务器发送我们的备份到我们remotebackups服务器。
在remotebackups服务器, 创建用户将被用于rsync的登录。
接下来, 备份服务器上生成一个无密码SSH密钥对的根。 安装在您刚刚创建的用户remotebackups公共密钥。 这是覆盖在我们教程。
在备份服务器上,写了一个rsync命令的副本Bacula的备份数据( /bacula/backup
)到remotebackups服务器上的某个地方。 rsync的使用覆盖在我们如何使用rsync教程 。 命令可能看起来像这样:
rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup
命令添加到脚本,如/usr/local/bin/rsync_backups.sh
并使其可执行文件。
最后,你会想建立一个运行一个cron作业rsync_backups.sh
脚本作为根,在Bacula的备份工作,通常完成后。 这是覆盖在我们如何安排日常任务:用cron教程 。
在设置了这一切后,验证是否有在remotebackups服务器上的备份第二天的副本。
其他注意事项
我们没有谈论备份的磁盘要求。 您一定要查看您的备份使用了多少磁盘空间,并根据您的需求和资源修改您的设置和备份计划。
除了创建应用程序服务器的备份之外,您可能还需要为添加到设置中的任何其他服务器设置备份。 例如,在您启动并运行监控和集中式日志记录服务器后,您应该配置Bacula来创建备份。
结论
您现在应该有生产应用程序服务器的每日备份和这些备份的远程副本。 请务必验证您是否能够还原文件,并添加将数据还原到恢复计划的步骤。
继续下一个教程开始设置为您的生产服务器设置监控: 构建用于生产:Web应用程序-监视 。