bacula 备份小技巧
bacula 是个优秀的开源备份软件,支持各种客户端,将使用的经验分享如下:
1、为防止中间人攻击,尤其是在公网备份时,使用pwgen生成高强度的随机密码,通过ssl加密,客户端指定服务端地址,iptables防火墙做点对点信任;
2、给存储卷(volume)帖上标签,更容易识别;
1
|
Label Format = "www-"
|
3、如果使用虚拟机做bacula,可以定期给虚拟机做快照,因为一旦bacula自己坏了,那就非常麻烦;
4、备份bacula的mysql库,mysql保存的是bacula-dir的核心数据内容,比如某年某月备份了XX服务器上的YYY,备份到了zzz存储卷上。这些信息在对于bacula还原非常关键。
5、文件校验不要使用sha1,那个非常耗费CPU,也可酌情使用md5校验或不做校验;
不建议使用gzip压缩,可酌情使用LZO压缩算法,牺牲一点CPU获得较为可观的数据压缩。
6、bconsole是控制服务端用的,不要跟客户端配在一起,在windows客户端上尤其要注意,它会默认安装bconsole;
7、每次bacula完成备份都会发邮件给root,可以根据需要填写成你的地址
Mail = root@localhost = all, !skipped
如果希望bacula只有在备份出错时才报警,那么将上面那行改为
1
|
MailOnError = root@localhost = all, !skipped
|
8、如果你使用了logwatch,logwatch可能没权限检查日志,那么bacula的日志地址可能要改一下将
append = "/var/spool/bacula/log" = all, !skipped
改为
1
|
append = "/var/log/bacula.log" = all, !skipped
|
9、做好备份计划,个人认为,默认的WeeklyCycle已经比较完美,结合了全备、差备和增备的优点,任何时候都可以快速的恢复源文件。
对于某些周期性的环境,比如月初和月末业务量比较大,由于完全备份比较耗时,我们不希望这个时间段进行完全备份。因此可以设计备份计划为如下:
1
2
3
4
5
6
7
|
Schedule {
Name = "WeeklyCycle"
Run = Differential 1st sat at 2:05
Run = Full 2nd sat at 2:05
Run = Differential 3rd-4th sat at 2:05
Run = Incremental sun-fri at 2:05
}
|
或者
1
2
3
4
5
6
7
8
9
|
Schedule {
Name = "monthly"
Run = Differential on 1 at 2:05
Run = Incremental on 2-10 at 2:05
Run = Full on 11 at 2:05
Run = Incremental on 12-20 at 2:05
Run = Differential on 21 at 2:05
Run = Incremental on 22-31 at 2:05
}
|
10、做好容量管理
bacula有好几个让人眼花缭乱的参数用于淘汰过期的备份
1
2
3
4
|
比如,一个存储卷只使用一次,Maximum Volume Jobs =1 ;
比如,限制单个存储卷大小,Maximum Volume Bytes = 10G ;
又如,设置存储卷的生命周期,Volume Retention = 60 days ;
再如,限制存储池的存储卷数量,Maximum Volumes = 120 ;
|
这些参数确实让人无所适从,个人觉得比较好的办法是这样的:
假设硬盘容量为10TB,每个存储卷为10G,我们把磁盘的90%用于存储备份,那么最多可以容纳900个存储卷,每当存储卷不够用时,会自动回收最老的存储卷。这样就能保证磁盘利用率永远不会高于90% 。
一个存储卷的容量不宜过大,建议设置成一次增量备份的大小,但也不宜过小,不小于1G
大文件的好处是顺序读写,速度快,节省IOPS。但是如果过大,备份无法及时淘汰。
记住,不要给每个每个客户端单独分一个存储池,不要给每次任务单独一个存储卷,这样容易会让容量规划失控。也就是说所有备份都放入默认的存储池。bacula已经把存储过程抽象化成了存储卷了,不再需要我们去单独触碰存储卷了,通常来说,不必担心一个目录下存储卷太多,除非你一个目录下有几千几万个存储卷。如果那样,你应该考虑其他存储方式了,比如分布式文件系统。
11、对于非常繁重的备份任务,需要在job中进行时间限制,避免在白天用户高峰期备份,影响性能。
JobDefs {...Max Run Time = 12h... }
12、bacula默认不会跨文件系统备份,假设/data/log是一个单独的挂载点,bacula备份/data时,会跳过/data/log,使用onefs=no ,可以避免这个问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
FileSet {
Name = "my-fileset"
Include {
Options {
signature = MD5
onefs = no
compression = LZO
}
File = /etc
File = /data
File = /var/log
}
}
|
13、如果使用高版本的rpm安装,bacula-dir 可能无法到mysql数据库,日志里却显示无法连接到postgresql,那是因为使用了错误的驱动,使用下面的命令解决。
1
|
alternatives -- set libbaccats.so /usr/lib64/libbaccats-mysql .so
|
详见 https://www.centos.org/forums/viewtopic.php?f=48&t=47735
14、在bacula客户端较多的情况下,服务端主配置文件动不动几百上千行,难以维护。
bacula 开发团队比较懒,配置文件语法不支持include,但是可以用另类办法实现,在bacula-dir.conf 文末加上一行
1
|
@| "sh -c 'for f in /etc/bacula/conf.d/*.cfg ;do echo @${f};done'"
|
这是一个shell,这个做法相当于
1
|
include /etc/bacula/conf .d/*.cfg
|
15、如果硬盘容量规划失败,磁盘爆满,下面这个脚本可以救你,请根据需要修改,也可以搞个定时计划,每天或每周执行一次
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env bash
/usr/sbin/bconsole > /dev/null << EOF
@output /dev/null
prune expired volume yes
truncate expired volume pool=File storage=File1 yes
truncate expired volume pool=File storage=File2 yes
@quit
EOF
|
16、备份思路问题
在机器数量较少的情况下,对于备份任务,我们常常想到的问题是:“我要备份哪些东西?”,解决方法通常是加法,将需要备份的目录逐个列出来然后执行备份。
在机器数量变得庞大的时候,由于系统管理员的数量也会增加,并且系统管理员们也面临分工协作,或分管网络,或操作系统,或安全,或数据库,或具体业务。这种情况下,加法会面临困境,负责备份的管理员不知道每台机器具体需要备份哪些目录,并且逐个维护每台机器的具体备份路径也十分吃力,也容易失误,遗漏关键备份内容。
这个时候的解决办法,应该是回答问题“我不需要备份哪些东西?”,即减法。将不需要备份的目录列出来,然后统统执行备份,在部署业务时,只需主动规避上述目录即可。这个办法还可以解决一些历史遗留问题,即所有人都对机器上的业务没有完整认识。
17、另一种思路
如果你使用的是baucla 7.x的版本,该版本有个新功能Exclude Dir Containing,可以通过在文件夹里创建一个标识,让bacula跳过该文件夹的备份。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
FileSet {
Name = "192.168.1.23-fileset"
Include {
Options {
signature = MD5
compression = LZO
}
File = /etc
File = /var/log
File = /data
Exclude Dir Containing = .excludeme
}
}
|
然后在bacula客户端的某个目录创建标识文件
1
|
touch /data/mysql/ .excludeme
|
加一点注释
1
|
echo "Don't remove this file unless you really want to backup this directory." > /data/mysql/ .excludeme
|
这种方法也相对灵活,但需要事先约定好。
18、理解bacula的增量备份
bacula的增量备份是根据文件时间戳来判断文件是否应该备份。对于大文件应该特别注意,比如日志文件。每天增加了几十万行内容很正常,日积月累很容易变成几十G。bacula每天备份都需要全部备份一遍,比如tomcat的catalina.out,再如nginx的access.log,一定要记得定期切割轮转。
19、使用nmap和配置文件模板,定时扫描并自动添加新的客户端
示例模板文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
cat /etc/bacula/host-template.conf
Client {
Name = 127.0.0.1-fd
Address = 127.0.0.1
FDPort = 9102
Catalog = MyCatalog
Password = "eeeeeeeeeee"
File Retention = 90 days
Job Retention = 3 months
AutoPrune = yes
}
Job {
Name = "Backup-127.0.0.1"
JobDefs = "my-backup-job"
Enabled = yes
FileSet = "my-fileset"
Client = 127.0.0.1-fd
}
|
自动发现脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
cat fd-autodiscovery.sh
#!/usr/bin/env bash
if [ ! -f /usr/bin/nmap ];then
echo -e "\e[1;31mError: /usr/bin/nmap not found \e[0m"
exit 1
fi
template=/etc/bacula/host-template.conf
dir=/etc/bacula/conf.d
network=$1
really_restart_dir=no
if [ x$network == "x" ];then
echo -e "\e[1;31mUsage: $0 [ip|ip-range|network] \e[0m"
echo -e "\n"
echo -e "example1: \e[1;32m $0 192.168.0.100 \e[0m"
echo -e "example2: \e[1;32m $0 192.168.1-200 \e[0m"
echo -e "example3: \e[1;32m $0 192.168.2.0/24 \e[0m"
echo -e "\n"
exit 0
fi
clients=`nmap -n -sS -p 9102 --open $network |awk '/Nmap scan report for/{print $5}'`
for host in $clients ;do
if [ -f $dir/${host}.cfg ]; then
:
else
echo "New bacula client found: $host "
cp $template $dir/$host.cfg
sed -i "s/127.0.0.1/$host/g" $dir/$host.cfg
really_restart_dir=yes
fi
done
if [ $really_restart_dir == "yes" ];then
echo -e "restarting bacula-dir"
systemctl restart bacula-dir
fi
exit 0
|
写的很杂,各位见谅,欢迎留言。
bacula 备份小技巧相关推荐
- azure mysql 备份_Azure数据库备份小技巧
这次来谈谈备份的话题,备份的重要性就不用多说了,这次来谈谈云上怎么做备份.都知道PaaS服务更轻量,更易于管理,其中一个很重要的一点就是PaaS服务的备份往往都很简单,很多时候点点鼠标设置好备份策略就 ...
- 手机小技巧:安卓微信聊天记录怎么备份?
安卓微信聊天记录怎么备份?现在的社会,上至老人家,下至小学生都在使用微信进行社交,不但可以打字,而且还有语音交流.语音通话.视频通话等等,甚至表情包的加入让整个聊天过程更加有活跃的氛围.聊天记录是与他 ...
- 怎样备份计算机注册表文件格式,小技巧:教你自动备份注册表!
原标题:小技巧:教你自动备份注册表! 今天小A想来跟大家分享一下关于[注册表]的内容.作为Windows的核心组件,一旦注册表受损很容易导致系统崩溃.在Windows 10 1803版本之前,系统默认 ...
- 电脑经典的小技巧48条
以下是一些电脑经典的小技巧,或许有的在你看来很简单,但它确实是很经典的: 1.如果同时有多个窗口打开,想要关闭的话,可以按住shift不放然后点击窗口右上角的关闭图标. 2.在保存网页前,可以按一下& ...
- 计算机数据恢复教程视频,视频删了怎么恢复?小技巧帮你快速解决
视频删了怎么恢复?小技巧帮你快速解决 2019年07月03日 17:20作者:黄页编辑:黄页 分享 视频删了怎么恢复?如何能够将电脑上误删除的一些重要视频文件给恢复呢?相信很多人都想要知道这个答案,毕 ...
- 数据库优化实例以及优化的小技巧
SQL Server上面删除1.6亿条记录,不能用Truncate(因为只是删除其中少部分数据). 经过实验,每次删除400万条要花1.5 - 3小时,而且是越到后面越慢,正常的话,需要大约102个小 ...
- 鸟哥的Linux私房菜(基础篇)-第四章、安装 CentOS 5.x 与多重开机小技巧
第四章.安装 CentOS 5.x 与多重开机小技巧 最近更新日期:2009/08/11 Linux distributions越作越成熟,所以在安装方面也越来越简单!虽然安装非常的简单,但是刚刚前一 ...
- APP技巧:微信10个实用小技巧,太实用了,赶紧收藏!
大家天天都在用微信,但是真正完全玩转微信的人也许并不多,今天小编给大家分享10个实用的小技巧,非常实用,赶紧分享给自己的朋友们吧! 一.对方正在输入 这个提示仅在收到消息后的10秒钟内,在对话框输入文 ...
- 电脑网络维护_电脑维护小技巧(全面)
如果你真的想了解,请耐心看完,都是干货 电脑使用维护小技巧1. 电脑为何莫名奇妙多了那么多软件呢? 有的人在使用电脑时候会经常发现,电脑无缘无故会冒出很多不知道的软件,"没见过.不是我下载的 ...
最新文章
- Ubuntu中使用WPS
- OpenCV的函数的开头部分CV_Assert的意思
- ddr5内存上市时间_辣评烩:SK海力士首发DDR5内存:频率冲上5600MHz
- cmd弄电脑滚绿代码_windows10点击“此电脑”——“管理”会出现管理员已阻止你运行此应用。有关详细信息。。。...
- java的string类_Java中的String类笔记
- php将汉字转换为gb2312编码,php实现utf-8和GB2312编码相互转换
- 输入课程信息的C语言代码,[源码和文档分享]基于C语言的课程信息管理系统
- 《博客园精华集》web标准分册第2论筛选结果文章列表
- 历时三个月,少说有三十多万字的《从零开始学习Java设计模式》小白零基础设计模式入门导读(强烈建议收藏)
- 马尔可夫链 以及 隐马尔可夫模型(HMM)
- Android Backup功能之全面实战
- 网络攻击更难预料,IoT到底是福是祸?
- 拉普拉斯矩阵(Laplace Matrix)与瑞利熵(Rayleigh quotient
- 如何查看手机APP的包名,并快速查找
- Python从入门到精通 | Python作用与定义 | 三种注释的语法(三)
- 关于fi dd ler 手机抓包 网卡地址地址_超详细的网络抓包神器 tcpdump 使用指南
- 第一个php小程序(学习)
- 图像处理中的二值化和灰度化
- 【最全面教程】搞定配置MySQL的各种幺蛾子!!
- SpringBoot2.6.x集成swagger: Failed to start bean ‘documentationPluginsBootstrapper问题解决
热门文章
- AcWing346.走廊泼水节
- vulnhub-EMPIRE: BREAKOUT
- C语言 VS2019编译器实现简易井字棋小游戏~
- 理解MATLAB GUI运行机制01--gui_mainfcn函数、GUI数据管理机制
- Linux环境宿主机进入Docker容器
- php获取token失败,php token验证失败怎么办?
- MySQL事务隔离级别以及实现原理
- 【Android开发】常见的数学函数
- 计算机二级python考试题型和分值
- python自媒体混剪视频_做自媒体混剪视频,万次播放收益150元!混剪视频剪辑技巧分享...