我们都知道对于企业而言,数据是很重要的,随着大数据的到来,企业越来越重视数据的可靠性,所以一般企业对重要数据都会做备份,有的还有异地备份等等。
下面来模拟一下企业数据备份实践。
情景:领导说:现在有台web服务器A,相关数据很重要,你把该台上的数据定时备份到B服务器上。
作为运维人员的你,会做什么思考?
要知道我们最终的目的是要做好数据备份,备份哪些数据、如何实行备份则需要运维人员去思考。
web服务器需要备份的数据如下,可能还有其他的,其他服务器如数据库,NFS等等备份策略一样,本文以web服务器为例
站点数据
站点访问日志文件
脚本文件-用于维护
系统定时任务
防火墙
系统启动文件
7.....
例如以上需要备份如下
/var/html/www
/app/logs
/etc/rc.local
/etc/sysconfig/iptables
可以直接将etc目录做备份,etc中有系统相关配置文件
/var/spool/cron/root
思路:我们可以先将本地要备份的数据打包,统一放到本地的一个目录,然后再将该目录数据备份到备份服务器上,本地数据保留7天,
备份服务器数据保留180天,每周一的数据不删除。
由于公司服务器可能不止一台,我们可以将打包的数据放到以IP命名的目录,然后推送到备份机上.
rsync配置请参考我的另一篇
我这里是将相关操作放到脚本中。
vim /server/scripts/bakup.sh
#!/bin/sh
export PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
serverip=192.168.132.20
dst=tuwei
src=/backup
log=/app
www=/var/html
script=/server
usr=rsync_backup
file=/etc/rsync.password
ip=`ifconfig |awk 'NR==2{print $2}'|sed 's/^[a-z]*[^0-9]//'`
mkdir -p /backup/$ip
if [ $(date +%w) -eq 2 ];then
date="$(date +%F -d "-1day")_week1"
else
date="$(date +%F -d "-1day")"
fi
################ bak
cd /&& \
tar zcfh $src/$ip/sys_config_${date}.tar.gz ./etc ./server/scripts ./var/spool/cron&& tar zcf $src/$ip/www_${date}.tar.gz ./var/html/www \
&& tar zcf $src/$ip/logs_${date}.tar.gz ./app/logs
#############check the data
find $src -type f -name "*.tar.gz"|xargs md5sum >$src/$ip/flag_${date}
#######################the bak is full,the follwing is putting the data to the server by tuwei
cd $src && rsync -az ./ $usr@$serverip::$dst --password-file=$file
##########delete the data of 7day ago
find /backup -type f -name "*.tar.gz" -mtime +7|xargs rm -f
讲下脚本内容,最开始是定义一些变量,存放要备份的相关目录或后面需要用到的,目的是后续相关文件有改变,只需要修改开头的变量就可以了,不必在脚本中每一处都修改。
那个获取IP地址的,经测试centos,ubuntu及redhat都适用。
后面是创建以IP命名的目录,这样在后续推送的时候可以做到以IP为目录,方便后续维护。每天零点进行备份,由于每周一的数据保留,所以脚本中有对星期做了判断,同时,数据在推送前,先在本地利用MD5生成"指纹",后续在备份服务器进行校验,保证数据完整性,没有被更改。
测试前:
客户端
[root@backupclient backup]# pwd
/backup
[root@backupclient backup]# ll
total 0
[root@backupclient backup]#
服务端
[root@backupserver backup]# pwd
/backup
[root@backupserver backup]# ll
total 0
[root@backupserver backup]#
测试过程
执行脚本 [root@backupclient scripts]# sh bakup.sh
测试结果
客户端
[root@backupclient backup]# ll
total 16
-rw-r--r-- 1 root root 245 Jun 2 14:25 flag_2018-06-01
-rw-r--r-- 1 root root 115 Jun 2 14:25 logs_2018-06-01.tar.gz
-rw-r--r-- 1 root root 915 Jun 2 14:25 sys_config_2018-06-01.tar.gz
-rw-r--r-- 1 root root 118 Jun 2 14:25 www_2018-06-01.tar.gz
服务端
[root@backupserver backup]# cd 192.168.132.20/
[root@backupserver 192.168.132.20]# ll
total 16
-rw-r--r-- 1 root root 245 Jun 2 14:25 flag_2018-06-01
-rw-r--r-- 1 root root 115 Jun 2 14:25 logs_2018-06-01.tar.gz
-rw-r--r-- 1 root root 915 Jun 2 14:25 sys_config_2018-06-01.tar.gz
-rw-r--r-- 1 root root 118 Jun 2 14:25 www_2018-06-01.tar.gz
测试脚本没有问题,可以采用定时任务,每天凌晨进行备份。
crontab -e
00 00 * * * /bin/sh /server/scripts/bakup.sh >/dev/null 2 &>1
下面是备份服务器端的相关配置(开发脚本对备份数据进行校验、删除及邮件报警功能)。
首先配置邮件。
这里利用第三方邮件服务进行发送邮件,如网易163邮箱。
echo -e "set from=xxx@163.com smtp=smtp.163.com set smtp-auth-user=xxx smtp-auth-password=xxxxx smtp-auth=login" >>/etc/mail.rc
这里大家只需要修改用户名,邮箱地址及邮件客户端授权码即可。
vim /server/scripts/checkbak.sh
#!/bin/bash
export LANG=en
###########check the data
find /backup -name "flag_$(date +%F -d "-1day")*"|xargs md5sum -c &>/tmp/mail_$(date +%F).log
if [ $(date +%w) -eq 2 ];then
date="$(date +%F -d "-1day")_week1"
else
date="$(date +%F -d "-1day")"
fi
#########delete the data about 180 days ago,but do not delete the week1 data####
find /backup -type f -name "*.tar.gz" -a ! -name "*week1*" -mtime +180|xargs rm -f
mail -s "backup $(date)" xxxxx@qq.com </tmp/mail_$(date +%F).log
这样,每天数据备份情况会通过邮件发送给相关人员,通过邮件就可以知道数据是否备份完整,有无篡改。
通过定时任务,每天6点执行
crontab -e
00 06 * * * /bin/sh /server/scripts/checkbak.sh >/dev/null 2>&1
到此,企业全网数据备份方案都可以以此来做参照进行。
转载于:https://blog.51cto.com/tuwei/1918497