介绍
Bacula 是一个开源网络备份解决方案,允许您创建备份并执行您的计算机系统的数据恢复。它非常灵活和坚固,这使得它,虽然配置有点麻烦,但适合在许多情况下进行备份。
在本教程中,我们将向您展示如何在CentOS 7服务器上安装和配置Bacula的服务器组件。我们将配置Bacula执行每周的工作,创建本地备份(即自己的主机的备份)。
如果您更喜欢使用Ubuntu 14.04,请遵循以下链接: 如何在Ubuntu 14.04上安装Bacula服务器。
前提条件
您必须在 CentOS 7 服务器上拥有超级用户 (sudo) 访问权限,并且服务器将需要足够的磁盘空间用于您计划在任何时间保留的所有备份。
如果您正在使用 DigitalOcean,您应该在您的 Bacula 服务器上启用 私人网络 ,以及位于同一数据中心区域的所有客户端服务器。
我们将配置 Bacula 以使用我们的服务器的私人 FQDN,例如 bacula.private.example.com
. 如果您没有 DNS 设置,请使用相应的 IP 地址。
最后的假设是 SELinux 已禁用,或者您可以自行解决 SELinux 相关问题。
让我们从Bacula的成分的概述开始。
Bacula 组件概述
虽然Bacula由几个软件组件组成,但它遵循服务器客户端备份模型;为了简化讨论,我们将更多地关注 备份服务器 和 ** 备份客户端** ,而不是单个Bacula组件。
一个Bacula 服务器 ,我们也将称之为备份服务器
,具有以下组件:
- Bacula Director (DIR): 软件,控制的备份和恢复操作,由文件和存储大师
- Storage Daemon (SD): 软件,在用于备份
- 使用的存储设备上进行读取和写作 ** 目录:** 维护备份文件的数据库的服务. 数据库存储在SQL数据库,如MySQL或PostgreSQL
- Bacula Console: 一个命令行界面,允许备份管理员与,并控制,Bacula Director
1Note: 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 client ,即将备份的服务器,运行了 ** File Daemon (FD)** 组件. 该文件 Daemon 是软件,为 Bacula 服务器(具体来说是 Director)提供访问将备份的数据。
正如我们在介绍中所指出的那样,我们将配置备份服务器以创建自己的文件系统的备份,这意味着备份服务器也将是一个备份客户端,并将运行 File Daemon 组件。
让我们从安装开始。
安装 Bacula 和 MySQL
Bacula 使用 SQL 数据库,如 MySQL 或 PostreSQL,以管理其备份目录. 我们将在本教程中使用 MariaDB,MySQL 的 drop-in 替代品。
使用 yum 安装 Bacula 和 MariaDB 服务器包:
1sudo yum install -y bacula-director bacula-storage bacula-console bacula-client mariadb-server
安装完成后,我们需要使用以下命令启动MySQL:
1sudo systemctl start mariadb
现在MySQL(MariaDB)已安装并运行,让我们用这些脚本创建Bacula数据库用户和表:
1/usr/libexec/bacula/grant_mysql_privileges
2/usr/libexec/bacula/create_mysql_database -u root
3/usr/libexec/bacula/make_mysql_tables -u bacula
接下来,我们要运行一个简单的安全脚本,它会删除一些危险的默认文件,并稍微阻止访问我们的数据库系统。
1sudo mysql_secure_installation
提示会问你当前的 root 密码. 因为你刚刚安装了 MySQL,你很可能没有一个,所以通过点击 enter 让它空。 然后提示会问你是否想要设置 root 密码。 继续点击Enter
,然后设置密码。 对于其他问题,你应该通过每个提示按Enter
键来接受默认值。 这将删除一些样本用户和数据库,禁用远程 root 登录,并加载这些新规则,以便 MySQL 立即尊重我们所做的更改。
现在我们需要为 Bacula 数据库用户设置密码。
输入 MySQL 控制台,作为 root MySQL 用户:
1mysql -u root -p
在提示中输入您刚刚设置的MySQL根密码。
现在为 Bacula 数据库用户设置密码. 使用此命令,但用强大的密码取代突出的bacula_db_password
:
1UPDATE mysql.user SET Password=PASSWORD('bacula_db_password') WHERE User='bacula';
2FLUSH PRIVILEGES;
一旦完成,请退出MySQL提示:
1exit
启用 MariaDB 启动,使用以下命令:
1sudo systemctl enable mariadb
将 Bacula 设置为使用 MySQL 库
默认情况下,Bacula 设置为使用 PostgreSQL 库. 因为我们正在使用 MySQL,我们需要将其设置为使用 MySQL 库。
运行此命令:
1sudo alternatives --config libbaccats.so
您将看到以下提示 Enter 1 (MySQL):
1[secondary_label Output]
2There are 3 programs which provide 'libbaccats.so'.
3
4 Selection Command
5-----------------------------------------------
6 1 /usr/lib64/libbaccats-mysql.so
7 2 /usr/lib64/libbaccats-sqlite3.so
8*+ 3 /usr/lib64/libbaccats-postgresql.so
9
10Enter to keep the current selection[+], or type selection number: 1
现在安装了 Bacula 服务器(和客户端)组件,让我们创建备份和恢复目录。
创建备份和恢复目录
Bacula需要一个 备份 目录 - 用于存储备份档案 - 和 ** 恢复** 目录 - 将恢复的文件放置在那里. 如果您的系统有多个分区,请确保在一个有足够的空间中创建目录。
让我们为这两个目的创建新的目录:
1sudo mkdir -p /bacula/backup /bacula/restore
我们需要更改文件权限,以便只有 bacula 进程(和超级用户)才能访问这些位置:
1sudo chown -R bacula:bacula /bacula
2sudo chmod -R 700 /bacula
现在我们已经准备好配置Bacula Director。
配置 Bacula 导演
Bacula 有几个组件,必须独立配置才能正常运作. 配置文件都可以在 /etc/bacula
目录中找到。
我们将从Bacula主任开始。
在您最喜欢的文本编辑器中打开 Bacula Director 配置文件. 我们将使用 vi:
1sudo vi /etc/bacula/bacula-dir.conf
配置资源管理员
查找管理器资源,并将其配置为在「127.0.0.1」(本地主机)上收听,通过添加这里所示的「DirAddress」行:
1[label bacula-dir.conf — Add Director DirAddress]
2Director { # define myself
3 Name = bacula-dir
4 DIRport = 9101 # where we listen for UA connections
5 QueryFile = "/etc/bacula/query.sql"
6 WorkingDirectory = "/var/spool/bacula"
7 PidDirectory = "/var/run"
8 Maximum Concurrent Jobs = 1
9 Password = "@@DIR_PASSWORD@@" # Console password
10 Messages = Daemon
11 DirAddress = 127.0.0.1
12}
现在继续到剩余的文件。
配置本地工作岗位
工作资源定义了特定任务的细节,包括客户端的名称、备份或恢复的 FileSet 等。
在这里,我们将配置用于执行本地文件系统备份的任务。
在管理器配置中,找到名为BackupClient1
的 Job 资源(搜索BackupClient1
)。
1[label bacula-dir.conf — Rename BackupClient1 job]
2Job {
3 Name = "BackupLocalFiles"
4 JobDefs = "DefaultJob"
5}
接下来,找到名为RestoreFiles
的 Job 资源(搜索RestoreFiles
)。 在此任务中,您要更改两件事:更新Name
值为RestoreLocalFiles
,以及Where
值为/bacula/restore
。
1[label bacula-dir.conf — Rename RestoreFiles job]
2Job {
3 Name = "RestoreLocalFiles"
4 Type = Restore
5 Client=BackupServer-fd
6 FileSet="Full Set"
7 Storage = File
8 Pool = Default
9 Messages = Standard
10 Where = /bacula/restore
11}
这将配置 RestoreLocalFiles 任务来将文件恢复到 /bacula/restore
,我们之前创建的目录。
配置文件集
Bacula FileSet 定义了一组文件或目录,以从备份选择中 包括 或 ** 排除** 文件,并由工作使用。
查找名为Full Set
的FileSet资源(在评论中说# 备份的文件列表
)。在这里,我们将做出三个更改:(1)添加使用gzip来压缩我们的备份的选项,(2)将包括文件从/usr/sbin
更改为/
,并 (3)在排除
部分中添加File = /bacula
。
1[label bacula-dir.conf — Update "Full Set" FileSet]
2FileSet {
3 Name = "Full Set"
4 Include {
5 Options {
6 signature = MD5
7 compression = GZIP
8 }
9File = /
10}
11 Exclude {
12 File = /var/lib/bacula
13 File = /proc
14 File = /tmp
15 File = /.journal
16 File = /.fsck
17 File = /bacula
18 }
19}
首先,我们在创建备份档案时启用了 gzip 压缩,其次,我们将包括 /
,即根分区,以备份,第三,我们将排除 `/bacula,因为我们不想重复备份我们的 Bacula 备份和恢复的文件。
1Note: 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.
请记住,如果您在备份工作中总是使用广泛的 FileSets,例如Full Set
,则您的备份将需要更多的磁盘空间,而不是如果您的备份选项更为具体。
配置存储 Daemon 连接
在 Bacula Director 配置文件中,存储资源定义了管理员应该连接的存储 DAEMON,我们会在一瞬间配置实际的存储 DAEMON。
查找存储资源,并用备份服务器的私人 FQDN (或私人 IP 地址) 替换地址值,即本地主机
。
1[label bacula-dir.conf — Update Storage Address]
2Storage {
3 Name = File
4# Do not use "localhost" here
5 Address = backup_server_private_FQDN # N.B. Use a fully qualified name here
6 SDPort = 9103
7 Password = "@@SD_PASSWORD@@"
8 Device = FileStorage
9 Media Type = File
10}
这是必要的,因为我们将配置 Storage Daemon 在私人网络界面上聆听,以便远程客户端可以连接到它。
配置目录连接
在 Bacula Director 配置文件中,目录资源定义了管理员应该使用和连接到的数据库的位置。
查找名为MyCatalog
的目录资源(它在评论中表示通用目录服务
),并更新dbpassword
的值,以便它匹配您为 bacula MySQL 用户设置的密码:
1[label bacula-dir.conf — Update Catalog dbpassword]
2# Generic catalog service
3Catalog {
4 Name = MyCatalog
5# Uncomment the following line if you want the dbi driver
6# dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport =
7 dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula_db_password"
8}
这将允许Bacula Director连接到MySQL数据库。
配置池
一个池资源定义了Bacula用来写备份的存储集合,我们将使用文件作为我们的存储量,我们将简单地更新标签,以便我们的本地备份得到正确的标签。
查找名为File
的 Pool 资源(它在评论中表示# File Pool 定义
),然后添加指定标签格式的行。
1[label bacula-dir.conf — Update Pool:]
2# File Pool definition
3Pool {
4 Name = File
5 Pool Type = Backup
6 Label Format = Local-
7 Recycle = yes # Bacula can automatically recycle Volumes
8 AutoPrune = yes # Prune expired volumes
9 Volume Retention = 365 days # one year
10 Maximum Volume Bytes = 50G # Limit Volume size to something reasonable
11 Maximum Volumes = 100 # Limit number of Volumes in Pool
12}
保存和退出. 您终于完成了 Bacula 管理器的配置。
查看管理员配置:
让我们检查您的 Director 配置文件中没有语法错误:
1sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
如果没有错误消息,则您的 bacula-dir.conf
文件没有语法错误。
接下来,我们将配置 Storage Daemon。
存储配置 DAEMON
我们的 Bacula 服务器几乎已经设置,但我们仍然需要配置 Storage Daemon,所以 Bacula 知道在哪里存储备份。
在您最喜欢的文本编辑器中打开 SD 配置,我们将使用 vi:
1sudo vi /etc/bacula/bacula-sd.conf
配置存储资源
查找存储资源. 此定义了 SD 流程会听到连接的位置. 添加SDAddress
参数,并将其分配到您的备份服务器的私人 FQDN(或私人 IP 地址):
1[label bacula-sd.conf — update SDAddress]
2Storage { # definition of myself
3 Name = BackupServer-sd
4 SDPort = 9103 # Director's port
5 WorkingDirectory = "/var/lib/bacula"
6 Pid Directory = "/var/run/bacula"
7 Maximum Concurrent Jobs = 20
8 SDAddress = backup_server_private_FQDN
9}
配置存储设备
接下来,找到名为FileStorage
的设备资源(搜索FileStorage
),并更新Archive Device
值以匹配您的备份目录:
1[label bacula-sd.conf — update Archive Device]
2Device {
3 Name = FileStorage
4 Media Type = File
5 Archive Device = /bacula/backup
6 LabelMedia = yes; # lets Bacula label unlabeled media
7 Random Access = Yes;
8 AutomaticMount = yes; # when device opened, read it
9 RemovableMedia = no;
10 AlwaysOpen = no;
11}
保存和退出。
检查存储 DAEMON 配置
让我们检查您的 Storage Daemon 配置文件中没有语法错误:
1sudo bacula-sd -tc /etc/bacula/bacula-sd.conf
如果没有错误消息,则您的 sql.conf
文件没有语法错误。
我们已经完成了 Bacula 配置,我们已经准备好重新启动 Bacula 服务器组件。
设置 Bacula 组件密码
每个 Bacula 组件,如 Director、SD 和 FD,都有用于组件间身份验证的密码 - 您可能在浏览配置文件时注意到位置持有人. 您可以手动设置这些密码,但由于您不需要真正知道这些密码,我们将运行命令来生成随机密码并将其插入到各种 Bacula 配置文件中。
这些命令会生成并设置管理员密码. bconsole 连接到管理员,因此它也需要密码:
1DIR_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
2sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bacula-dir.conf
3sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bconsole.conf
这些命令生成并设置 Storage Daemon 密码. 导演连接到 SD,所以它也需要密码:
1SD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
2sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-sd.conf
3sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-dir.conf
这些命令会生成并设置本地的 File Daemon (Bacula 客户端软件) 密码. 导演连接到这个 FD,所以它也需要密码:
1FD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
2sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-dir.conf
3sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-fd.conf
现在我们已经准备好开始我们的 Bacula 组件!
开始 Bacula 组件
使用以下命令启动 Bacula 管理员、存储 Daemon 和本地文件 Daemon:
1sudo systemctl start bacula-dir
2sudo systemctl start bacula-sd
3sudo systemctl start bacula-fd
如果它们都正确启动,请运行以下命令,以便它们自动启动:
1sudo systemctl enable bacula-dir
2sudo systemctl enable bacula-sd
3sudo systemctl enable bacula-fd
让我们通过运行备份任务来测试Bacula是否有效。
备份工作测试
我们将使用 Bacula Console 来执行我们的第一个备份工作. 如果它运行没有任何问题,我们将知道 Bacula 已正确配置。
现在用这个命令进入控制台:
1sudo bconsole
这将带你到Bacula Console提示,标记为*
提示。
创建一个标签
开始用一个标签
命令:
1label
您将被要求输入一个卷名称. 输入您想要的任何名称:
1[secondary_label Enter new Volume name:]
2MyVolume
然后选择备份应该使用的池,我们将使用我们之前配置的文件
池,输入2
:
1[secondary_label Select the Pool (1-3):]
22
手动执行备份工作
Bacula现在知道我们想要如何为我们的备份写数据. 我们现在可以运行我们的备份来测试它是否正常工作:
1run
我们要运行BackupLocalFiles
任务,所以在提示中输入1
:
1[secondary_label Select Job resource (1-3):]
21
在运行备份任务
的确认提示下,查看详细信息,然后输入是
来执行任务:
1yes
查看消息和状态
运行任务后,Bacula会告诉你你有消息,这些消息是通过运行任务生成的输出。
通过键入查看消息:
1messages
消息应该说没有以前的完整备份工作记录被找到
,并且备份工作开始了。
查看工作状态的另一种方法是检查主任的状态. 要做到这一点,请在 bconsole 提示处输入以下命令:
1status director
如果一切正常工作,你应该看到你的工作正在运行。
1[secondary_label Output — status director (Running Jobs)]
2Running Jobs:
3Console connected at 09-Apr-15 12:16
4 JobId Level Name Status
5======================================================================
6 3 Full BackupLocalFiles.2015-04-09_12.31.41_06 is running
7====
当你的工作完成时,它将移动到状态报告的终止工作
部分,如下:
1[secondary_label Output — status director (Terminated Jobs)]
2Terminated Jobs:
3 JobId Level Files Bytes Status Finished Name
4====================================================================
5 3 Full 161,124 877.5 M OK 09-Apr-15 12:34 BackupLocalFiles
OK
状态表明,备份工作没有任何问题。恭喜!您有您的Bacula服务器的完整设置
备份。
下一步是测试恢复工作。
检验恢复工作
现在已经创建了备份,重要的是要检查它是否可以正确恢复,恢复
命令将允许我们恢复已备份的文件。
跑 恢复所有工作
为了证明,我们将恢复我们最后的备份中的所有文件:
1restore all
选择菜单将出现许多不同的选项,用于识别从哪个备份设置恢复. 由于我们只有一个备份,让我们选择最新的备份
- 选择选项 5:
1[secondary_label Select item (1-13):]
25
因为只有一个客户端,Bacula服务器,它将自动选择。
下一个提示将询问您想要使用哪个FileSet。选择完整设置
,应该是2:
1[secondary_label Select FileSet resource (1-2):]
22
这会让您陷入一个虚拟的文件树中,其中包含您备份的整个目录结构,这种壳式界面允许简单的命令来标记和解标文件以恢复。
因为我们指定了我们想要恢复所有
,每个备份的文件已经被标记为恢复,标记的文件被标记为一个领先的*
字符。
如果你想精心调节你的选择,你可以导航和列出用ls
和cd
命令的文件,标记文件以恢复为标记
,并卸载文件以无标记
。
当您完成恢复选择时,继续键入:
1done
确认您想运行恢复任务:
1[secondary_label OK to run? (yes/mod/no):]
2yes
查看消息和状态
与备份工作一样,在运行恢复任务后,您应该检查消息和管理员状态。
通过键入查看消息:
1messages
应该有一个消息,表示恢复工作已经开始或以恢复OK
状态结束. 如果有任何错误,有什么不对劲,他们应该给你一个提示,为什么工作没有运行。
再次,检查管理员状态是查看恢复工作状态的好方法:
1status director
当您完成恢复时,键入退出
,离开 Bacula Console:
1exit
检查恢复
要验证恢复任务是否确实恢复了所选的文件,您可以在/bacula/restore
目录中查看(该目录在RestoreLocalFiles
目录中被定义为RestoreLocalFiles
目录):
1sudo ls -la /bacula/restore
您应该看到在您的根文件系统中恢复的文件副本,不包括在RestoreLocalFiles
任务的排除
部分中列出的文件和目录。
删除已恢复的文件
您可能想要删除恢复的文件以释放磁盘空间。
1sudo -u root bash -c "rm -rf /bacula/restore/*"
请注意,您必须将此rm
命令作为 root 运行,因为许多恢复的文件属于 root。
结论
您现在有一个基本的 Bacula 设置,可以备份和恢复本地文件系统. 下一步是将其他服务器添加为备份客户端,以便在数据丢失的情况下恢复它们。
下面的教程将向您展示如何将您的其他远程服务器添加为Bacula客户端: 如何使用Bacula备份CentOS 7服务器。