介绍
本教程将向您展示如何通过网络连接设置Bacula来创建远程Ubuntu 14.04主机的备份。这涉及在远程主机上安装和配置Bacula Client软件,并对现有Bacula Server的配置进行一些补充(包含在先决条件中)。
要完成本教程,您需要具备一台已经设置好可以使用sudo
命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
先决条件
本教程假设您有一台运行Bacula Server组件的服务器。
我们还假设您使用专用网络接口进行备份服务器 - 客户端通信。我们将参考服务器的专用FQDN(指向专用IP地址的FQDN)。如果您使用的是IP地址,只需在适当的位置替换连接信息即可。
对于本教程的其余部分,我们将Bacula Server称为“BaculaServer”,“Bacula Server”或“Backup Server”。我们将正在备份的远程主机称为“ClientHost”,“Client Host”或“Client”。
让我们开始对Bacula Server配置进行一些快速更改。
组织Bacula Director配置(服务器)
在Bacula Server上,执行此部分一次。
设置Bacula Server时,您可能已经注意到配置文件过长。我们将尝试组织Bacula Director配置,因此它使用单独的文件添加新配置,例如作业,文件集和池。
让我们创建一个目录来帮助组织Bacula配置文件:
代码语言:javascript复制sudo mkdir /etc/bacula/conf.d
然后打开Bacula Director配置文件:
代码语言:javascript复制sudo vi /etc/bacula/bacula-dir.conf
在文件末尾添加,这一行:
代码语言:javascript复制@|"find /etc/bacula/conf.d -name '*.conf' -type f -exec echo @{} ;"
保存并退出。此行使Director在/etc/bacula/conf.d
目录中查找要追加的其他配置文件。也就是说,在那里添加的任何.conf
文件都将作为配置的一部分加载。
添加RemoteFile池
我们想在Bacula Director配置中添加一个额外的池,我们将用它来配置我们的远程备份作业。
打开conf.d/pools.conf
文件:
sudo vi /etc/bacula/conf.d/pools.conf
添加以下池资源:
代码语言:javascript复制Pool {
Name = RemoteFile
Pool Type = Backup
Label Format = Remote-
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
}
保存并退出。这定义了一个“RemoteFile”池,我们将在稍后创建的备份作业中使用它。随意更改任何参数以满足您自己的需求。
我们还不需要重新启动Bacula Director,但是让我们验证它的配置中没有任何错误:
代码语言:javascript复制sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
如果没有错误,您就可以继续进行Bacula Client设置了。
安装和配置Bacula客户端
在要添加到Bacula设置的任何客户端主机上执行此部分。
首先,更新apt-get:
代码语言:javascript复制sudo apt-get update
然后安装bacula-client
包:
sudo apt-get install bacula-client
这将安装Bacula File Daemon(FD),它通常被称为“Bacula客户端”。
配置客户端
在配置客户端文件守护程序之前,您需要查找以下信息,这些信息将在本教程的其余部分中使用:
- 客户端主机名:我们的示例将使用“ClientHost”
- 客户端专用FQDN:我们将其称为“client_private_FQDN”,它可能类似
clienthost.private.example.com
这样 - Bacula Server主机名:我们的示例将使用“BackupServer”
您的实际设置将与示例不同,因此请务必在适当的位置进行替换。
打开文件守护程序配置:
代码语言:javascript复制sudo vi /etc/bacula/bacula-fd.conf
我们需要更改一些项目并保存一些我们的服务器配置所需的信息。
首先找到以客户端主机名命名的Director资源(例如“ClientHost-dir”)。由于我们要控制此客户端的Bacula Director位于Bacula Server上,请将“Name”参数更改为备份服务器的主机名,后跟“-dir”。按照我们的示例,使用“BackupServer”作为Bacula Server的主机名,更新后应该看起来像这样:
代码语言:javascript复制Director {
Name = BackupServer-dir
Password = "IrIK4BHRA2o5JUvw2C_YNmBX_70oqfaUi"
}
您还需要复制Password
,这是用于连接到文件守护程序的自动生成的密码,并保存以供将来参考。这将在备份服务器的Director配置中使用,我们将在即将到来的步骤中设置该配置,以连接到客户端的文件守护程序。
接下来,我们需要调整FileDaemon资源中的一个参数。我们将更改FDAddress
参数以匹配客户端计算机的专用FQDN。应该已使用客户端文件守护程序名称正确填充Name
参数。资源应该看起来像这样(替换实际的FQDN或IP地址):
FileDaemon { # this is me
Name = ClientHost-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
FDAddress = client_private_FQDN
}
我们还需要配置此守护程序以将其日志消息传递到Backup Server。找到Messages资源并更改director
参数以使备份服务器的主机名与“-dir”后缀匹配。它应该看起来像这样:
Messages {
Name = Standard
director = BackupServer-dir = all, !skipped, !restored
}
保存文件并退出。您的文件守护程序(Bacula客户端)现在配置为侦听专用网络上的连接。
使用以下命令检查配置文件是否具有正确的语法:
代码语言:javascript复制sudo bacula-fd -tc /etc/bacula/bacula-fd.conf
如果该命令未返回任何输出,则配置文件具有有效语法。重新启动文件守护程序以使用新设置:
代码语言:javascript复制sudo service bacula-fd restart
让我们设置一个Bacula Server可以将文件恢复到的目录。使用以下命令创建文件结构并锁定安全性的权限和所有权:
代码语言:javascript复制sudo mkdir -p /bacula/restore
sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula
现在正确配置了客户端计算机。接下来,我们将配置Backup Server以便能够连接到Bacula Client。
添加文件集(服务器)
Bacula FileSet定义了一组文件或目录,用于包含或排除备份选择中的文件,并由Bacula Server上的备份作业使用。
如果您按照设置Bacula Server组件的先决条件教程,您已经有一个名为“Full Set”的FileSet。如果要运行包含备份客户端上几乎所有文件的备份作业,则可以在作业中使用该FileSet。但是,您可能会发现,您通常不希望或不需要对服务器上的所有内容进行备份,并且数据的子集就足够了。
在文件集中包含哪些文件更具选择性将减少备份服务器运行备份作业所需的磁盘空间和时间。它还可以使恢复更简单,因为您不需要筛选“完整集”来查找要还原的文件。
我们将向您展示如何创建新的FileSet资源,以便您可以更有选择性地备份。
在Bacula Server上,在我们之前创建的Bacula Director配置目录中打开一个名为filesets.conf
的文件:
sudo vi /etc/bacula/conf.d/filesets.conf
为要在备份作业中使用的每个特定文件集创建FileSet资源。在这个例子中,我们将创建一个仅包含home和etc目录的FileSet:
代码语言:javascript复制FileSet {
Name = "Home and Etc"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /home
File = /etc
}
Exclude {
File = /home/bacula/not_important
}
}
这个文件中有很多内容,但请记住以下几个细节:
- FileSet名称必须是唯一的
- 包括要备份的任何文件或分区
- 排除您不想备份的所有文件,但这些文件是在包含文件中存在的结果
如果愿意,您可以创建多个FileSet。完成后保存并退出。
现在我们准备创建将使用我们的新FileSet的备份作业。
将客户端和备份作业添加到Bacula Server
现在我们准备将我们的客户端添加到Bacula Server。为此,我们必须使用新的客户端和作业资源配置Bacula Director。
打开conf.d/clients.conf
文件:
sudo vi /etc/bacula/conf.d/clients.conf
添加客户端资源
客户端资源为Director配置连接到客户端主机所需的信息。这包括客户端文件守护程序的名称,地址和密码。
将此客户端资源定义粘贴到文件中。请务必在客户端主机名,私人FQDN和密码(来自客户端bacula-fd.conf
)中替换:
Client {
Name = ClientHost-fd
Address = client_private_FQDN
FDPort = 9102
Catalog = MyCatalog
Password = "IrIK4BHRA2o5JUvw2C_YNmBX_70oqfaUi" # password for Remote FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
您只需为每个客户端执行一次此操作。
创建备份作业:
备份作业必须具有唯一名称,它定义了应备份哪个客户端和哪些数据的详细信息。
接下来,将此备份作业粘贴到文件中,将客户端主机名替换为突出显示的文本:
代码语言:javascript复制Job {
Name = "BackupClientHost"
JobDefs = "DefaultJob"
Client = ClientHost-fd
Pool = RemoteFile
FileSet="Home and Etc"
}
这将创建一个名为“BackupClientHost”的备份作业,该作业将备份客户端主机的主目录和etc目录,如“Home and Etc”文件集中所定义。它将使用“DefaultJob”JobDefs和“RemoteFile”池资源中指定的设置,这些资源都在主文件bacula-dir.conf
中定义。默认情况下,指定的作业JobDefs = "DefaultJob"
将每周运行一次。
完成后保存并退出。
验证Director配置
让我们验证您的Director配置文件中没有语法错误:
代码语言:javascript复制sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
如果返回到shell提示符,则Bacula Director的配置文件中没有语法错误。
重启Bacula Director
要使您所做的配置更改生效,请重新启动Bacula Director:
代码语言:javascript复制sudo service bacula-director restart
现在,您的客户端或远程主机配置为由Bacula Server备份。
测试客户端连接
我们应该验证Bacula Director可以连接到Bacula Client。
在Bacula Server上,进入Bacula控制台:
代码语言:javascript复制sudo bconsole
代码语言:javascript复制status client
代码语言:javascript复制Select Client resource: ClientHost-fd
The defined Client resources are:
1: BackupServer-fd
2: ClientHost-fd
Select Client (File daemon) resource (1-2): 2
客户端的文件守护程序状态应立即返回。如果没有,并且存在连接错误,则Bacula Server或客户端的文件守护程序的配置有问题。
测试备份作业
让我们运行备份作业以确保它正常工作。
在Bacula Server上,仍然在控制台中,使用此命令:
代码语言:javascript复制run
系统将提示您选择要运行的作业。选择我们之前创建的那个,例如“4. BackupClientHost”:
代码语言:javascript复制Select Job resource: BackupClientHost
The defined Job resources are:
1: BackupLocalFiles
2: BackupCatalog
3: RestoreLocalFiles
4: BackupClientHost
Select Job resource (1-4): 4
在确认提示下,输入“是”:
代码语言:javascript复制Confirmation prompt:
OK to run? (yes/mod/no): yes
检查消息和状态
在完成一份工作后,Bacula会告诉你,你有消息。消息是通过运行作业生成的输出。
键入以下内容检查邮件:
代码语言:javascript复制messages
消息应显示“找不到先前的完整备份作业记录”,并且备份作业已启动。如果有任何错误,那就是错误的,他们应该给你一个关于工作没有运行的提示。
查看作业状态的另一种方法是检查Director的状态。要执行此操作,请在bconsole提示符处输入以下命令:
代码语言:javascript复制status director
如果一切正常,您应该看到您的作业正在运行或以“正常”状态终止。
执行还原
第一次设置新的Bacula Client时,应该测试还原是否正常。
如果要执行还原,请使用Bacula控制台上的命令restore
:
restore all
将出现一个选择菜单,其中包含许多不同的选项,用于标识要从中还原的备份集。由于我们只有一个备份,让我们“选择最新的备份” - 选择选项5:
代码语言:javascript复制Select item (1-13):
5
然后,您必须指定要还原的客户端。我们想要恢复刚刚设置的远程主机,例如“ClientHost-fd”:
代码语言:javascript复制Select the Client: ClientHost-fd
Defined Clients:
1: BackupServer-fd
2: ClientHost-fd
Select the Client (1-2): 2
这将使您进入一个虚拟文件树,其中包含您备份的整个目录结构。这种类似shell的界面允许简单的命令来标记和取消标记要恢复的文件。
因为我们指定要“全部恢复”,所以每个备份文件都已标记为要恢复。标记的文件由前导*
字符表示。
如果您想微调您的选择,您可以使用“ls”和“cd”命令导航和列出文件,使用“mark”标记要恢复的文件,并使用“unmark”取消标记文件。通过在控制台中键入“help”,可以获得完整的命令列表。
完成恢复选择后,请键入以下内容:
代码语言:javascript复制done
确认您要运行还原作业:
代码语言:javascript复制OK to run? (yes/mod/no):
yes
检查消息和状态
与备份作业一样,应在运行还原作业后检查消息和Director状态。
键入以下内容检查邮件:
代码语言:javascript复制messages
应该有一条消息表明还原作业已启动或已终止并具有“还原正常”状态。如果有任何错误,那就是错误的,他们应该给你一个关于工作没有运行的提示。
同样,检查Director状态是查看还原作业状态的好方法:
代码语言:javascript复制status director
完成还原后,键入exit
以退出Bacula控制台:
exit
如果一切正常,则还原的文件将位于/bacula/restore
目录中的客户端主机上。如果您只是测试还原过程,则应删除该目录的内容。
结论
您现在有一个Bacula Server正在从远程Bacula客户端备份文件。请务必查看并修改您的配置,直到您确定要按照满足您需求的计划备份正确的FileSet。
接下来您应该重复本教程的相关部分,以了解您要备份的任何其他Ubuntu 14.04服务器。
想要了解更多关于备份服务器的相关教程,请前往腾讯云 社区学习更多知识。
参考文献:《How To Back Up an Ubuntu 14.04 Server with Bacula》