设为首页 收藏本站
查看: 1564|回复: 0

[经验分享] 使用bacula实现Linux的远程备份和还原

[复制链接]

尚未签到

发表于 2016-6-4 11:51:45 | 显示全部楼层 |阅读模式
Bacula,被誉为开源软件中最好的备份还原软件,它提供了企业级的客户机/服务器的备份解决方案,能够通过网络来管理文件的备份,恢复和核实工作。Bacula,既有windows版本的,也有Linux,Unix的。但目前有关于其使用的文章是在太少,而且介绍的很不详细,今天,我就来和大家一起探讨一下。(最新版本2.4.3主页 http://www.bacula.org
一,bacula的模型
为了部署bacula,应该了解它的主要组件。



控制器是协调备份,恢复和校验操作的守护进程。用户可以通过控制台向控制守护进程提交任务。控制台不一定非要和控制守护进程在同一台机器上,可以分离。
存储守护进程是用来写入备份数据或者读取备份数据的。它必须安装在提供存储的机器上。也就是安装了磁带机或者要将备份存放的服务器上。它和控制守护进程可以分离,不一定要安装在一起。
文件守护进程安装在每台需要备份数据的系统上。比如,你想备份网络中的某台文件服务器上的数据,那么,你就应该将文件守护进程安装在此台服务器上。
编目是一个数据库,它保存所有备份的每个文件和卷的信息。所以,它需要数据库软件的支持,现在bacula支持mysql,postgresql和sqlite。

二,设置
试验环境如下:有两台linux主机,
一台主机名为RHEL5(以下简称server),ip为192.168.0.5,系统为RHEL 5.1,角色为备份服务器兼存储服务器(另挂一块磁盘到/tmp/test/下作为存储)
另一台主机名为client。Ip是192.168.0.6,系统是RHEL5.1,角色为需要备份的主机(这里我们以/boot为要备份还原的目录)

准备工作:在server上安装mysql和gcc环境(bacula编译需要gcc),并启动mysql
          在client上只需安装gcc环境

配置服务器server
1, 解压编译安装bacula:

然后是make和make install
默认情况,bacula安装在/etc/bacula/目录下


2,创建mysql脚本
   Bacula已经为我们建好了脚本,直接运行就OK,一共3个。如果不运行,后面9101端口是起不来的。



3,修改配置
作为存储服务器兼控制台,现在需要依次对bacula-dir.Conf(管全局)  bacula.sd.conf(管存储)和bconsole.conf(管控制台)配置文件进行修改。

bacula-dir.conf是最复杂的一个文件,它一共有10个逻辑段:
director(定义全局),
catalog(定义日志),
jobdefs(定义备份的默认值),
job(定义特定操作),
fileset(定义备份哪些区域不备份哪些区域),
schedule(定义备份时间),
pool(定义备份介质),
client(定义要备份的主机),
storage(定义如何存储)
messages(定义如何处理消息)
因为此文件比较复杂,所以我把我配置好的文件直接贴出来,一些特别重要的地方咱们拿出来讨论

Director {             # 全局的一些配置        
  Name = RHEL5-dir
  DIRport = 9101               
  QueryFile = "/etc/bacula/query.sql"
  WorkingDirectory = "/var/bacula/working"
  PidDirectory = "/var/run"
  Maximum Concurrent Jobs = 1    # 定义一次能处理的并发作业数
  Password = "RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI"   # 这个地方必须与控制台所在主机上的bconsole.conf一致,这里是本机
  Messages = Daemon
}

JobDefs {
  Name = "DefaultJob"
  Type = Backup
  Level = Incremental
  Client = RHEL5-fd   # 如果本机也需备份就在后面去定义RHEL5-fd为本机
  FileSet = "Full Set"
  Schedule = "WeeklyCycle"
  Storage = File
  Messages = Standard
  Pool = Default
  Priority = 10
}

Job {                           # 定义一个任务
  Name = "Client"       # 任务的名称   后面咱们可以在bacula的控制台中看到
  Client = Client    # 引用后面定义的客户端“Client”,表示此任务对名字叫client主机进行操作
  JobDefs = "DefaultJob"
  Write Bootstrap = "/var/bacula/working/Client1.bsr"  #定义备份的引导信息放在什么地方
  Level = Full           #定义备份类型为完全
FileSet = "Full Set"     #备份的范围根据后面定义的名叫“Full Set”的操作
  Schedule = "WeeklyCycleAfterBackup"  #备份计划任务按"WeeklyCycleAfterBackup" 定义的执行
}

Job {
  Name = "BackupCatalog"
  JobDefs = "DefaultJob"
  Level = Full
  FileSet="Catalog"
  Schedule = "WeeklyCycleAfterBackup"
  RunBeforeJob = "/etc/bacula/make_catalog_backup bacula bacula"
  RunAfterJob  = "/etc/bacula/delete_catalog_backup"
  Write Bootstrap = "/var/bacula/working/BackupCatalog.bsr"
  Priority = 11                   # run after main backup
}

Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=RHEL5-fd  #这里就是指的RHEL5这台主机自己
  FileSet="Full Set"
  Storage = File
  Pool = Default
  Messages = Standard
  Where = /bacula-restores
}

FileSet {
  Name = "Full Set"
  Include {
    Options {
   signature = MD5
    }
     File = /boot     # 备份的范围,这里我根据需要只备份了/boot分区,如果要备份其他可加入相应路径
  }

  Exclude {       # 排除的,不备份的内容
    File = /proc
    File = /tmp
    File = /.journal
    File = /.fsck
  }
}

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
}

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

Client {
  Name = RHEL5-fd
  Address = 192.168.0.5        # 指定了RHEL5这台主机的地址,如果有DNS可以写FQDN
  FDPort = 9102
  Catalog = MyCatalog
  Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv"     # 要和RHEL5上bacula-fd.conf的一致
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Client {
  Name = Client       # 前面引用过的client就是在这定义的
  Address = 192.168.0.6    # 告诉服务器client在什么地方
  FDPort = 9102
  Catalog = MyCatalog
  Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2"    # 要和client上bacula-fd.conf的一致
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Storage {            #定义存储服务器
  Name = File
  Address = 192.168.0.5                # 告诉服务器数据存储在哪台机器上。这里是主机自己。
  SDPort = 9103
  Password = "oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd"  # 要和本机bacula-sd.conf上一致
                                                           
Device = FileStorage
  Media Type = File  # 定义以文件方式存储
}


Catalog {   # 关于日志和数据库的定义
  Name = MyCatalog
  dbname = "bacula"; dbuser = "bacula"; dbpassword = ""
}

Messages {
  Name = Standard
  mailcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed
for %j\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
  append = "/var/bacula/working/log" = all, !skipped
}


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 = "/var/bacula/working/log" = all, !skipped
}
Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
}

Pool {
  Name = Scratch
  Pool Type = Backup
}

Console {
  Name = RHEL5-mon
  Password = "YZDfclvKrfWVkmGdGtWygMOR8ZOX7XK7MYvaFd1dIraN"
  CommandACL = status, .status
}

第二个文件bacula-sd.conf
    Storage {                             # 定义存储。本例中是自己RHEL5
  Name = RHEL5-sd
  SDPort = 9103                  # 存储端口      
  WorkingDirectory = "/var/bacula/working"
  Pid Directory = "/var/run"
  Maximum Concurrent Jobs = 20
}

Director {
  Name = RHEL5-dir
  Password = "oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd"  # 与bacula-dir.conf中对应的Storage项一致
}

Director {
  Name = RHEL5-mon
  Password = "xyqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5"
  Monitor = yes
}
Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /tmp/test         # 定义备份到什么地方
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # 如果设备可用,则读取
  RemovableMedia = no;
  AlwaysOpen = no;
}
Messages {
  Name = Standard
  director = RHEL5-dir = all
}

最后一个文件bconsole.conf
Director {
  Name = RHEL5-dir
  DIRport = 9101
  address = 192.168.0.5          # 服务器位置
  Password = "RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI"  # 与bacula-dir.conf中director中一致
}
现在启动进程

终于配置完毕,但还有关键的一步,添加存储介质


黄色的是要输入的部分。现在就已经进入到控制台了。
配置客户机(需要备份的client):
1,  编译安装bacula

然后make和make install
默认安装在/etc/bacula/目录下
1,  改配置文件 bacula-fd.conf
  Director {
  Name = RHEL5-dir  # 与服务器上的bacula-dir.conf中一致
  Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2"  # 与服务器上的bacula-dir.conf中一致
}
Director {
  Name = RHEL5-mon        # 与服务器上的bacula-dir.conf中一致
  Password = "yqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5"  # 与服务器上的bacula-dir.conf中一致
  Monitor = yes
}
FileDaemon {                        
  Name = Client       # 指自己
  FDport = 9102                  # 监听端口r
  WorkingDirectory = /var/bacula/working
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
}
Messages {
  Name = Standard
  director = Client-dir = all, !skipped, !restored
}
客户端相对配置较简单。改这一个文件就行了。
然后启动进程



三,验证
经过了艰苦的工作,现在到了享受结果的时候了(呵呵,这个东东我已经弄了3天了,痛苦呀)
咱们现在先备份client下的/boot目录吧
在server上

接着

可以通过status查看状态


呵呵,看见OK了吗,备份成功了哟

接下来咱们来做还原,首先咱们把client上的/boot中的文件删除掉

现在回到server上来还原(还是在控制台)

显示如下提示

接着标记要还原内容,并且执行

这个地方注意一下,如果要还原到client原位置则按以下步骤

现在再回到client下看看

哈哈,看见了吧,刚才删掉的文件现在全部回来了

四,最后
因为手头上没有现成的资料,加上本人英语水平有限,有不足的地方还请大家谅解。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-226179-1-1.html 上篇帖子: Bacula是一款开源的跨平台网络备份工具,提供基于企业级的CS的备份解决方案。可以对数据进行备份、恢复、以及完整性校验。 下篇帖子: 开源备份软件bacula安装记录--包括备份-恢复演练
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表