如何使用Bacula备份CentOS 7服务器

介绍

本教程将向您展示如何通过网络连接设置Bacula来创建远程CentOS 7主机的备份。这涉及在远程主机上安装和配置Bacula Client软件,并对现有Bacula Server的配置进行一些补充(在先决条件中包含)。

先决条件

本教程假定您有一台运行Bacula Server组件的服务器,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

我们还假设您使用专用网络接口进行备份服务器 - 客户端通信。我们将参考服务器的专用FQDN(指向专用IP地址的FQDN)。如果您使用的是IP地址,只需在适当的位置替换连接信息即可。

对于本教程的其余部分,我们将Bacula Server称为“BaculaServer”,“Bacula Server”或“Backup Server”。我们将正在备份的远程主机称为“ClientHost”,“Client Host”或“Client”。

让我们从对Bacula服务器配置进行一些快速更改开始。

组织Bacula Director配置(服务器)

Bacula Server上,执行此部分一次。

设置Bacula Server时,您可能已经注意到配置文件过长。我们将尝试组织Bacula Director配置,因此它使用单独的文件添加新配置,例如作业,文件集和池。

让我们创建一个目录来帮助组织Bacula配置文件:

sudo mkdir /etc/bacula/conf.d

然后打开Bacula Director配置文件:

sudo vi /etc/bacula/bacula-dir.conf

在文件末尾添加这一行:

@|"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

添加以下池资源:

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,但是让我们验证它的配置中没有任何错误:

sudo bacula-dir -tc /etc/bacula/bacula-dir.conf

如果没有错误,您就可以继续进行Bacula Client设置了。

安装和配置Bacula客户端

在要添加到Bacula设置的任何客户端主机上执行此部分。

然后安装bacula-client包:

sudo yum install bacula-client

这将安装Bacula File Daemon(FD),它通常被称为“Bacula客户端”。

配置客户端

在配置客户端文件守护程序之前,您需要查找以下信息,这些信息将在本教程的其余部分中使用:

  • 客户端主机名::我们的示例将使用“ClientHost”
  • 客户端专用FQDN:我们将其称为“client_private_FQDN”,它可能看起来像clienthost.private.example.com
  • Bacula Server主机名:我们的示例将使用“BackupServer”

您的实际设置将与示例不同,因此请务必在适当的位置进行替换。

我们需要设置一个密码,允许Bacula Director在File Daemon配置中进行连接。让我们现在生成一个随机密码(或者你可以跳过这一步并编写你自己的密码):

date +%s | sha256sum | base64 | head -c 33 ; echo

您将需要复制输出,因为您将在下一步中使用它。

打开文件守护程序配置:

sudo vi /etc/bacula/bacula-fd.conf

我们需要更改一些项目并保存一些我们的服务器配置所需的信息。

首先找到名为“ClientHost-dir”的Director资源。由于我们要控制此客户端的Bacula Director位于Bacula Server上,请将“Name”参数更改为备份服务器的主机名,后跟“-dir”。另外,将现有密码替换为您在上一步中生成的密码。更新后它应该看起来像这样:

Director {
  Name = BackupServer-dir
  Password = "Y2Q5ODUyMWM0YTFhYjA3NTcwYmU5OTA4Y"
}

务必保持密码方便。它将用于备份服务器的Director配置,我们将在即将到来的步骤中设置它,以连接到客户端的文件守护程序。

接下来,我们需要调整FileDaemon资源中的一个参数。我们将更改FDAddress参数以匹配客户端计算机的专用FQDN。参数Name应该已经正确地使用客户机文件守护进程名称进行了填充。资源应该看起来像这样(替换实际的FQDN或IP地址):

FileDaemon {                          # this is me
  Name = ClientHost-fd
  FDAddress = client_private_ip
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /var/spool/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
}

我们还需要配置此守护程序以将其日志消息传递到Backup Server。找到Messages资源并更改director参数以使备份服务器的主机名与“-dir”后缀匹配。它应该看起来像这样:

Messages {
  Name = Standard
  director =  BackupServer-dir = all, !skipped, !restored
}

保存文件并退出。您的文件守护程序(Bacula客户端)现在配置为侦听专用网络上的连接。

使用以下命令检查配置文件是否具有正确的语法:

sudo bacula-fd -tc /etc/bacula/bacula-fd.conf

如果该命令未返回任何输出,则配置文件具有有效语法。重新启动文件守护程序以使用新设置:

sudo systemctl restart bacula-fd

然后运行以下命令以在引导时自动启动Bacula File Daemon:

sudo systemctl enable bacula-fd

让我们设置一个可以由Bacula服务器恢复文件的目录。使用以下命令创建文件结构并锁定安全性的权限和所有权:

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上filesets.conf在我们之前创建的Bacula Director配置目录中打开一个名为的文件:

sudo vi /etc/bacula/conf.d/filesets.conf

为备份作业中要使用的每一组文件创建一个文件集资源。在这个例子中,我们将创建一个仅包含home和etc目录的FileSet:

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 = "Y2Q5ODUyMWM0YTFhYjA3NTcwYmU5OTA4Y"          # password for Remote FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

您只需为每个客户端执行一次此操作。

创建备份作业:

备份作业必须具有唯一名称,它定义了应备份哪个客户端和哪些数据的详细信息。

接下来,将此备份作业粘贴到文件中,请注意替换客户端主机名:

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配置文件中没有语法错误:

sudo bacula-dir /etc/bacula/bacula-dir.conf

如果返回到shell提示符,则Bacula Director的配置文件中没有语法错误。

重启Bacula Director

要使您所做的配置更改生效,请重新启动Bacula Director:

sudo systemctl restart bacula-dir

现在,您的客户端或远程主机配置为由Bacula Server备份。

测试客户端连接

我们应该验证Bacula Director可以连接到Bacula Client。

在Bacula Server上,进入Bacula控制台:

sudo bconsole
status client
Select Client resource: ClientHost-fdThe 
The defined Client resources are:
     1: BackupServer-fd
     2: ClientHost-fd
Select Client (File daemon) resource (1-2): 2

客户端的文件守护程序状态应立即返回。如果没有,并且存在连接错误,则Bacula Server或客户端的文件守护程序的配置有问题。

测试备份作业

让我们运行备份作业以确保它正常工作。

Bacula Server上,在控制台中,使用此命令:

run

系统将提示您选择要运行的作业。选择我们之前创建的那个,例如“4. BackupClientHost”:

Select Job resource: BackupClientHost
The defined Job resources are:
     1: BackupLocalFiles
     2: BackupCatalog
     3: RestoreLocalFiles
     4: BackupClientHost
Select Job resource (1-4): 4

在确认提示下,输入“是”:

Confirmation prompt:
OK to run? (yes/mod/no): yes

检查消息和状态

在完成一份工作后,Bacula会告诉你,你有消息。这些消息是通过运行作业生成的输出结果。

键入以下内容检查邮件:

messages

消息应显示“找不到先前的完整备份作业记录”,并且备份作业已启动。如果有任何错误提示,那就表明有一些错误发生,他们应该给你一个关于工作为什么没有运行的提示。

查看作业状态的另一种方法是检查Director的状态。要执行此操作,请在bconsole提示符处输入以下命令:

status director

如果一切正常,您应该看到您的作业正在运行或以“正常”状态终止。

执行还原

第一次设置新的Bacula Client时,应该测试还原是否正常。

如果要执行还原,请使用Bacula控制台上restore的命令:

restore all

将出现一个选择菜单,其中包含许多不同的选项,用于标识要从中还原的备份集。由于我们只有一个备份,让我们“选择最新的备份” 也就是选择选项5:

Select item (1-13):
5

然后,您必须指定要还原的客户端。我们想要恢复刚刚设置的远程主机,例如“ClientHost-fd”:

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”,可以获得完整的命令列表。

完成恢复选择后,请键入以下内容:

done

确认您要运行还原作业:

OK to run? (yes/mod/no):
yes

检查消息和状态

与备份作业一样,应在运行还原作业后检查消息和Director状态。

键入以下内容检查邮件:

messages

应该有一条消息表明还原作业已启动或已终止并具有“还原正常”状态。如果有任何错误提示,那就表明有一些错误发生,他们应该给你一个关于工作为什么没有运行的提示。

同样,检查Director状态是查看恢复作业状态的好方法:

status director

完成还原后,键入exit以退出Bacula控制台:

exit

如果一切正常,则还原的文件将位于/bacula/restore目录中的客户端主机上。如果您只是测试还原过程,则应删除该目录的内容。

结论

您现在有一个Bacula Server正在从远程Bacula客户端备份文件。请务必查看并修改您的配置,直到您确定要按照满足您需求的计划备份正确的FileSet。

更多CentOS教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Back Up a CentOS 7 Server with Bacula》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术专栏

centos 部署spring boot应用

1573
来自专栏皮振伟的专栏

[qemu][acpi]acpi overflow的分析

前言: qemu启动之后,打出了log: qemu-system-x86_64: Warning: ACPI tables are larger than 64...

4848
来自专栏纯洁的微笑

springboot(十六):使用Jenkins部署Spring Boot

jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤; 第一步,jen...

6527
来自专栏玄魂工作室

Kali Linux Web渗透测试手册(第二版) - 1.2 - Firefox浏览器下安装一些常用的插件

1.2、为渗透测试配置web浏览器(即在Firefox浏览器下安装一些常用的插件)

2964
来自专栏上善若水

013android初级篇之Android Studio 引用源码模块,jar及so文件

013android初级篇之Android Studio 引用源码模块,jar及so文件

1852
来自专栏应用案例

SSM框架搭建

ssm框架的学习小结,主要是初期环境的搭建配置以及信息的交互处理过程,非技术人员请绕道~ SpringMVC其实就是Spring框架的一个模块,是一个基于MVC...

45110
来自专栏杂烩

javaee项目性能检测之JavaMelody

    它并不是一个模拟请求类似JMeter的压力测试工具,而是一个衡量并且计算在应用上的操作信息的工具,也就是说,它只负责对行为进行监控,而不负责触发操作。J...

3172
来自专栏帅小子的日常

sso系统使用

1463
来自专栏北京马哥教育

一个备份MySQL数据库的简单Shell脚本

Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。我们也可以逐一敲入命令手动执行。如果我们要使用shell脚本就必须在一开始把这些...

2988
来自专栏pangguoming

centos7上安装redis

关闭防火墙: systemctl stop firewalld.service #停止firewall systemctl disable firewalld....

57710

扫码关注云+社区

领取腾讯云代金券