使用Bacula进行网络备份
事实上,我们生活在一个越来越依赖数据的世界。 此外,从意外删除到灾难性硬盘驱动器故障,对数据的安全性存在许多威胁。 数据越重要,如果丢失数据就越难以重新创建,备份越重要。 因此,本文介绍了如何使用Bacula设置备份服务器以及如何配置网络上的其他系统以将数据备份到它.
准备
此配方至少需要两个具有有效网络连接的CentOS系统。 第一个系统是本地系统,我们假设它具有主机名benito和IP地址192.168.56.41。 第二个系统是备份服务器。 您需要在两个系统上进行管理访问,方法是使用root帐户登录或使用sudo.
怎么做
在本地系统上执行以下步骤以安装和配置Bacula文件守护程序:
- 安装bacula-client软件包:
yum install bacula-client
- 使用文本编辑器打开文件守护程序的配置文件:
vi /etc/bacula/bacula-fd.conf
- 在FileDaemon资源中,更新Name指令的值以反映系统的主机名,后缀为-fd:
FileDaemon { Name = benito-fd ... }
- 保存更改并关闭文件.
- 启动文件守护程序并使其在系统重新启动时启动:
systemctl start bacula-fd.service systemctl enable bacula-fd.service
打开防火墙以允许TCP流量通过端口9102:
firewall-cmd --zone=public --permanent --add-port=9102/tcp firewall-cmd --reload
- 在要备份的每个系统上重复步骤1-6.
在指定为备份服务器的系统上执行以下步骤,以安装和配置Bacula控制器,存储和文件守护程序.
- 安装bacula-console,bacula-director,bacula-storage和bacula-clientpackages:
yum install bacula-console bacula-director bacula-storage bacula-client
- 重新链接目录库以使用SQLite数据库存储:
alternatives --config libbaccats.so
- 当要求提供选择号时输入2。
- 创建SQLite数据库文件并导入表模式:
/usr/libexec/bacula/create_sqlite3_database /usr/libexec/bacula/make_sqlite3_tables
- 使用文本编辑器打开director的配置文件:
vi /etc/bacula/bacula-dir.conf
- 在名称具有值BackupClient1的作业资源中,更改Name指令的值以反映其中一个本地系统。 然后添加一个Client指令,其值与该系统的FileDaemonName相匹配:
Job { Name = "BackupBenito" Client = benito-fd JobDefs = "DefaultJob" }
- 复制作业资源并根据需要更新其指令值,以便为要备份的每个系统定义作业资源.
- 对于要备份的每个系统,复制Namedirective设置为bacula-fd的客户端资源。 在复制的资源中,更新Name和Addressdirectives以标识该系统:
Client { Name = bacula-fd Address = localhost ... } Client { Name = benito-fd Address = 192.168.56.41 ... } Client { Name = javier-fd Address = 192.168.56.42 ... }
- 保存更改并关闭文件.
- 打开存储后台程序的配置文件:vi /etc/bacula/bacula-sd.conf
- 在Name资源中,Name的值为FileStorage,将Archive Device指令的值更改为/ bacula:
Device { Name = FileStorage Media Type = File Archive Device = /bacula ...
- 保存更新并关闭文件.
- 创建/ bacula目录并为其分配正确的所有权:
mkdir /bacula chown bacula:bacula /bacula
- 如果启用了SELinux,请重置新目录上的安全上下文:
restorecon -Rv /bacula
- 启动director和storage守护程序,并使它们在系统重新启动时启动:
systemctl start bacula-dir.service bacula-sd.service bacula-fd.service systemctl enable bacula-dir.service bacula-sd.service bacula-fd.service
- 打开防火墙以允许TCP流量通过端口9101-9103:
firewall-cmd --zone=public --permanent --add-port=9101-9103/tcp firewall-cmd -reload
- 启动Bacula的控制台界面:
bconsole
- 输入label以创建备份目标。 提示输入卷名时,请使用Volume0001或类似值。 系统提示您输入池时,请选择“文件池”:
- 进入退出退出控制台界面.
原理解释
配置Bacula在很大程度上是一项艰巨的任务,因为该套件的分布式架构以及它在组织和安排备份和恢复作业时提供的灵活性。但是,一旦一切正常并且正在运行,我相信您会安心地知道您的数据是安全的,不会发生事故和灾难。
Bacula由几个组成部分组成。在这个配方中,我们的努力集中在三个守护进程 - 导演,文件守护进程和存储守护进程。文件守护程序安装在要备份的每个客户机系统上,并侦听来自控制器的连接。导向器按计划连接到每个文件守护程序,并告诉它要备份哪些文件以及将它们复制到哪里(存储守护程序)。存储后台驻留程序接收备份的数据并将其写入备份介质,例如磁盘或磁带驱动器。
首先,我们在客户端系统上安装了带有bacula-client软件包的文件守护进程。然后我们编辑了/etc/bacula/bacula-fd.conf中的文件守护程序配置文件,以指定进程的名称。惯例是将后缀-fd添加到系统的主机名:
FileDaemon { Name = benito-fd FDPort = 9102 WorkingDirectory = /var/spool/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 }
更新配置后,我们启动了服务并在系统防火墙中打开了相应的端口。 文件守护程序正在侦听,等待导演连接并告诉它需要做什么.
在备份服务器上,我们安装了bacula-director,bacula-storage和bacula-client软件包。 这为我们提供了导向器和存储守护进程,以及另一个文件守护进程。 文件守护程序在备份服务器上的用途是备份Bacula的目录:
Bacula维护着一个关于以前称为目录的备份作业的元数据数据库,可以通过MySQL,PostgreSQL或SQLite进行管理。 SQLite是一个嵌入式数据库库,这意味着使用它的程序链接到SQLite库并管理自己的数据库文件。 为了支持多个数据库,编写了Bacula的代码,以便所有数据库访问例程都包含在单独的共享库中,每个数据库都有不同的库。 然后,当Bacula希望与数据库交互时,它通过libbaccats.so这样做,这是一个虚假的库,它只不过是指向某个特定数据库库的符号链接。 这让Bacula支持不同的数据库,而不需要我们重新编译它的源代码。
要创建符号链接,我们使用了替代方法并选择了我们想要使用的真实库:
alternatives --config libbaccats.so
然后,我们使用Bacula附带的脚本初始化数据库的模式:
/usr/libexec/bacula/create_sqlite3_database /usr/libexec/bacula/make_sqlite3_tables
注意
这个配方利用了Bacula的SQLite支持,因为它很方便,不需要额外的设置工作。 如果您想使用MySQL,请按照第7章“使用数据库”中的讨论安装MySQL,为Bacula创建专用的MySQL用户,然后使用以下脚本初始化模式:
/usr/libexec/bacula/grant_mysql_privileges /usr/libexec/bacula/create_mysql_database /usr/libexec/bacula/make_mysql_tables
您还需要查看Bacula的配置文件,以便为Bacula提供所需的MySQL凭据。
在/etc/bacula/bacula-dir.conf中导演的配置文件中定义了不同的资源,其中许多资源不仅包含自己的值,还包含对其他资源的引用。例如,FileSet资源指定在备份和还原中包含或排除哪些文件,而Schedule资源指定何时应进行备份。 JobDef资源可以包含多个备份作业通用的各种配置指令,还可以引用特定的FileSet和Schedule资源。 Clientresources识别运行文件守护进程的系统的名称和地址,Jobresource将把JobDef和Client资源整合在一起,以定义特定系统的备份或还原任务。一些资源在更细粒度的级别定义事物,并用作构建块来定义其他资源,以灵活的方式创建复杂的定义.
提示
默认资源定义定义了足够用于此配方的基本备份和还原作业。 您将需要研究配置并查看不同资源如何组合在一起,以便您可以调整它们以更好地满足您的备份需求.
首先,我们通过更改其名称和客户端来自定义现有备份作业。 然后,我们通过更改其名称和地址以指向运行文件守护程序的特定系统来自定义现有客户端资源。 这对Job和Client资源是重复的,我们备份的每个系统都有一对。 请注意,我们还保留了一个默认的Clientresource,它定义了localhost的bacula-fd。 这是备份服务器本地的文件守护程序,将成为还原作业和目录库备份等目标:
Job { Name = "BackupBenito" Client = benito-fd JobDefs = "DefaultJob" } Job { Name = "BackupJavier" Client = javier-fd JobDefs = "DefaultJob" } Client { Name = bacula-fd Address = localhost ... } Client { Name = benito-fd Address = 192.168.56.100 ... } Client { Name = javier-fd Address = 192.168.56.100 ... }
提示
如果您有许多客户端系统或许多工作定义,您可以通过在自己的文件中定义这些资源并将其读入bacula-dir.conf来更好地组织。 创建目录/etc/bacula/config.d,并将各个配置文件放在那里。 然后将以下行添加到bacula-dir.conf中以读取它们:
@|"find /etc/bacula/config.d -name '*.conf' f -exec echo @{} \;"
要完成设置,我们需要标记备份卷。 与大多数其他任务一样,此任务通过bconsole执行,后者是Bacula导演的控制台界面。
我们使用label命令为备份卷定义标签,当提示输入池时,我们将标记的卷分配给文件池。 以与逻辑卷的工作方式非常相似的方式(请参阅第5章,管理文件系统和存储),将单个设备或存储单元分配为卷,并将卷分组到存储池中。 例如,如果池包含两个由磁带驱动器支持的卷,并且其中一个驱动器已满,则存储后台驻留程序会将备份数据写入具有可用空间的磁带。 即使在我们的配置中我们将备份存储到磁盘,我们仍然需要创建一个卷作为要写入的数据的目标.
此时,您应该考虑哪种备份策略最适合您。完整备份是数据的完整副本,差异备份仅捕获自上次完全备份以来已更改的文件,增量备份会复制自上次备份以来已更改的文件(无论备份类型如何)。通常,管理员使用这些的组合,可能在一周开始时进行完整备份,然后在每天进行差异或增量备份。这节省了存储空间,因为差异和增量备份更小,并且在需要还原文件时也很方便,因为需要搜索有限数量的备份以查找文件。
另一个考虑因素是每个备份的预期大小以及备份运行完成所需的时间。完全备份显然需要更长时间才能运行,而在周一至周五9-5个工作小时的办公室中,可能无法在晚上运行完整备份。在星期五执行完整备份可以在周末运行备份时间。当时间较短时,可以在其他日子执行较小的增量备份。
在备份策略中,另一个重要的点是备份将保留多长时间以及保留备份的位置。这触及了一个更大的问题,即灾难恢复。如果您的办公室被烧毁,如果他们坐在办公室的IT壁橱中,那么一年的备份将毫无用处。在一个雇主处,我们将最后一次完整备份和最后一天的增量保留在现场磁盘上。然后将这些复制到磁带并运送到现场。
无论您选择实施何种策略,您的备份都与从中恢复数据的能力一样好。您应定期测试备份以确保可以还原文件。
要按需运行备份作业,请在bconsole中输入run。系统将提示您选择一个当前配置的作业。然后,您将看到作业的选项,例如将执行的备份级别(完整,增量或差异),优先级以及何时运行。您可以键入yes或no来接受或取消它,或者输入mod来修改参数。接受后,作业将排队并分配作业ID。
要从备份还原文件,请使用restore命令。您将看到一个选项列表,允许您指定从哪个备份中检索所需的文件。根据您的选择,提示将有所不同。 Bacula的提示相当清楚,所以请仔细阅读它们,它将指导您完成整个过程。
除了运行和恢复命令之外,另一个有用的命令是status。如果当前正在运行任何作业,以及哪些作业已完成,它将允许您查看Bacula组件的当前状态。可以通过在bconsole中键入help来检索完整的命令列表.
See also
Refer to the following resources for more information on working with Bacula:
- Bacula documentation (http://blog.bacula.org/documentation/)
- How to use Bacula on CentOS 7 (https://www.digitalocean.com/community/tutorial_series/how-to-use-bacula-on-centos-7)
- Bacula-Web (a web-based reporting and monitoring tool for Bacula) (http://www.bacula-web.org/)
本文暂时没有评论,来添加一个吧(●'◡'●)