如何在CentOS 7 安装Bacula服务

介绍

Bacula是一个开源网络备份解决方案,允许您创建备份和执行计算机系统的数据恢复。它非常灵活和健壮,这使得它,虽然配置稍微麻烦,适合在许多情况下的备份。备份系统是 在大多数服务器基础架构的重要组成部分 ,从数据丢失恢复往往是灾难恢复计划的重要组成部分。 在本教程中,我们将向您展示如何在CentOS 7服务器上安装和配置Bacula的服务器组件。我们将配置Bacula执行每周作业,创建本地备份(即其自己的主机的备份)。这本身并不是Bacula的特别引人注目的用途,但它将为您创建其他服务器(即备份客户端)的备份提供一个良好的起点。本系列的下一个教程将介绍如何通过安装和配置Bacula客户端以及配置Bacula服务器来创建其他远程服务器的备份。 如果您想使用Ubuntu 14.04代替,请点击此链接: 如何在Ubuntu 14.04安装Bacula的服务器

先决条件

您必须在CentOS 7服务器上具有超级用户(sudo)访问权限。此外,服务器将需要足够的磁盘空间用于计划在任何给定时间保留的所有备份。 如果你正在使用DigitalOcean,您应在Bacula的服务器上启用 专用网络 ,以及所有在同一个数据中心的区域客户端服务器。这将允许您的服务器在执行备份时使用专用网络,从而减少网络开销。 我们将配置Bacula的使用我们的服务器,如私人FQDN bacula.private.example.com 。如果您没有DNS设置,请改用相应的IP地址。如果您没有启用专用网络,请将本教程中的所有网络连接信息替换为相关服务器可访问的网络地址(例如公共IP地址或VPN隧道)。 最后一个假设是SELinux被禁用,或者你能够自己解决SELinux相关的问题。 让我们先来看看Bacula的组件概述。

Bacula组件概述

虽然Bacula由几个软件组件组成,它遵循服务器 - 客户端备份模型;为了简化讨论,我们将集中更多的 备份服务器 ,并比个人Bacula的组件 备份客户端上。但是,重要的是要对各种Bacula组件有粗略的了解,所以我们现在将讨论它们。 一个Bacula的 服务器 ,我们也称之为“备份服务器”,以下组件:
  • Bacula Director (DIR):软件控制的备份和恢复由该文件和存储守护程序执行的操作
  • Storage Daemon (SD):执行读取和用于备份的存储设备写入软件
  • Catalog:即维护备份文件的数据库服务。数据库存储在SQL数据库(如MySQL或PostgreSQL)中
  • Bacula Console:一个命令行界面,允许备份管理员进行交互和控制
Note: The Bacula server components don't need to run on the same server, but they all work together to provide the backup server functionality.
一个Bacula的 客户端 ,也就是将要备份的服务器,运行 文件守护程序(FD)的组成部分。文件守护程序是为Bacula服务器(特别是主任)提供对将要备份的数据的访问的软件。我们还将这些服务器称为“备份客户端”或“客户端”。 正如我们在介绍中指出的,我们将配置备份服务器以创建其自己的文件系统的备份。这意味着备份服务器也将是一个备份客户端,并将运行文件守护程序组件。 让我们开始安装。

安装Bacula和MySQL

Bacula使用SQL数据库(如MySQL或PostreSQL)来管理其备份目录。在本教程中,我们将使用MariaDB,一个替代MySQL的插件。 使用yum安装Bacula和MariaDB服务器软件包:
sudo yum install -y bacula-director bacula-storage bacula-console bacula-client mariadb-server
安装完成后,我们需要使用以下命令启动MySQL:
sudo systemctl start mariadb
现在MySQL(MariaDB)已安装并运行,让我们使用这些脚本创建Bacula数据库用户和表:
/usr/libexec/bacula/grant_mysql_privileges
/usr/libexec/bacula/create_mysql_database -u root
/usr/libexec/bacula/make_mysql_tables -u bacula
接下来,我们要运行一个简单的安全脚本,它将删除一些危险的默认值,并锁定对我们的数据库系统的访问一点。通过运行以下命令来启动交互式脚本:
sudo mysql_secure_installation
提示将要求您输入当前的root密码。因为你刚刚安装MySQL,你很可能不会有一个,所以留空,按enter键。然后提示将询问您是否要设置root密码。来吧,打 Enter ,并设置密码。 对于剩余的问题,您应该简单地打 Enter通过每个提示键接受默认值。这将删除一些示例用户和数据库,禁用远程根登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。 现在我们需要为Bacula数据库用户设置密码。 输入MySQL控制台,作为根MySQL用户:
mysql -u root -p
输入您刚刚设置的MySQL根密码,在提示符下。 现在设置Bacula数据库用户的密码。使用此命令,但替换突出了“Bacula的 数据库密码”具有较强的密码:
UPDATE mysql.user SET Password=PASSWORD('bacula_db_password') WHERE User='bacula';
FLUSH PRIVILEGES;
一旦你完成这里,退出MySQL提示:
exit
启用MariaDB在启动时启动。使用以下命令:
sudo systemctl enable mariadb

设置Bacula使用MySQL库

默认情况下,Bacula设置为使用PostgreSQL库。因为我们使用MySQL,我们需要将其设置为使用MySQL库。 运行此命令:
sudo alternatives --config libbaccats.so
您将看到以下提示。输入1(MySQL):
OutputThere are 3 programs which provide 'libbaccats.so'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib64/libbaccats-mysql.so
   2           /usr/lib64/libbaccats-sqlite3.so
*+ 3           /usr/lib64/libbaccats-postgresql.so

Enter to keep the current selection[+], or type selection number: 1
Bacula服务器(和客户端)组件现在已安装。让我们创建备份和恢复目录。

创建备份和还原目录

Bacula的需要一个 备份目录,用于存储备份存档和 恢复目录,其中恢复的文件将被放置。如果系统有多个分区,请确保在具有足够空间的目录上创建目录。 让我们为这两个目的创建新目录:
sudo mkdir -p /bacula/backup /bacula/restore
我们需要更改文件权限,以便只有bacula进程(和超级用户)可以访问这些位置:
sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula
现在我们准备配置Bacula Director。

配置Bacula Director

Bacula有几个组件,必须独立配置才能正常工作。配置文件都可以在找到 /etc/bacula目录中。 我们将从Bacula Director开始。 在您喜欢的文本编辑器中打开Bacula Director配置文件。我们将使用vi:
sudo vi /etc/bacula/bacula-dir.conf

配置Director资源

查找主任资源,并将其配置为监听 127.0.0.1 (本地主机),加入 DirAddress这里显示的一行:
bacula-dir.conf - 添加Director DirAddress
Director {                            # define myself
  Name = bacula-dir
  DIRport = 9101                # where we listen for UA connections
  QueryFile = "/etc/bacula/query.sql"
  WorkingDirectory = "/var/spool/bacula"
  PidDirectory = "/var/run"
  Maximum Concurrent Jobs = 1
  Password = "@@DIR_PASSWORD@@"         # Console password
  Messages = Daemon
  DirAddress = 127.0.0.1
}
现在移动到文件的其余部分。

配置本地作业

Bacula作业用于执行备份和恢复操作。作业资源定义特定作业将执行的操作的详细信息,包括客户端的名称,要备份或恢复的FileSet等。 在这里,我们将配置将用于执行本地文件系统备份的作业。 在Director配置,找到“BackupClient1”(搜索“BackupClient1”)的名称 作业的资源。 的值更改 Name为“BackupLocalFiles”,所以它看起来是这样的:
bacula-dir.conf - 重命名BackupClient1作业
Job {
  Name = "BackupLocalFiles"
  JobDefs = "DefaultJob"
}
接下来,找到名为“RestoreFiles”(搜索“RestoreFiles”)的 工作资源。 在这个岗位上,你想改变两件事:更新的值, Name为“RestoreLocalFiles”,而价值 Where ,以“/ Bacula的/恢复”。它应该看起来像这样:
bacula-dir.conf - 重命名RestoreFiles作业
Job {
  Name = "RestoreLocalFiles"
  Type = Restore
  Client=BackupServer-fd
  FileSet="Full Set"
  Storage = File
  Pool = Default
  Messages = Standard
  Where = /bacula/restore
}
此配置RestoreLocalFiles作业以还原文件 /bacula/restore的目录中,我们前面创建。

配置文件集

一个文件集Bacula的定义了一组文件或目录 包含排除备份选择的文件,并通过作业使用。 找到名为“完整集”的FileSet资源(它在注释说“#要备份的文件列表”)。在这里,我们将实现三个转变:(1)添加到使用gzip压缩我们的备份选项,(2)改变包括文件 /usr/sbin/ ,和(3)添加 File = /bacula下排除部分。删除评论后,应该看起来像这样:
bacula-dir.conf - 更新“完全设置”FileSet
FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }    
File = /
}
  Exclude {
    File = /var/lib/bacula
    File = /proc
    File = /tmp
    File = /.journal
    File = /.fsck
    File = /bacula
  }
}
让我们来看看我们对“完全集”FileSet所做的更改。首先,我们在创建备份存档时启用gzip压缩。第二,我们在包括 / ,即根分区,来进行备份。 第三,我们均不含 /bacula ,因为我们不想冗余备份Bacula的我们的备份和恢复的文件。
Note: If you have partitions that are mounted within /, and you want to include those in the FileSet, you will need to include additional File records for each of them.
请记住,如果您始终在备份作业中使用广泛的文件集(例如“完整集”),则备份将需要比备份选择更具体的磁盘空间。例如,只包含自定义配置文件和数据库的FileSet可能足以满足您的需要,如果您有一个明确的恢复计划,详细安装所需的软件包,并将恢复的文件放置在正确的位置,而只使用一小部分备份存档的磁盘空间。

配置存储后台进程连接

在Bacula Director配置文件中,存储资源定义了Director应连接到的存储后台程序。我们将在稍后配置实际的存储守护程序。 查找存储资源,并更换地址,值 localhost ,用你的备份服务器的FQDN私人(或私有IP地址)。它应该看起来像这样(替换突出显示的词):
bacula-dir.conf - 更新存储地址
Storage {
  Name = File
# Do not use "localhost" here
  Address = backup_server_private_FQDN                # N.B. Use a fully qualified name here
  SDPort = 9103
  Password = "@@SD_PASSWORD@@"
  Device = FileStorage
  Media Type = File
}
这是必要的,因为我们将配置存储守护程序在专用网络接口上侦听,以便远程客户端可以连接到它。

配置目录连接

在Bacula Director配置文件中,Catalog资源定义了Director应该使用和连接到的数据库。 找到名为“MyCatalog”(这是一个评论,说:“通用目录服务”下),以及更新的价值目录资源 dbpassword所以它匹配您的 Bacula的 MySQL用户设置密码:
bacula-dir.conf - 更新目录dbpassword
# Generic catalog service
Catalog {
  Name = MyCatalog
# Uncomment the following line if you want the dbi driver
# dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport =
  dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula_db_password"
}
这将允许Bacula Director连接到MySQL数据库。

配置池

池资源定义了Bacula用于写入备份的存储集。我们将使用文件作为存储卷,我们将仅更新标签,以便我们的本地备份被正确标记。 找到名为“文件”的池资源(它在注释说“#文件池定义”),并添加一行指定标签格式。完成后应该看起来像这样:
bacula-dir.conf - 更新池:
# File Pool definition
Pool {
  Name = File
  Pool Type = Backup
  Label Format = Local-
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
  Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
  Maximum Volumes = 100               # Limit number of Volumes in Pool
}
保存并退出。你终于完成了Bacula Director的配置。

检查引导程序配置:

让我们验证您的Director配置文件中没有语法错误:
sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
如果没有错误信息,您 bacula-dir.conf文件没有语法错误。 接下来,我们将配置存储后台程序。

配置存储后台进程

我们的Bacula服务器几乎已经设置好,但是我们仍然需要配置存储后台程序,因此Bacula知道在哪里存储备份。 在您喜欢的文本编辑器中打开SD配置。我们将使用vi:
sudo vi /etc/bacula/bacula-sd.conf

配置存储资源

查找存储资源。这定义了SD进程将侦听连接的位置。添加 SDAddress参数,并将其分配给备份服务器的FQDN私人(或私有IP地址):
bacula-sd.conf - 更新SDAddress
Storage {                             # definition of myself
  Name = BackupServer-sd
  SDPort = 9103                  # Director's port
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = backup_server_private_FQDN
}

配置存储设备

接下来,找到名为“FileStorage”(搜索“FileStorage”),设备资源,更新的价值 Archive Device ,以配合您的备份目录:
bacula-sd.conf - 更新存档设备
Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /bacula/backup 
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
}
保存并退出。

验证存储后台进程配置

让我们验证您的存储后台程序配置文件中没有语法错误:
sudo bacula-sd -tc /etc/bacula/bacula-sd.conf
如果没有错误信息,您 bacula-sd.conf文件中有没有语法错误。 我们已经完成了Bacula配置。我们准备重新启动Bacula服务器组件。

设置Bacula组件密码

每个Bacula组件(例如Director,SD和FD)都有用于组件间身份验证的密码 - 您在查看配置文件时可能会注意到占位符。可以手动设置这些密码,但是,因为你实际上不需要知道这些密码,我们将运行命令来生成随机密码并将它们插入到各种Bacula配置文件中。 这些命令生成并设置Director密码。该 bconsole连接到处长,所以它需要的密码太:
DIR_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bacula-dir.conf
sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bconsole.conf
这些命令生成并设置Storage Daemon密码。 Director连接到SD,所以它还需要密码:
SD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-sd.conf
sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-dir.conf
这些命令生成并设置本地文件守护程序(Bacula客户端软件)密码。 Director连接到此FD,因此它还需要密码:
FD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-dir.conf
sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-fd.conf
现在我们准备好开始我们的Bacula组件!

启动Bacula组件

使用以下命令启动Bacula Director,Storage Daemon和本地文件守护程序:
sudo systemctl start bacula-dir
sudo systemctl start bacula-sd
sudo systemctl start bacula-fd
如果它们都正确启动,请运行这些命令,使它们在启动时自动启动:
sudo systemctl enable bacula-dir
sudo systemctl enable bacula-sd
sudo systemctl enable bacula-fd
让我们通过运行备份作业来测试Bacula的工作原理。

测试备份作业

我们将使用Bacula控制台运行我们的第一个备份作业。如果它运行没有任何问题,我们将知道Bacula配置正确。 现在使用此命令输入控制台:
sudo bconsole
这将带您到Bacula的控制台提示,由记 *提示。

创建标签

通过发出一个开始 label的命令:
label
将提示您输入卷名称。输入任何您想要的名称:
Enter new Volume name:MyVolume
然后选择备份应使用的池。我们将使用我们之前配置的“文件”池,输入“2”:
Select the Pool (1-3):2

手动运行备份作业

Bacula现在知道我们要如何为我们的备份写入数据。我们现在可以运行备份来测试它是否正常工作:
run
系统将提示您选择要运行的作业。我们要运行“BackupLocalFiles”作业,因此在提示符处输入“1”:
Select Job resource (1-3):1
在“运行备份作业”确认提示下,查看详细信息,然后输入“yes”运行作业:
yes

检查消息和状态

运行一个工作后,Bacula会告诉你你有消息。消息是通过运行作业生成的。 键入以下内容检查消息:
messages
消息应该说“找不到先前的完全备份作业记录”,并且备份作业已启动。如果有任何错误,有什么问题,他们应该给你一个提示,为什么工作没有运行。 另一种查看作业状态的方法是检查Director的状态。为此,请在bconsole提示符处输入此命令:
status director
如果一切正常,您应该看到您的作业正在运行。这样的东西:
Output — status director (Running Jobs)Running Jobs:
Console connected at 09-Apr-15 12:16
 JobId Level   Name                       Status
======================================================================
     3 Full    BackupLocalFiles.2015-04-09_12.31.41_06 is running
====
作业完成后,它将移动到状态报告的“终止的作业”部分,如下所示:
Output — status director (Terminated Jobs)Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
     3  Full    161,124    877.5 M  OK       09-Apr-15 12:34 BackupLocalFiles
“OK”状态表示备份作业没有任何问题。恭喜!您有Bacula服务器的“完整集”的备份。 下一步是测试还原作业。

测试恢复作业

现在已经创建了一个备份,重要的是检查它是否可以正确恢复。该 restore命令将允许我们恢复已备份的文件。

运行还原所有作业

为了演示,我们将恢复上次备份中的所有文件:
restore all
将出现一个选择菜单,其中有许多不同的选项,用于标识要还原哪个备份集。由于我们只有一个备份,让我们选择最近的备份 - 选择选项5:
Select item (1-13):5
因为只有一个客户端,Bacula服务器,它会自动被选中。 下一个提示将询问您要使用哪个FileSet。选择“Full Set”,应为2:
Select FileSet resource (1-2):2
这将使您进入具有所备份的整个目录结构的虚拟文件树。这个类shell接口允许简单的命令来标记和取消标记要恢复的文件。 因为我们指定我们想要“还原所有”,每个备份的文件已经标记为还原。标记的文件是由领先的表示 *字符。 如果要调整选择,可以使用“ls”和“cd”命令导航和列出文件,使用“mark”标记要恢复的文件,并取消标记具有“unmark”的文件。通过在控制台中输入“help”可以获得完整的命令列表。 完成恢复选择后,请键入以下内容继续:
done
确认要运行还原作业:
OK to run? (yes/mod/no):yes

检查消息和状态

与备份作业一样,应在运行还原作业后检查消息和Director状态。 键入以下内容检查消息:
messages
应该有一条消息表明还原作业已启动或已通过“恢复确定”状态终止。如果有任何错误,有什么问题,他们应该给你一个提示,为什么工作没有运行。 同样,检查Director状态是一个很好的方式来查看恢复作业的状态:
status director
当你与恢复完成后,键入 exit离开Bacula的控制台:
exit

验证恢复

要验证还原作业实际还原选定的文件,你可以看看在 /bacula/restore目录(这是在Director配置了“RestoreLocalFiles”的工作定义):
sudo ls -la /bacula/restore
您应该在根文件系统中看到已恢复的文件副本,但不包括在“RestoreLocalFiles”作业的“排除”部分中列出的文件和目录。如果您尝试从数据丢失中恢复,您可以将恢复的文件复制到其相应的位置。

删除已恢复的文件

您可能需要删除已恢复的文件以释放磁盘空间。为此,请使用以下命令:
sudo -u root bash -c "rm -rf /bacula/restore/*"
请注意,您必须先运行此 rm命令,作为根,因为很多恢复的文件属于root。

结论

您现在有一个基本的Bacula设置,可以备份和恢复本地文件系统。下一步是将其他服务器添加为备份客户端,以便在数据丢失的情况下恢复它们。 接下来的教程将告诉你如何将其他远程服务器添加为客户Bacula的: 如何备份一个CentOS 7服务器与Bacula 。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏