Bacula是一款开源的跨平台网络备份工具,提供基于企业级的CS的备份解决方案。可以对数据进行备份、恢复、以及完整性校验。 功能特点: 支持完全备份,增量备份,差异备份。 支持多种恢复方式 支持多种文件系统下的备份恢复(ext3、ext2、reiserfs、xfs、jfs、smbfs、iso9660、ntfs等) 支持各种备份介质 支持多种操作系统 强大的内部功能 一个完整的bacula备份系统,由下面5个部分组成 Director Daemon:负责监听所有的备份、恢复、验证、存档事务,以及定制备份和恢复文件计划等,并将整个系统运行状况记录在一个数据库文件中。其配置文件为bacula-dir.conf。 Storage Daemon(SD):主要负责将数据备份到存储介质上,而在数据恢复时,负责将数据从存储介质中传送出去。其配置文件为bacula-sd.conf。 File Daemon(FD):安装在需要备份数据的机器上的守护进程,在备份数据时,它负责把文件传出,在恢复数据时负责接收数据并执行恢复操作。配置文件为bacula-fd.conf。 Console:管理控制台。可以通过这个控制台连接到Director Daemon进行管理备份与恢复操作。 Monitor:进程监控端。 工作流程: 1、通过console连接到Director端,备份恢复操作开始。 2、Director端从自己的数据库中调出记录信息,对存储端SD与客户端FD的任务进行协调。 3、客户端FD负责验证Director的操作许可,如果验证通过,则允许连接到存储端SD 4、客户端FD根据Director发出的请求去连接SD,将FD端的数据备份到存SD指定的存储介质上,或者将SD端存储介质中的数据传回到客户端FD指定的位置上,完成备份恢复过程。 个人感觉Bacula在国内生产环境中似乎用的很少,也不知道有多少人用过这款备份工具,不过我个人还是觉得该备份工具还是很优秀的,望同样喜欢Bacula 或者 研究Bacula的朋友可以联系我,一起来深入了解这款备份工具! 1. Bacula 主控端安装 1.1. 介绍 本文档将介绍基于Centos 6.3系统平台的操作指南,试图让你使用简单指令快速从源程序安装Bacula。 如果你使用系统是Fedroa、Redhat或Centos 的其他Linux发行版,也可参照此文档。命令名、路径等可能因不同的发行包或操作系统而不同,因而这时你可能需要些努力来搞一下安装文档里的东西。 如果你使用的是其他Linux或者其他系统,或者希望了解更详细的说明,可以在官方维基百科(http://wiki.bacula.org)上找到。
下面为一个配置好的文件,其中#号后面的内容为注视。(其中部分地方Bacula有英文注释,恰好我英文也不咋滴) Director { #定义Bacula的全局配置 Name = chenyi-dir DIRport = 9101 QueryFile = "/usr/local//bacula/bin/query.sql" WorkingDirectory = "/usr/local//bacula/bin/working" PidDirectory = "/usr/local//bacula/bin/working" Maximum Concurrent Jobs = 1 #定义一次能处理的最大并发数
#验证密码,这个密码必须与bconsole.conf文件中对应的Director逻辑段密码相同 Password = "kl1h6gcOxkzFAWFUb1bl7bvtyiwW702QsypPHPgcuTdK"
#定义日志输出方式,“Daemon”在下面的Messages逻辑段中进行了定义 Messages = Daemon } JobDefs { Name = "Client1" Type = Backup Level = Incremental Client = dbfd # 如果本机也需备份就在后面去定义dbfd为本机 FileSet = "dbfs" Schedule = "dbscd" Storage = dbsd Messages = Standard Pool = dbpool Priority = 10 Write Bootstrap = "/usr/local//bacula/bin/working/%c.bsr" }
Job { #自定义一个备份任务 Name = "wanquanbeifen" #备份任务名称 Client = dbfd1 #指定要备份的客户端主机,“dbfd”在后面Client逻辑段中进行定义 Level = Full #定义备份的级别,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 = "/usr/local//bacula/working/Client2.bsr" #指定备份的引导信息路径 } Job { Name = "Client1" Client = dbfd Level = Incremental Type = Backup FileSet = "dbfs" Schedule = "dbscd" Storage = dbsd Messages = Standard Pool = dbpool Write Bootstrap = "/usr/local//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 = "/usr/local//bacula/working/Client1.bsr" } Job { #定义一个还原任务 Name = "RestoreFiles" Type = Restore #定义Job的类型为“Restore ”,即恢复数据 Client=dbfd1 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 = /boot #指定客户端FD需要备份的文件目录 } Exclude { #通过Exclude排除不需要备份的文件或者目录,可根据具体情况修改 File = /usr/local//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 = /usr/local//bacula/bin/working/bacula.sql } }
Client { #Client用来定义备份哪个客户端FD的数据 Name = dbfd #Clinet的名称,可以在前面的Job中调用 Address = 192.168.1.210 #要备份的客户端FD主机的IP地址 FDPort = 9102 #与客户端FD通信的端口 Catalog = MyCatalog #使用哪个数据库存储信息,“MyCatalog”在后面的MyCatalog逻辑段中进定义 Password = "XqJ0aC66ZHt3REH1sFj6wfnTZGdQSd8oqOv+W9cJ+zkh"#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.1.210 FDPort = 9102 Catalog = MyCatalog Password = "XqJ0aC66ZHt3REH1sFj6wfnTZGdQSd8oqOv+W9cJ+zkh2" File Retention = 30 days Job Retention = 6 months AutoPrune = yes }
Storage { # Storage用来定义将客户端的数据备份到哪个存储设备上 Name = dbsd Address = 192.168.1.220 #指定存储端SD的IP地址 SDPort = 9103 #指定存储端SD通信的端口 Password = "U1NXyNwriNYIH7SulVmKp/uGTYiy2C5OY7wnSqkz2voU" #Director端与存储端SD的验证密码,这个值必须与存储端SD配置文件bacula-sd.conf中Director逻辑段密码相同 Device = FileStorage #指定数据备份的存储介质,必须与存储端(这里是192.168.1.220)的bacula-sd.conf配置文件中的“Device” 逻辑段的“Name”项名称相同 Media Type = File #指定存储介质的类别,必须与存储端SD(这里是192.168.1.220)的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 = itchenyi@gmail.com = mount console = all, !skipped, !saved append = "/usr/local//bacula/bin/working/log" = all, !skipped #定义bacula的运行日志 append ="/usr/local//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 = "/usr/local//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-2013-01-27-xxx Maximum Volumes = 7 #设置最多保存多少个备份文件 Recycle Current Volume = yes #表示可以使用最近过期的备份文件来存储新备份 Maximum Volume Jobs = 1 #表示每次执行备份任务创建一个备份文件 }
Console { #限定Console利用tray-monitor获得Director的状态信息 Name = chenyi-mon Password = "/I9QK/9tvB63eOHT2TGJuO7KMzOkrNGi8UtOMGq9LHga" CommandACL = status, .status } 3 配置bacula的SD SD可以是一台单独的服务器,也可以和Director在一台机器上,本例就将SD和Director端放在一起进行配置,SD的配置文件是bacula-sd.conf
Storage { #定义存储,本例中是chenyi-sd Name = chenyi-sd #定义存储名称 SDPort = 9103 #监听端口 WorkingDirectory = "/usr/local//bacula/bin/working" Pid Directory = "/usr/local//bacula/bin/working" Maximum Concurrent Jobs = 20 }
Director { #定义一个控制StorageDaemon的Director Name = chenyi-dir #这里的“Name”值必须和Director端配置文件bacula-dironf中Director逻辑段名称相同 Password = "U1NXyNwriNYIH7SulVmKp/uGTYiy2C5OY7wnSqkz2voU" #这里的“Password”值须和Director端配置文件bacula-dir.conf中Storage逻辑段密码相同 }
Director { #定义一个监控端的Director Name = chenyi-mon #这里的“Name”值必须和Director端配置文件bacula-diconf中Console逻辑段名称相同 Password = "/I9QK/9tvB63eOHT2TGJuO7KMzOkrNGi8UtOMGq9LHga" #这里的“Password”值必和Director端配置文件bacula-dir.conf中Console逻辑段密码相同 Monitor = yes } Device { #定义Device Name = FileStorage #定义Device的名称,这个名称在Director端配置文件bacula-dir.conf中的Storage逻辑段Device项中被引用 Media Type = File #指定存储介质的类型,File表示使用文件系统存储 Archive Device = /tmp/backup #Archive Device用来指定备份存储的介质,可以是cd、dvd、tap等,这里是将备份的文件保存的/tmp/backup目录下 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 = chenyi-dir = all } 到这里,Bacula的主控端大致就配置完毕了,接下来就要启动Bacula的进程了[本文出自www.itchenyi.com 允许转载,但你必须保留原文链接] 启动Bacula进程 [root@chenyi bin]# ./bacula start Starting the Bacula Storage daemon Starting the Bacula File daemon Starting the Bacula Director daemon 终于配置完毕,但还有关键的一步,添加存储介质 [root@chenyi bin]# ./bconsole Connecting to Director 192.168.1.220:9101 1000 OK: chenyi-dir Version: 5.2.6 (21 February 2012) Enter a period to cancel a command. *label Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" Automatically selected Storage: File Enter new Volume name: backup Defined Pools: 1: Default 2: File 3: Scratch Select the Pool (1-3): 1 Connecting to Storage daemon File at 192.168.1.220:9103 ... Sending label command for Volume "backup" Slot 0 ... 3000 OK label. VolBytes=193 DVD=0 Volume="backup" Device="FileStorage" (/tmp/backup) Catalog record for Volume "backup", Slot 0 successfully created. Requesting to mount FileStorage ... 3906 File device ""FileStorage" (/tmp/backup)" is always mounted. * 配置客户机(为需要备份的Client) 1.编译安装Bacula 设置环境变量,将$HOME设置为/usr/local [root@chenyi bacula-5.2.6]# HOME=/usr/local/ [root@chenyi bacula-5.2.6]# CFLAGS="-g -Wall" 运行Bacula配置脚本。关于configure选项已经在<安装Bacula主控端>部分做了介绍,这里不再做说明。以下是个范例: [root@chenyi ~]# tar zxf bacula-5.2.6.tar.gz [root@chenyi ~]# cd bacula-5.2.6 预配置 [root@chenyi bacula-5.2.6]# ./configure --prefix=/usr/local/bacula/ --enable-client-only 以下是执行结果: 编译并安装Bacula [root@chenyi bacula-5.2.6]# make
你可能在make的过程中出现libtool: link: cannot find the library ln -s /usr/lib/libattr.la /lib/libattr.la [root@chenyi bacula-5.2.6]# make install [root@chenyi bacula-5.2.6]# make install-autostart-fd #添加自动启动守护进程 [root@chenyi bacula-5.2.6]# ls /etc/rc.d/init.d/ | grep bacula #验证结果 bacula-fd 到此,Centos系统的客户端就安装完成了,还需要对Bacula-fd进行配置之后再启动Bacula。 Director { #定义一个允许连接FD的控制端 Name = chenyi-dir #这里的“Name”值必须和Director端配置文件bacula-dir.conf中 Director逻辑段名称相同 Password = "XqJ0aC66ZHt3REH1sFj6wfnTZGdQSd8oqOv+W9cJ+zkh2" #这里的“Password”值必须和Director端配置文件bacula-dir.conf中Client逻辑段密码相同 }
Director { #定义一个允许连接FD的监控端 Name = chenyi.2-mon #chenyi.2-mon Password = "xjcWMuoZPw68Vrs//P9BsbLME6lh4mtOFYwhTxZPmNUe" Monitor = yes }
FileDaemon { #定义一个允许连接FD的监控端 Name = chenyi.2-fd FDport = 9102 #监控端口 WorkingDirectory = /usr/local/bacula/var/bacula/working Pid Directory = /var/run Maximum Concurrent Jobs = 20 #定义一次能处理的并发作业数 }
Messages { #定义一个用于FD端的Messages Name = Standard director = chenyi.2-dir = all, !skipped, !restored 客户端配置相对来说较简单,只需改这个文件即可 [root@chenyi bin]# ./bacula start #启动进程 Starting the Bacula File daemon 验证在server上 [root@chenyi bin]# ./bconsole Connecting to Director 192.168.1.220:9101 1000 OK: chenyi-dir Version: 5.2.6 (21 February 2012) Enter a period to cancel a command. *run Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" A job name must be specified. The defined Job resources are: 1: wanquanbeifen 2: Client1 3: Client 4: RestoreFiles
Select Job resource (1-4): 1 Run Backup job JobName: wanquanbeifen Level: Full Client: dbfd1 FileSet: dbfs Pool: dbpool (From Job resource) Storage: dbsd (From Job resource) When: 2013-01-27 19:20:41 Priority: 10 OK to run? (yes/mod/no): yes Job queued. JobId=14 *status Status available for: 1: Director 2: Storage 3: Client 4: All Select daemon type for status (1-4): 3 The defined Client resources are: 1: dbfd 2: dbfd1 Select Client (File daemon) resource (1-2): 2 Connecting to Client dbfd1 at 192.168.1.210:9102
chenyi.2-fd Version: 5.2.6 (21 February 2012) i686-pc-linux-gnu redhat Daemon started 27- 1暲013 19:14. Jobs: run=1 running=0. Heap: heap=0 smbytes=90,848 max_bytes=171,749 bufs=60 max_bufs=109 Sizeof: boffset_t=8 size_t=4 debug=0 trace=0 Running Jobs: Director connected at: 27- 1暲013 19:20 No Jobs running. You have messages. * 此时ls 查看之前定义的备份路径 [root@chenyi bin]# ls -lh /tmp/backup/ 总用量 19M -rw-r-----. 1 root root 193 12月 6 10:08 backup -rw-r-----. 1 root root 19M 1月 27 19:20 db-2013-01-27-id14 接下来开始尝试还原,首先删除Client上Boot中的所有文件。
到这里,从部署到备份再到还原整个过程就完了~~~~~ (责任编辑:IT) |