全网备份案例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全网备份案例相关的知识,希望对你有一定的参考价值。

50台集群全网数据备份项目方案

1、需要备份的文件或目录(原则上,只要是运维人员写入或更改的数据,都需要备份):

/var/spool/cron/root、/etc/rc.local、/etc/sysconfig/iptables、/var/www/html、/app/logs

2、为了规范化,每台web服务器进行本地备份时都备份到/backup目录下

3、每台web服务器进行本地备份时,都备到/backup下以本机ip地址命名的目录中

4、打的tarball文件名中需要包含执行当天的日期

5、统一存储备份数据的服务器通过rsync daemon方式提供存储备份数据的目录/backup

6、由于web服务器本地的存储空间有限,需要将超过7天的备份数据删除

7、为了方便的知道每次备份是否成功,我们需要做如下操作:

在每台web服务器上检查备份是否成功

在存储备份数据的服务器上检查备份是否推送成功,并发送邮件至管理员邮箱

8、由于备份服务器空间有限,需要删除超过180天的备份数据,但每周六的备份数据需要永久保留

 

实施步骤

1、在rsync备份服务器上,配置rsync服务,客户端实现推送(backup服务器)

2、在客户端nfs服务器上,实现打包、推送、删除、定时任务推送(前端业务服务器,例如:web服务器)

 

打包

在客户端上打包以下目录到backup目录下面:     

#要打包链接文件必须加上h,才能将链接的源文件打包

cd /

tar zcvfh /backup/backup_$(date +%F).tar/gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html  app/logs

 

推送

rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password

 

删除

find /backup/ -type f -name "*.tar.gz" -mtime+7    #先查找,条件指定越多,越不容易删错

find /backup/ -type f -name "*.tar.gz" -mtime+7|xargs rm -f

 

编写脚本

在命令测试成功后,写入服务器上统一存放脚本的目录下

mkdir -p /server/scripts

cd /server/scripts/

vim bak.sh  填写如下内容:

#每条命令后面跟 &&\表示前面的命令执行成功,再执行下一条,因为要做定时任务,所以把v参数去掉

#因为要推送的客服端有多台,为了要分清哪些文件是属于哪台机的,所以要获得本机的IP地址来命名文件。

 

     IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

#这一个判断将要保留的周六的文件特殊命名,以便在备份服务器上永久保留

     if [ $(date +%w) -eq 0 ];then

         #每天00点备份,实际上文件内容是备份的前一天的。

         Time="week_$(date +%F_%w -d "-1day")"

     else

         #实际工作当中没有这么严格,都是以日期命名,在每天晚上的23点多一些就开始备份

         Time=$($(date +%F -d "-1day")        #或者做完某个操作后备份。

     fi

     #这样不是很好,每次运行该脚本会创建这样的目录?以后自己写脚本

     mkdir $Path/$IP/ -p             

     cd / &&\                                 

#该例核心是打包完成后,给打包的文件创建md5sum指纹写入到标记文件当中,推送的时候,一起推送过去。在服务器上/backup目录,每台机IP命名的目录,存放每台机的备份

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html  app/logs &&\

     #touch /backup/flag_$(date +%F).log &&\  

     #打完包后,在本地的目录里面创建一个flag标志,将来在备份服务器上,看是否有这个标志,来判断是否备份成功

     #光打标记还不够,还需要为该标志文件做一个指纹,使用md5sum命令来完成。

     #md5sum 可以为所有的文件做指纹标识,包括二进制文件,每一个文件的md5sum标记是不一样的。

     #所以下面直接使用md5sum为打包的文件做指纹,并记录在标记文件中,将来在备份的服务器上,再使用md5sum为该文件做标记,与标记文件中的内容一样

     #就说明在该文件在传输过程当中没有被篡改。

md5sum $Path/$IP/backup_$Time.tar.gz >/backup/flag_$(date +%F).log  &&\         

rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password  &&\

find /backup/ -type f -mtime +7 \(-name "*.log" -o -name "*.tar.gz" \)|xargs rm -f    

#find命令默认多条件是and,所以这里使用 -o 或者

 

保存退出,测试脚本,测试OK后,可以创建定时任务用于每天都执行。

创建定时任务

crontab -e

00 00 * * * /bin/sh    /server/scripts/bak.sh >/dev/null 2>&1

crontab -l    #查看

在rsync备份服务器上,做检查,发邮件给管理员

     1、保留每周6的文件,可以在客户端的脚本当中,将每周6的文件特殊命名。

     2、删除的时候文件名里有-6这个数字,就保留。

     在备份服务器上创建脚本文件,所以服务器脚本存放的路径都要统一

     mkdir -p /server/script

     cd /server/script

     vim  del_date.sh       #写入以下内容

     find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f

     保存退出,删除就解决了

 

检查数据完整

#比较标志文件里的md5值,一样,就会输出ok字样:

md5sum -c /backup/172.16.4.31/flag_week_2016-04-30.log

通过查找文件来比对,错误和成功的信息都写入结果文件里面:

find /backup/ -type f -name "$(date +%F -d "+1day" )*.log" | xargs md5sum -c >>$(date +%F)_result.log 2>&1

将保存的结果发邮件:

     mail -s "标题" 发给谁 <内容来源于哪

     mail -s "$(date +%F) bak result" [email protected]<$Path/$(date +%F)_result.log

这样的结果比较粗焅,可以将成功的记录底纹变成绿的,不成功的文字底纹变成红的,再发送出去。

 

输出颜色文字

==================================

使用echo 显示输出文字的颜色

     -e   启用转义符

     ctrl  用\033来表示

     前景色用数字3来引导:编号31-37

     背景色用数字4来引导:编号41-47

     字体格式,使用一位数字来表示

     echo -e "\033[ 字体;前景色;背景色m要修饰的内容\033[0m"

     echo -e "\033[31m显示的内容\033[0m"

     后面的\033[0m表示颜色标记结束

==================================

然后将命令整理,放在脚本里,再创建计划任务,每天都检查备份是否成功

发送邮件

linux发邮件2种常见客户端命令:

1、mail命令语法(推荐)

     mail -s "标题"  邮件地址 <文件

     mail -s "oldboy" [email protected]< /etc/hosts

2、echo "正文" | mail -s "标题" [email protected]

     mailq              #查看邮件发送队列

     邮件服务发送的端口: smtp 25  接收:pop3 110

linux没有配置邮件服务器与DNS解析之前,通过命令发的邮件,会被当做垃圾邮件给屏蔽了,所以只有在正式的邮件服务器才这样发邮件

 

解决办法:

配置mail使用外部SMTP发邮件

通过修改配置文件可以使用外部SMTP服务器,可以达到不使用sendmail/postfix等内部邮件服务;

而用外部的smtp服务器送邮件到目的地,使用外部邮箱的时候,邮箱要将 smtp授权开启,使用第三方客户端发邮件smtp授权后,可以看到邮件下面的smtp地址

修改/etc/mail.rc文件,在最后一行加入

set [email protected] smtp=smtp.qq.com smtp-auth-user=308944299 smtp-auth-password=邮箱第三方授权密码 smtp-auth=login

说明:

     from是发送的邮件地址

     smtp是发送的外部smtp服务器地址

     smtp-auth-user是外部smtp服务器认证的用户名

     smtp-auth-password是外部smtp服务器认证的用户密码

     awk '{print ["这里输入什么打印的就是什么"] $1}'


以上是关于全网备份案例的主要内容,如果未能解决你的问题,请参考以下文章

全网备份案例

全网备份案例

全网备份案例

项目-第六次全网备份上机考试

全网备份项目解决方案实例

公司实现全网备份项目:(rsync+定时任务)