closed
logo logo
关于我们

技术分享

技术分享 Bacula 实战:从部署到使用

Bacula 实战:从部署到使用

2021-06-29

Bacula 是一款开源的跨平台网络备份工具,它提供了基于企业级的客户端/服务器的备份恢复解决方案。通过它,系统管理人员可以对数据进行备份、恢复,以及完整性验证等操作。同时,它还提供了许多高级存储管理功能,使系统管理人员能够很容易发现并恢复丢失的或已经损坏的文件。正因为如此,Bacula 也被誉为最好的开源企业级备份工具。

本Chat将会带来:

  • Bacula 总体结构概览。

  • 在 Centos 部署安装 Bacula。

  • Bacula-Gui(Baculum)安装部署。

  • 实战:Bacula 跨平台(Windows,Linux)备份配置。

  • Bacula 配置和使用中要注意的坑。

Bacula

是一款开源的跨平台网络备份工具,它提供了基于企业级的客户端/服务器的备份恢复解决方案。通过它,系统管理人员可以对数据进行备份、恢复,以及完整性验证等操作。同时,它还提供了许多高级存储管理功能,使系统管理人员能够很容易发现并恢复丢失的或已经损坏的文件。

正因为如此,Bacula 也被誉为最好的开源企业级备份工具。


Overview

Bacula 由 5 个主要服务构成:Director,Console,File,Storage,and Monitor services。

废话少说,先上一张官网上的结构图

Bacula 实战:从部署到使用

Director

Dir 是 Bacula 的核心,也是整个系统的中心节点,负责管理所有的备份、恢复、验证、归档作业。系统管理员可以使用 Bacula Director 制定备份计划。Director 作为一个服务运行在后台。

Console

管理控制台,用户可以通过这个控制台连接到 Director Daemon 进行管理备份与恢复操作,有三种管理方式:console、 QT 编写的界面和 wxWidgets 的图形界面。

第一种:最易用的 console,大多数系统管理员会发现它完全能满足需求。

第二种:GNOME 图形界面,一个半吊子产品,还没开发完,但是包含了大部分口控制台提供的功能。

第三种:wxWidget GUI,提供交互式的文件恢复。它也包含了 console 的大部分功能,并且实现了tab键自动补全命令,智能提示。(在没有 gui 的 linux,后两种都是扯淡,不过可以在 windows 安装连接到远程 director)

Database-server

(catalog,它不在官方介绍的五大部件里,但是我觉得有必要介绍一下)

恢复目录包括用于维护所有备份文件索引的程序和数据库,它可以使管理员或用户快速定位和恢复受损的文件。恢复目录的引入使得 Bacula 和简单备份程序(tar,bru)区别开来,因为恢复目录维护了一个所有使用卷的记录,所有的计划任务,目标文件,提供高效的还原管理。

catalog支持三种数据库,MysqlSql、PostgreSQL 和 SQLite,前两种必须在编译时指定,推荐使用前两种因为 SQLite 功能太少,性能太差。

File(client)

安装在需要备份数据的机器上的客户端软件。它运行在特定的操作系统上,并且为 director 备份提供可靠的数据和文件信息,client 也负责在目标机器上执行恢复操作。fd 作为一个后台服务运行在 linux 机器上,同样也有 windows 版本。

Storage

sd 是一组程序,负责实际读写存储介质。

Monitor services

(我倒不觉得它是重要部件之一)linux gnome/kde 桌面程序,进程监控端,负责监控 Director Daemon、Storage Daemon 和 File Daemon 的守护进程。

(可有可无,没装图形界面的 linux 安装不了,推荐使用 web 端的监控)

下面我们从一个备份作业理解一下上面这张图,一个作业可以是手动从 console 发起的,也可以是在 dir 的配置文件中配置的 job 自动发起的。

当 dir 收到一个 job 后,会将具体的指令发送给 File server,接下来的文件传输则不再经过 dir,而是由 File server 直接传向 storage。

Installation & Deployment

为什么要用这么大篇幅说安装和部署呢?相信我们都有过这种痛苦的经历,在上手一个新东西的时候,花大量的时间在环境搭建上。

Bacula 可以安装部署在 Linux、Windows 或者是 Mac,这里我们以 Centos6 为例。

准备工作

  1. 源码

  2. Bacula 实战:从部署到使用

需要下载两个包,Source Files 是即将用到的,GUI 稍后会用到。

  1. C 和 C++ 编译器 yum install -y gcc gcc-c++

  2. MySQL,我们需要准备一个 MySQ L数据库,如果没有需要另行安装一下,本次的重点不在这里就不过多介绍。

  3. 因为要使用 MySQL 作为 database server,所以还需要安装 mysql-devel。

下面进入正题——安装

  1. 源码解压后进入到源码所在目录编译、安装。官方文档中的安装引导页,我们略过直接上干货,其实只需要一个命令参数就可以

    ./configure --with-mysqlmake && make install

    安装结束后可以到 /etc/bacula 目录下验证一下,可以看到在这里建立了好多文件。

  2. 建立数据库和数据表,我们假设已经存在一个 MySQL 数据库在 mysql.dev 上,在 /etc/bacula/ 下找到这两个脚本:

    create_bacula_database    make_bacula_tables

    ./create_bacula_database -ubacula -pbacula -h mysql.dev -P 3306./make_bacula_tables -ubacula -pbacula -h mysql.dev -P 3306

    执行成功后会出现这样的提示:Creation of bacula database succeeded.Creation of Bacula MySQL tables succeeded.

  3. 到这其实我们已经可以算安装完成了,为了验证一下安装是否正确,再简单配置一下。Bacula 安装完会在 /etc/bacula/ 目录下默认建立全套的配置文件示例,就算什么也不配置,用它也是可以启动的。在 bacula-dir.conf 中找到 Catalog 配置,具体配置什么你懂的,就像这样

    dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula";DB Address = "mysql.dev";DB Port = "3306"

  4. 启动它,走起:

    看一下状态

    也可以用 bconsole 看一下

    Bacula 实战:从部署到使用

  5. Bacula 实战:从部署到使用

  6. Bacula 实战:从部署到使用

Baculum

Baculum 是基于 Baculum-API 的 Bacula Web。  GUI,有了它,一些简单的和一次性的作业就可以在 web 页面上直接操作,所见即所得,省去了使用 bconsole 命令行的麻烦(这些命令可能也记不住...)。 看文档,我觉得这是使用任何工具的前提。

baculum 安装文档

准备工作

  1. Apache。

  2. PHP5.3.4 以上,我选择安装的是 5.6,这里有一个 rpm 源地址,省去了源码安装的繁琐。

  3. PHP 模块要求,说的很清楚,照着安装就好,再不济缺什么装什么呗。

    这是我安装的模块

    yum install -y php56w php56w-bcmath php56w-common php56w-devel php56w-gd php56w-mbstring php56w-mysqlnd php56w-xml mysql mysql-devel

  4. Bacula 实战:从部署到使用

  5. 源码,在上一部分里提到过,对就是它,如果你感兴趣可以查查 Baculum 的含义,哈哈哈!!!

  6. 部署 Baculum 的机器上要有 bconsole(懂了吧,它也是在操作 bconsole)

Baculum-API

  1. 解压 Bacula-gui,文件夹中的 INSTALL 文件是一个帮助文档,make DESTDIR=/var/www/html/baculum,执行这条命令把 bacula-api 和 bacula-web 释放到 /var/www/html/baculum/ 下。

  2. 接下来配置下 Baculum-api 和 Baculum-web 两个站点到 /var/www/html/baculum/etc/httpd/conf.d/ 文件夹下,有两个配置文件,一个是 bacula-api 站点的配置,一个是 bacula-web 站点的配置,包含到 apache 的配置文件里。

注意配置文件中的路径,修改成你自己 bacula - gui 的真实路径

  • /var/www/html/baculum/etc/baculum/Config-api-apache/ 下,找到 baculum.users,复制到 /var/www/html/baculum/usr/share/baculum/htdocs/protected/API/Config/ 下;

  • /var/www/html/baculum/etc/baculum/Config-web-apache/ 下,找到 baculum.users,复制到 /var/www/html/baculum/usr/share/baculum/htdocs/protected/Web/Config/下;

注意权限问题,这两个文件需要权限

  1. 重启 apache,首先配置 baculum - API,打开 9096 端口页面,提示输入用户名和密码,这两个用户文件的用户名密码都是 admin,接下来按照提示一步步输入即可,每一步都有 test 哪里有问题会提示,按照提示解决。需要注意的地方是配置 bconsole,让 apache 运行的用户可以执行 bconsole 命令,在 /etc/sudoers.d/ 添加一个 baculum 文件,内容如下:

 Defaults:apache !requirettyapache  ALL=NOPASSWD:  /sbin/bconsoleapache  ALL=NOPASSWD:  /sbin/bdirjsonapache  ALL=NOPASSWD:  /sbin/bsdjsonapache  ALL=NOPASSWD:  /sbin/bfdjsonapache  ALL=NOPASSWD:  /sbin/bbconsjson

注意用户和路径要根据实际安装情况修改

Baculum - web

没什么说的,访问 9095 端口,记住上一步 Bacula-api 的用户名密码,按照提示一路下一步即可。如果看到了下面的界面,恭喜大功告成!

Bacula 实战:从部署到使用

配置

Bacula 的配置往往让新手不知所措,改了好多却依然不好用,所以我们有必要梳理一下各个部分我们都需要配置些什么。有很多小伙伴不喜欢看文档,或者看到英文文档就直接略过,我觉得这不是个好的习惯,作为一个程序猿,英语还是多少要学一点。有了这张图是不是清晰很多。

Bacula 实战:从部署到使用

fd 配置

Director {  Name = bacula.dev-dir #注意这里,要写上dir的name  Password = "+lDzc0vGYfhQt9P0Q3J+FsXP+GaYlvyjAoFz/o38H83U"    #不要太在意这么长的密码,自动生成的。。。  #这个密码要记住,配置dir里client的时候要和这个一致,否则dir连接不上client}FileDaemon {                            Name = bacula.dev-fd       FDport = 9102                    WorkingDirectory = /opt/bacula/working  Pid Directory = /var/run  Maximum Concurrent Jobs = 20  Plugin Directory = /usr/lib64}Messages {  Name = Standard  director = bacula.dev-dir = all, !skipped, !restored}

sd 配置

#这是一个最简单的配置,直接将归档写到本地文件夹中。Bacula支持的Device还有很多种(如磁带),也支持从sd到sd的复制,具体用到的时候可以到文档中查看。Storage {                               Name = bacula.dev-sd  SDPort = 9103                   WorkingDirectory = "/opt/bacula/working"  Pid Directory = "/var/run"  Plugin Directory = "/usr/lib64"  Maximum Concurrent Jobs = 20}Director {  Name = bacula.dev-dir #注意这里,要写上dir的name  Password = "yrEaxD7O3LNeCStufxt7tWWvKuWXNs2KPpKMdh+ohHFq"  #这个密码要记住,配置dir里storage的时候要和这个一致}Device {  Name = "hdd_storage"  Media Type = File  Archive Device = /var/bacula_backup  #sd写入文件的位置  LabelMedia = yes;                    Random Access = Yes;  AutomaticMount = yes;                RemovableMedia = no;  AlwaysOpen = no;  Maximum Concurrent Jobs = 5}Messages {  Name = Standard  director = bacula.dev-dir = all}

dir 配置

Director {   Name = bacula.dev-dir  DIRport = 9101  QueryFile = "/etc/bacula/query.sql"  WorkingDirectory = "/opt/bacula/working"  PidDirectory = "/var/run"  Maximum Concurrent Jobs = 20  Password = "ZIXaEJfNiYhM3Y59arWnMePalh9kIkOHPFKCRywWfXMf"           #这个password要和bconsole配置文件里的一致  Messages = Daemon}Schedule {  Name = "WeeklyCycle"  Run = Full 1st sun at 23:05  Run = Differential 2nd-5th sun at 23:05  Run = Incremental mon-sat at 23:05}Schedule {  Name = "WeeklyCycleAfterBackup"  Run = Full sun-sat at 23:10}Storage {    Name = "hdd_storage"    Address = bacula.dev #这里要填局域网内可以访问的ip,不可以填类似127.0.0.1或localhost    SDPort = 9103    Password = "yrEaxD7O3LNeCStufxt7tWWvKuWXNs2KPpKMdh+ohHFq" #与SD配置中一致    Device = "hdd_storage"  #SD配置中Device的name    Media Type = File     Maximum Concurrent Jobs = 10}Catalog {  Name = MyCatalog  dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula"; DB Address = "mysql.dev"; DB Port = "3306"}Messages {  Name = Daemon  mailcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"  mail = root@localhost = all, !skipped  console = all, !skipped, !saved  append = "/opt/bacula/log/bacula.log" = all, !skipped}Messages {    Name = webhook    mailcommand = "python /var/shell/webhook.py #这个mailcommand不只是可以发邮件,其实它可以执行任何脚本,这就给了我们很大自由度,参数详见文档    mail = root@localhost = all, !skipped    console = all, !skipped, !saved    append = "/opt/bacula/log/bacula.log" = all, !skipped    catalog = all}Pool {  Name = File  Pool Type = Backup  Recycle = yes                       # Bacula can automatically recycle Volumes  AutoPrune = yes                     # Prune expired volumes  Volume Retention = 90 days         # one year  Maximum Volume Bytes = 10G          # Limit Volume size to something reasonable  Maximum Volumes = 100               # Limit number of Volumes in Pool  Label Format = "Vol-"               # Auto label}Client {  Name = bacula.dev-fd #FD配置中的name  Address = bacula.dev  FDPort = 9102  Catalog = MyCatalog  Password = "wbVV1z7mv+/KEuMUOIuHnWVgzPHzJWuW4Nvo/07uxgN7"          #这个密码要和FD配置中的一致  File Retention = 60 days            # 60 days  Job Retention = 6 months            # six months  AutoPrune = yes                     # Prune expired Jobs/Files}FileSet {    Name = "apachewebsite"    Include {        Options {            signature = MD5            compression = LZO            noatime = yes            sparse = yes        }        File = /var/www/html/    }    Exclude {        File = /var/www/html/log/        ......    }}Job {    Name = "apachewebsite"     Type = Backup    Level = Incremental    Client = bacula.dev-fd #    FileSet = "apachewebsite"  #fileset的name    Schedule = "WeeklyCycle"    Storage = hdd_storage  #dir中Storage的name而不是SD配置里的name    Messages = webhook #这样就可以实现任务消息自定义    Pool = File    SpoolAttributes = yes    Priority = 10} #@|"sh -c 'for f in /etc/bacula/conf.d/*.conf ; do echo @${f} ; done'"  #注意这段,所有配置都写在一个conf中显然太长不易阅读,可以用这种方式include配置文件

FAQ

  • 配置中各个部分的 name、ip 地址和密码一定要对应好,分布式应用往往是网状结构的,这里一定自己理清头绪。所以在命名的时候尽量有一定的命名规则,例如使用主机名作为前缀。

  • 如果 DIR 和 SD 在同一台机器上,配置 Dir 的 Storage 段时一定注意,不可以使用 localhost 或者 127.0.0.1 这样的本机地址,因为这个地址会被发送到 FD 用于 FD 直接与 SD 通信。

  • DIR 中 Message 段的配置不只是可以用于发邮件,也可以调用任何脚本使用 webhook 推送通知。

  • Bacula 的开发人员比较偷懒,配置文件没有类似 include 的语法,但是观法给出了替代方案。比如在 DIR 的配置文件中加入一句代码 @|"sh -c 'for f in /etc/bacula/conf.d/*.conf ; do echo @${f} ; done'",就可以实现 include。

  • 如果有 windows 需要备份,所有在 windows 中的路径中不可以用反斜杠(\),要使用一个正斜杠(/),windows 端的 FD 安装也很简单,官方已经贴心的做成了安装包。

其实 Bacula 的文档已经很全面了,如果你足够有耐心把它看完,大部分我们需要的内容都可以在官方的文档中找到。


云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 其他

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载

jia7jia_7
请添加好友
为您提供支持

请拨打电话
为您提供支持

400-9955-698