Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

7,467

Bacula:网络备份工具

  • 2014-09-13
  • 暂无评论
Bacula 是一款开源的跨平台的网络备份工具,提供基于企业级客户端/服务器的备份恢复解决方案。
功能特点
  1. 支持多种备份方式
    完全备份 :完整的备份业务数据
    增量备份 :以上次备份为基准,对每天新增的数据进行备份
    差异备份 :以完全备份为基准,对每天与完全备份不同的数据进行备份
    完全备份 > 差异备份 > 增量备份
    完全备份+差异备份
    完全备份+增量备份
  2. 支持多种恢复方式
    恢复某个目录文件到指定位置,恢复时自动恢复数据的原始结构
    恢复所以数据到某个指定位置,恢复时自动恢复数据的原始结构
    保存恢复文件或目录的权限属性访问时间等属性
    恢复某个时间点的备份到指定位置,恢复时自动恢复数据的原始结构
  3. 支持多种文件系统下的备份和恢复
    Ext3 ext2 reiserfs xfs jfs smbfs iso9660 ntfs 等
  4. 支持各种备份介质
    磁盘 磁盘阵列 光盘等
  5. 支持多种操作系统
    Linux unix mac windows
  6. 内部功能强大
    定时备份,终端控制,正则表达式,MD5 SHA1 两种数字签名校验 压缩备份 报表自动绘制
工作原理
    一个完整的bacula备份系统由5部分构成
Director Daemon:负责监听所以的备份,恢复,验证,存档事务,以及定制备份和恢复文件计划等,并将整个系统运行状况记录在一个数据库中。Mysql ,postgresql sqlite。配置文件 bacula-dir.conf
Storage Daemon (SD): 在备份数据时,用来指定备份和恢复数据的存储介质,备份数据时负载将数据备份到存储介质上,在恢复数据时,负载接受数据并执行恢复操作。配置文件 bacula-sd.conf
File Daemon (FD):  安装在需要备份数据的机器上的守护进程,备份数据时,负载把文件传出,恢复数据时,负载接受数据并执行恢复操作。配置文件 bacula-fd.conf
Console:管理控制台,连接Director Daemon进行管理备份与恢复操作。配置文件 bconsole.conf
Monitor:进程监控端,负责 Director Daemon Storage Daemon File Daemon 的守护进程。 备份恢复流程
配置
1.bconsole.conf:
Director {
    Name = f10-64-build-dir  #控制端名称,在下面的bacula-dir.conf和bacula-sd.conf
#文件中会陆续的被引用
    DIRport = 9101    #控制端服务端口
    address = 192.168.12.188  #控制端服务器IP地址
    Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"
    #控制端密码文件
}

 

2.bacula-dir.conf:
文件配置相对复杂,分为10个配置段
 Director,定义全局设置
 Catalog,定义后台数据库
 Jobdefs,定义默认执行任务
 Job,自定义一个备份或者恢复任务
 Fileset,定义备份哪些数据,不备份哪些数据
 Schedule,定义备份时间策略
 Pool,定义供Job使用的池属性
 Client,定义要备份的主机地址
 Storage,定义数据的存储方式
 Messages,定义发送日志报告和记录日志的位置
Director {                            #定义bacula的全局配置
        Name = f10-64-build-dir
    DIRport = 9101                 #定义Director的监听端口
    QueryFile = "/opt/bacula/etc/query.sql"
    WorkingDirectory = "/opt/bacula/var/bacula/working"
    PidDirectory = "/var/run"
    Maximum Concurrent Jobs = 1    #定义一次能处理的最大并发数
    #验证密码,这个密码必须与bconsole.conf文件中对应的Director逻辑段密码相同
    Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"
    #定义日志输出方式,“Daemon”在下面的Messages逻辑段中进行了定义
    Messages = Daemon
}

Job {        #自定义一个备份任务
    Name = "Client1"  #备份任务名称
    Client = dbfd   #指定要备份的客户端主机,“dbfd”在后面Client逻辑段中进行定义
    Level = Incremental      #定义备份的级别,Incremental为增量备份。Level的取值#可为Full(完全备份)、Incremental(增量备份)和Differential(差异备份),如果第一#次没做完全备份,则先进行完全备份后再执行Incremental
    Type = Backup                  #定义Job的类型,“backup”为备份任务,可选的类型还有restore和verify等
    FileSet = dbfs     #指定要备份的客户端数据,“dbfs”在后面FileSet逻辑段中进行定义
    Schedule = dbscd    #指定这个备份任务的执行时间策略,“dbscd”在后面的Schedule逻辑段中进行了定义
    Storage = dbsd     #指定备份数据的存储路径与介质,“dbsd” 在后面的Storage逻辑段中进行定义
    Messages = Standard
    Pool = dbpool     #指定备份使用的pool属性,“dbpool”在后面的
    # Pool逻辑段中进行定义。
    Write Bootstrap = "/opt/bacula/var/bacula/working/Client2.bsr" #指定备份的引导信息路径
}
Job {         #定义一个名为Client的差异备份的任务
    Name = "Client"
    Type = Backup
    FileSet = dbfs
    Schedule = dbscd
    Storage = dbsd
    Messages = Standard
    Pool = dbpool
    Client = dbfd
    Level = Differential      #指定备份级别为差异备份
    Write Bootstrap = "/opt/bacula/var/bacula/working/Client1.bsr"
}
Job {        #定义一个名为BackupCatalog的完全备份任务
    Name = "BackupCatalog"
    Type = Backup
    Level = Full        #指定备份级别为完全备份
    Client = dbfd
    FileSet="dbfs"
    Schedule = "dbscd"
    Pool = dbpool
    Storage = dbsd
    Messages = Standard
    RunBeforeJob = "/opt/bacula/etc/make_catalog_backup bacula bacula"
    RunAfterJob  = "/opt/bacula/etc/delete_catalog_backup"
    Write Bootstrap = "/opt/var/bacula/working/BackupCatalog.bsr"
}
Job {           #定义一个还原任务
    Name = "RestoreFiles"
    Type = Restore       #定义Job的类型为“Restore ”,即恢复数据
    Client=dbfd
    FileSet=dbfs
    Storage = dbsd
    Pool = dbpool
    Messages = Standard
    Where = /tmp/bacula-restores  #指定默认恢复数据到这个路径
}

FileSet {  #定义一个名为dbfs的备份资源,也就是指定需要备份哪些数据,需要排除哪些数据等,可以指定多个FileSet
    Name = dbfs
    Include {
        Options {
            signature = MD5;
            Compression=GZIP;
        }   #表示使用MD5签名并压缩
        File = /cws3            #指定客户端FD需要备份的文件目录
    }
    Exclude {    #通过Exclude排除不需要备份的文件或者目录,可根据具体情况修改
        File = /opt/bacula/var/bacula/working
        File = /tmp
        File = /proc
        File = /tmp
        File = /.journal
        File = /.fsck
    }
}

Schedule {        #定义一个名为dbscd的备份任务调度策略
    Name = dbscd
    Run = Full 1st sun at 23:05  #第一周的周日晚23:05分进行完全备份
    Run = Differential 2nd-5th sun at 23:05 #第2~5周的周日晚23:05进行差异备份
    Run = Incremental mon-sat at 23:05  #所有周一至周六晚23:05分进行增量备份
}

FileSet {
    Name = "Catalog"
    Include {
        Options {
            signature = MD5
        }
        File = /opt/bacula/var/bacula/working/bacula.sql
    }
}

Client {        #Client用来定义备份哪个客户端FD的数据
    Name = dbfd  #Clinet的名称,可以在前面的Job中调用
    Address = 192.168.12.189    #要备份的客户端FD主机的IP地址
    FDPort = 9102      #与客户端FD通信的端口
    Catalog = MyCatalog     #使用哪个数据库存储信息,“MyCatalog”在后面的MyCatalog逻辑段中进行定义
    Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"  #Director端与客户端FD的验证密码,这个值必须与客户端FD配置文件bacula-fd.conf中密码相同
    File Retention = 30 days    #指定保存在数据库中的记录多久循环一次,这里是30天,只影响数据库中的记录不影响备份的文件
    Job Retention = 6 months  #指定Job的保持周期,应该大于File Retention指定的值
    AutoPrune = yes          #当达到指定的保持周期时,是否自动删除数据库中的记录,yes表示自动清除过期的Job
}
Client {
    Name = dbfd1
    Address = 192.168.12.188
    FDPort = 9102
    Catalog = MyCatalog
    Password = "Wr8lj3q51PgZ21U2FSaTXICYhLmQkT1XhHbm8a6/j8Bz"
    File Retention = 30 days
    Job Retention = 6 months
    AutoPrune = yes
}

Storage {      # Storage用来定义将客户端的数据备份到哪个存储设备上
    Name = dbsd
    Address = 192.168.12.188  #指定存储端SD的IP地址
    SDPort = 9103    #指定存储端SD通信的端口
    Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"  #Director端与存储端SD的验证密码,这个值必须与存储端SD配置文件bacula-sd.conf中Director逻辑段密码相同
    Device = dbdev #指定数据备份的存储介质,必须与存储端(这里是192.168.12.188)的bacula-sd.conf配置文件中的“Device” 逻辑段的“Name”项名称相同
    Media Type = File #指定存储介质的类别,必须与存储端SD(这里是192.168.12.188)的bacula-sd.conf配置文件中的“Device” 逻辑段的“Media Type”项名称相同
}

Catalog {         # Catalog逻辑段用来定义关于日志和数据库设定
    Name = MyCatalog
    dbname = "bacula"; dbuser = "bacula"; dbpassword = ""   #指定库名、用户名和密码
}

Messages { # Messages逻辑段用来设定Director端如何保存日志,以及日志的保存格式,可以将日志信息发送到管理员邮箱,前提是必须开启sendmail服务
    Name = Standard
    mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
    operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
    mail = dba.gao@gmail.com = all, !skipped
    operator = exitgogo@126.com = mount
    console = all, !skipped, !saved
    append = "/opt/bacula/log/bacula.log" = all, !skipped   #定义bacula的运行日志
    append ="/opt/bacula/log/bacula.err.log" = error,warning, fatal #定义bacula的错误日志
    catalog = all
}

Messages { #定义了一个名为Daemon的Messages逻辑段,“Daemon”已经在前面进行了引用
    Name = Daemon
    mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
    mail = exitgogo@126.com = all, !skipped
    console = all, !skipped, !saved
    append = "/opt/bacula/log/bacula_demo.log" = all, !skipped
}

Pool {  #定义供Job任务使用的池属性信息,例如,设定备份文件过期时间、是否覆盖过期的备份数据、是否自动清除过期备份等
    Name = dbpool
    Pool Type = Backup
    Recycle = yes                   #重复使用
    AutoPrune = yes                #表示自动清除过期备份文件
    Volume Retention = 7 days        #指定备份文件保留的时间
    Label Format ="db-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-id${JobId}" #设定备份文件的命名格式,这个设定格式会产生的命名文件为:db-2010-04-18-id139
    Maximum Volumes = 7  #设置最多保存多少个备份文件
    Recycle Current Volume = yes #表示可以使用最近过期的备份文件来存储新备份
    Maximum Volume Jobs = 1  #表示每次执行备份任务创建一个备份文件
}

Console {      #限定Console利用tray-monitor获得Director的状态信息
    Name = f10-64-build-mon
    Password = "RSQy3sRjak3ktZ8Hr07gc728VkZHBr0QCjOC5x3pXEap"
    CommandACL = status, .status
}

3.bacula-sd.conf:

Storage {                 #定义存储,本例中是f10-64-build-sd
    Name = f10-64-build-sd #定义存储名称
    SDPort = 9103           #监听端口
    WorkingDirectory = "/opt/bacula/var/bacula/working"
    Pid Directory = "/var/run"
    Maximum Concurrent Jobs = 20
}
Director {        #定义一个控制StorageDaemon的Director
    Name = f10-64-build-dir     #这里的“Name”值必须和Director端配置文件bacula-dir.conf中Director逻辑段名称相同
    Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"   #这里的“Password”值必须和Director端配置文件bacula-dir.conf中Storage逻辑段密码相同
}
Director {      #定义一个监控端的Director
    Name = f10-64-build-mon    #这里的“Name”值必须和Director端配置文件bacula-dir.conf中Console逻辑段名称相同
    Password = "RSQy3sRjak3ktZ8Hr07gc728VkZHBr0QCjOC5x3pXEap"   #这里的“Password”值必须和Director端配置文件bacula-dir.conf中Console逻辑段密码相同
    Monitor = yes
}
Device {       #定义Device
    Name = dbdev    #定义Device的名称,这个名称在Director端配置文件bacula-dir.conf中的Storage逻辑段Device项中被引用
    Media Type = File   #指定存储介质的类型,File表示使用文件系统存储
    Archive Device = /webdata  #Archive Device用来指定备份存储的介质,可以是cd、dvd、tap等,这里是将备份的文件保存的/webdata目录下
    LabelMedia = yes;            #通过Label命令来建立卷文件
    Random Access = yes;   #设置是否采用随机访问存储介质,这里选择yes
    AutomaticMount = yes;  #表示当存储设备打开时,是否自动使用它,这选择yes
    RemovableMedia = no;  #是否支持可移动的设备,如tap或cd,这里选择no
    AlwaysOpen = no;   #是否确保tap设备总是可用,这里没有使用tap设备,因此设置为no
}
Messages {        #为存储端SD定义一个日志或消息处理机制
    Name = Standard
    director = f10-64-build-dir = all
}

4.bacula-fd.conf:

Director {      #定义一个允许连接FD的控制端
    Name = f10-64-build-dir  #这里的“Name”值必须和Director端配置文件bacula-dir.conf中Director逻辑段名称相同
    Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"  #这里的“Password”值必须和Director端配置文件bacula-dir.conf中Client逻辑段密码相同
}
Director {      #定义一个允许连接FD的监控端
    Name = f10-64-build-mon
    Password = "RSQy3sRjak3ktZ8Hr07gc728VkZHBr0QCjOC5x3pXEap"
    Monitor = yes
}
FileDaemon {                #定义一个FD端
    Name = localhost.localdomain-fd
    FDport = 9102                  #监控端口
    WorkingDirectory = /opt/bacula/var/bacula/working
    Pid Directory = /var/run
    Maximum Concurrent Jobs = 20   #定义一次能处理的并发作业数
}
Messages {      #定义一个用于FD端的Messages
    Name = Standard
    director = localhost.localdomain-dir = all, !skipped, !restored
}

 

运行:
服务端:
# 默认安装在/etc/bacula目录下
./configure --with-mysql
# 执行mysql脚本生成所需数据
./grant_mysql_privileges
./create_mysql_database
./make_mysql_tables
添加bacula-dir.conf配置文件
添加bacula-sd.conf配置文件
添加bconsole.conf配置文件
./bacula start
#添加存储介质
./bconsole
*label
Enter new Volume name: xxxx
Select the Pool : 1

客户端:

# 默认安装在/etc/bacula目录下
./configure --enable-client-only
make && make install
添加bacula-fd.conf配置文件
./bacula start

 

备份:
在服务端运行:
./bconsole
*run
#选择job
select job resource? xxx
OK to run ? yes
#查看备份状态
*status
#查看不同东西的状态
select daemon type for status?xxx

还原:

./bconsole
*restore
Select item: 5
#选择client
select the client :xxx
    #标记还原内容
    mak xxxx
    done
OK to run ? mod
# 选择不同的还原方案
select parameter to modify : xxx
OK to run ? yes

 

 

 

 



back up ↑

无觅相关文章插件,快速提升流量