Bacula
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指定的位置上,完成备份恢复过程。
软件类别:国外软件 授权方式:免费版 运行环境:Win2003,
WinXp, Win2000, Nt, WinMe, Win9x,和Linux平台。
本次实验:服务器ip:10.0.253.117,客户端ip:10.0.253.118
改Localhost为baculaServer
[[email protected] ~] vi /etc/sysconfig/network
改yourname后面的值为:baculaServer
安装:
Ssrver端:
[[email protected] ~]# yum install gcc gcc-c++ //安装C编译器
[[email protected] ~]# yum install -y mysql mysql-server mysql-devel
//安装musql数据库
[[email protected]~]#wget
http://softlayer-dal.dl.sourceforge.net/project/bacula/bacula/5.2.13/bacula-5.2.13.tar.gz
//下载bacula
[[email protected] ~]# tar zxvf bacula-5.2.13.tar.gz //解压bacula
[[email protected] ~]# cd bacula-5.2.13 //打开bacula
[[email protected]
bacula-5.2.13]# ./configure--prefix=/usr/local/bacula--with-mysql
[[email protected] bacula-5.2.13]# make
[[email protected] bacula-5.2.13]# make install
[[email protected] bacula-5.2.13]# make install-autostart
Client端:
[[email protected] ~]# yum install gcc gcc-c++
[[email protected] ~]# cd bacula-5.2.13
[[email protected] bacula-5.2.13]# ./configure--prefix=/usr/local/bacula
--enable-client-only
[[email protected] bacula-5.2.13]# make install
[[email protected] bacula-5.2.13]# make install-autostart
初始化Mysql数据库:
[[email protected] bacula-5.2.13]# cd
[[email protected] ~]# service mysqld restart
[[email protected] ~]# cd /usr/local/bacula/etc
[[email protected] etc]# ./grant_mysql_privileges
[[email protected] ~]# ./create_mysql_database
[[email protected] ~]# ./make_mysql_tables
bacula实例配置:
Console端的配置
[[email protected] ~]# vi bconsole.conf // Console端的配置文件
Director
{
Name = f10-64-build-dir
#控制端名称,在下面的bacula-dir.conf和bacula-sd.conf
#文件中会陆续的被引用
DIRport = 9101 #控制端服务端口
address = 10.0.253.117 #控制端服务器IP地址
Password =
"ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"
#控制端密码文件
}
[[email protected] ~]# vi bacula-dir.conf //Director端的配置文件
Director
{
#定义bacula的全局配置
Name = f10-64-build-dir
DIRport =
9101
#定义Director的监听端口
QueryFile = "/usr/local/bacula/etc/query.sql"
WorkingDirectory =
"/usr/local/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 =
"/usr/local/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 =
"/usr/local/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 =
"/usr/local/bacula/etc/make_catalog_backup bacula bacula"
RunAfterJob =
"/usr/local/bacula/etc/delete_catalog_backup"
Write Bootstrap =
"/usr/local/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 =
/usr/local/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 =
/usr/local/bacula/var/bacula/working/bacula.sql
}
}
Client {
#Client用来定义备份哪个客户端FD的数据
Name = dbfd #Clinet的名称,可以在前面的Job中调用
Address = 10.0.253.118
#要备份的客户端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 = 10.0.253.118
FDPort = 9102
Catalog = MyCatalog
Password =
"Wr8lj3q51PgZ21U2FSaTXICYhLmQkT1XhHbm8a6/j8Bz"
File Retention = 30
days
Job Retention = 6
months
AutoPrune =
yes
}
Storage { # Storage用来定义将客户端的数据备份到哪个存储设备上
Name = dbsd
Address = 10.0.253.117 #指定存储端SD的IP地址
SDPort = 9103 #指定存储端SD通信的端口
Password =
"ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t" #Director端与存储端
#SD的验证密码,这个值必须与存储端SD配置文件bacula-sd.conf中Director逻辑段密码
#相同
Device = dbdev
#指定数据备份的存储介质,必须与存储端(这里是10.0.253.117)
#的bacula-sd.conf配置文件中的“Device”
逻辑段的“Name”项名称相同
Media Type = File
#指定存储介质的类别,必须与存储端SD(这里是10.0.253.117)
#的bacula-sd.conf配置文件中的“Device”
逻辑段的“Media Type”项名称相同
}
Catalog { #
Catalog逻辑段用来定义关于日志和数据库设定
ame = 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 = [email protected] = all,
!skipped
operator = [email protected] = mount
console = all, !skipped, !saved
append = "/usr/local/bacula/log/bacula.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 = [email protected] = 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-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
}
配置bacula的SD:
[[email protected] ~]# vi bacula-sd.conf//服务器端的配置文件
Storage
{
#定义存储,本例中是f10-64-build-sd
Name = f10-64-build-sd #定义存储名称
SDPort =
9103
#监听端口
WorkingDirectory =
"/usr/local/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
}
配置bacula的FD端
[[email protected] ~] vi 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 =
/usr/local/bacula/var/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
#定义一次能处理的并发作业数
}
Messages { #定义一个用于FD端的Messages
Name = Standard
director = localhost.localdomain-dir = all,
!skipped, !restored
}
服务器端的启动
[[email protected] etc]# /usr/local/bacula/sbin/bacula
{start|stop|restart|status}
也可以通过分别管理bacula各个配置端的方式,依次启动或者关闭每个服务:
[[email protected] etc]# /usr/local/bacula/etc/bacula-ctl-dir
{start|stop|restart|status}
[[email protected] etc]# /usr/local/bacula/etc/bacula-ctl-sd
{start|stop|restart|status}
[[email protected] etc]# /usr/local/bacula/etc/bacula-ctl-fd
{start|stop|restart|status}
客服端的启动:
[[email protected] etc]# /usr/local/bacula/sbin/bacula start
Starting the Bacula File daemon
管理客户端FD的服务,也可以通过以下方式完成:
[[email protected] etc]# /usr/local/bacula/sbin/bacula
{start|stop|restart|status}
[[email protected] baculaclient etc]# /usr/local/bacula/etc/bacula-ctl-fd
{start|stop|restart|status}
简单实例运行:
备份恢复:
[[email protected] opt]#/usr/local/bacula/sbin/bconsole
Connecting to Director 10.0.253.117:9101
1000 OK: f10-64-build-dir Version: 3.0.2 (18
July 2009)
Enter a period to cancel a command
*run