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

二、 bacula适合哪些用户
 如果业务系统数据量巨大,每天都在迅速增长,还需要以tar打包方式进行低级备份,并且没有相应的异地容灾策略时,那么就应该考虑使用bacula。bacula拥有一个完美的增量备份功能,同时还支持远程容灾备份。通过bacula,可以将数据备份到任意一个远程主机上,用户只需要对bacula进行简单的设置即可自动完成数据备份。
 如果用户已经拥有一套存储设备,如磁盘阵列、磁带/带库,只是需要将业务数据从服务器自动备份到这些存储设备上,bacula无疑也是最佳选择,因为bacula具有介质管理功能,利用它可以轻松地实现将服务器数据保存到一个或者多个已经挂载的磁带或带库中。虽然商业的备份软件也能完成将数据自动备份到存储设备上,但代价昂贵。
 对于正在使用一个商业的备份软件如legato和Veritas等的用户,更应该尝试一下bacula,因为bacula完全可以和这些商业软件相媲美,更重要的是,bacula是开源软件,如果某些关键功能无法通过实现,可以选择修改开源软件代码的方式来实现。通过对开源软件进行简单的修改来满足特殊需求,大大简化了用户的工作。

三、bacula的功能特点

1.支持多种备份方式
 (1)完全备份
完整备份就是完整地备份业务数据。例如,星期一用一盘磁带对整个业务系统进行备份,星期二用另一盘磁带对整个业务系统进行备份,依此类推。
这种备份策略的优点是:当发生数据丢失时,只要用一盘磁带(即灾难发生前一天的备份磁带)就可以恢复丢失的数据。当然,它也有不足之处。首先,由于每天都对整个系统进行完全备份,难免造成备份数据大量重复。这些重复的数据占用了大量的磁带空间,这对用户来说就意味着增加成本。其次,如果备份的数据量很大,那么备份所需的时间也就较长。对于一些业务繁忙、备份时间有限的企业来说,选择这种备份策略是不明智的。
 (2)增量备份
增量备份是以上次备份为基准的备份方式,也就是只对每天新增的或被修改过的数据进行备份,例如,星期天进行一次完全备份,星期一备份从星期天到星期一之间增加的数据,星期二备份从星期一到星期二之间增加的数据,依次类推。
这种备份策略的优点是:只备份当天更新或者增加的数据,因而数据量小,节省了磁带空间,缩短了备份时间。当然,它也是有缺点的。当灾难发生时,数据的恢复过程比较麻烦。如果系统在星期五的早晨发生故障,丢失了大量的数据,那么现在就要将系统恢复到星期四时的状态。这时系统管理员首先要找到星期天的完全备份进行系统恢复,然后找到星期一的备份来恢复星期一的数据,接着找到星期二的备份来恢复星期二的数据。按照这种方式,直到恢复周四的数据为止,很明显,这种方式很繁琐。备份的可靠性也很差。在这种备份方式下,各个备份间的关系就像一个链子,环环相扣,其中任何一个备份出了问题都会导致整条链子脱节。在上例中,若星期三的备份出了故障,那么管理员最多只能将系统数据恢复到星期二时的状态。
 (3)差异备份
差异备份是以完全备份为基准的一种备份方式。例如,系统管理员在星期天对系统进行一次完全备份,在星期一备份星期天到星期一之间的数据,在星期二备份星期天到星期二之间的数据,依次类推,也就是备份当天所有与星期天不同的数据(新的或修改过的)。
差异备份方式避免了上面两种备份策略的缺陷,同时,又具有以上两种备份方式的所有优点。首先,它无需每天都对系统做完全备份,因此备份数据量小,备份所需时间短,并节省空间;其次,它在灾难恢复时也很方便,只需要两个备份即可,即完全备份与灾难发生前一天的备份,就可以将系统恢复。
其实每种备份方式都不是孤立存在的,在实际的备份应用中,通常采用以上三种方式相结合的备份策略。例如每周一至周六进行一次增量备份或差异备份,每周日进行全备份,每月底进行一次完全备份,每年底进行一次完全备份。
通过对完三种备份方式的介绍,可以知道每种备份的数据量是不同的:完全备份>差分备份>增量备份。因而,在进行数据恢复时,使用的数据也不尽相同。如果使用完全备份的方式,只需要利用上次的完全备份就可以恢复所有数据;如果使用完全备份+增量备份的方式,则需要利用上次的完全备份+上次完全备份后的所有增量备份才能恢复所有数据;如果使用完全备份+差异备份的方式,则只需要利用上次的完全备份+最近的一个差异备份就可以恢复所有数据。

2.支持多种恢复方式
? 可以恢复某个目录、文件到指定的位置,恢复时自动恢复数据的原始结构。
? 可以恢复所有数据到指定位置,恢复时自动恢复数据的原始结构。
? 可以保存恢复文件或目录的权限、属主、访问时间等属性。
? 可以恢复某个时间点的备份到指定位置,恢复时自动恢复数据的原始结构。

3.支持多种文件系统下的备份与恢复
bacula支持的文件系统有:ext3、ext2、reiserfs、xfs、jfs、smbfs、 iso9660和ntfs等。

4.支持各种备份介质
? 支持把备份写到磁盘
? 支持把备份写到磁带
? 支持把备份写到磁盘阵列
? 支持把备份写到光盘

5.支持多种操作系统
? Linux(RHEL/SUSE/Centos)
? UNIX
? Mac
? Windows (Windows 98、 Windows Me、 Windows NT、Windows XP、Windows 2000和 Windows 2003) 

6.强大的内部功能
? 支持定时备份,无需人工干预
? 支持终端命令控制,更加灵活
? 支持正则表达式,可以对备份文件进行更严格的匹配
? 支持MD5和SHA1两种签名校验
? 支持压缩备份,备份效率更高,传输更快
? 支持报表自动绘制功能,可以自动生成备份报表和恢复报表

四、bacula的工作原理

1.bacula基本组成
一个完整的bacula备份系统,由下面5个部分组成。
? Director Daemon:以下简称Director,负责监听所有的备份、恢复、验证、存档事务,以及定制备份和恢复文件计划等,并将整个系统运行状况记录在一个数据库中。支持Director Daemon的数据库有MySQL、PostgreSQL 和SQLite,推荐使用MySQL。Director的配置文件为bacula-dir.conf。
? Storage Daemon:以下简称SD,在备份数据时,用来指定备份和恢复数据的存储介质(存储介质可以是本地磁盘,光纤磁盘阵列、磁带和DVD等),主要负责将数据备份到存储介质上。而在数据恢复时,负责将数据从存储介质中传送出去。SD的配置文件为bacula-sd.conf。
? File Daemon:以下简称FD,是一个安装在需要备份数据的机器上的守护进程,在备份数据时,它负责把文件传出;在恢复数据时,它负责接收数据并执行恢复操作。FD的配置文件为bacula-fd.conf。
? Console:是一个管理控制台,用户可以通过这个控制台连接到Director Daemon进行管理备份与恢复操作,有三种管理方式:基于文本的控制台界面、 GNOME的界面和wxWidgets的图形界面。Console 端的配置文件是bconsole.conf。
Monitor:一个进程监控端,负责监控Director Daemon、Storage Daemon和File Daemon的守护进程。bacula备份系统的组成如图1所示。

 

开源网络备份软件bacula - zhuzhu - 五事九思 (大连Linux主机维护)

 图1 bacula备份系统的组成

从图1中可以看出,bacula的备份恢复流程如下:
首选,通过Console连接到Director端,备份恢复操作开始。
接着,Director端从自己的数据库中调出记录信息,对存储端SD与客户端FD的任务进行协调。
然后,客户端FD负责验证Director的操作许可,如果验证通过,则允许连接存储端SD。
最后,客户端FD根据Director发出的请求去连接SD,将FD端的数据备份到存SD指定的存储介质上,或者将SD端存储介质中的数据传回到客户端FD指定的位置上,完成备份恢复过程。
需要注意的是,在bacula的整个备份恢复系统中,客户端FD和SD要保证网络连接畅通,为了保证备份以及恢复数据的速度和效率,最好让客户端FD和SD处在一个网段中。

2.bacula各个组成部分的关联性
在baclua的5个组成部分中,3个主要配置文件是相互关联的,修改任何一个配置文件,另外两个文件都要进行相应的改动。为了使读者对这3个配置文件有更清晰的认识,图2列出了这3个文件之间的相互关系。

 

开源网络备份软件bacula - zhuzhu - 五事九思 (大连Linux主机维护)

图2 bacula配置文件之间的关系

开源网络备份软件bacula(安装bacula)

 

一、 bacula的几种网络备份拓扑
     前面文章介绍了bacula有5个组成部分,在实际的应用中,没有必要将5个部分分别放在不同的服务器上,它们之间的某些部分是可以合并的,常见的bacula部署结构有如下几种:
1) Director与SD以及Console在一台机器上,而客户端FD在另外一台机器上,当然客户端FD可以有一台或者多台上。
2) Director与Console在一台机器上,SD在一台机器上,客户端FD在一台或者多台上。
3) Director与客户端FD、SD以及Console端都在一台机器上,也就是服务器自己备份自己,数据保存在本机。

二、 编译与安装bacula
 这里对上一节的第一种bacula部署结构进行介绍。环境如表4-1所示。
表1 一个bacula部署结构的环境 
主机名 IP地址 操作系统 应用角色
baculaServer 192.168.12.188 CentOS release 5.4 Director、SD、Console
baculaClient 192.168.12.189 CentOS release 5.4 FD
整个拓扑结构如图1所示。

 

开源网络备份软件bacula - zhuzhu - 五事九思 (大连Linux主机维护)

图1 bacula实例的拓扑结构

1.在bacula服务器端安装bacula
首先在http://www.bacula.org下载相应的源码,这里下载的是bacula-5.0.1.tar.gz,接着进行编译安装,安装过程如下:

 
  
  1. [root@baculaServer opt]# tar zxvf bacula-5.0.1.tar.gz  

  2. [root@baculaServeropt]# cd bacula-5.0.1  

  3. [root@baculaServer bacula-5.0.1]# ./configure --prefix=/opt/bacula --with-mysql=/opt/mysql  

  4. [root@baculaServer bacula-5.0.1]#make  

  5. [root@baculaServer bacula-5.0.1]#make install 


 bacula需要数据库的支持,这里采用Mysql数据库,并假定Mysql已经在bacula服务器端安装好了,且Mysql安装路径为/opt/mysql(bacula在编译时通过“--with-mysql”选项指定了Mysql数据库的安装路径)。
 bacula安装完成后,所有配置文件默认放在/opt/bacula/etc/目录下。

2.在bacula客户端安装bacula
由于bacula客户端只是是需要备份的客户端,因而只需安装相应的客户端组件即可,过程如下:

 
  
  1. [root@baculaClient opt]# tar zxvf bacula-5.0.1.tar.gz  

  2. [root@baculaClient opt]# cd bacula-5.0.1  

  3. [root@baculaClient bacula-5.0.1]# ./configure --prefix=/opt/bacula --enable-client-only  

  4. [root@baculaClient bacula-5.0.1]#make  

  5. [root@baculaClient bacula-5.0.1]#make install 

三、 初始化Mysql数据库
 在baculaServer上安装完bacula后,还需要创建bacula对应的Mysql数据库以及访问数据库的授权,好在bacula已经为用户准备好了这样的脚本,接下来只要在bacula服务器端上执行如下脚本即可。

 
  
  1. [root@localhost bacula-5.0.1]#cd /opt/bacula/etc  


  2. [root@localhost etc]# ./grant_mysql_privileges   

  3. [root@localhost etc]# ./create_mysql_database   

  4. Creation of bacula database succeeded.  

  5. [root@localhost etc]# ./make_mysql_tables   

  6. Creation of Bacula MySQL tables succeeded. 


 接下来可以登录Mysql数据库,查看bacula的数据库和数据表是否已经建立。在执行上面三行Mysql初始代码时,默认由空密码的root用户执行,因此要请确保Mysql数据库root密码为空。