Rsync备份全网服务器数据企业案例
【企业案例】
某公司里有一台NFS服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他 机器上做一个周期性定时备份。要求如下:
每天晚上00点整在NFS服务器nfs01上打包备份网站程序目录等并通过rsync命令推送到备份服务器backup上备份保存(备份思路 可以是先在本地按IP地址+日期打包,然后再利用rsync推送到备份服务器上)。NFS存储服务器同Web服务器,实际工作中就是全部的服务器。
具体要求如下:
- NFS服务器nfs01和备份服务器backup的备份目录必须都为/backup
- 要备份的系统配置文件包括但不限于:
Web服务器站点目录假定为(/var/html/www)- 定时任务服务的配置文件(/var/spool/cron/root)
- 开机自启动的配置文件(/etc/rc.local)
- 日常脚本的目录(/server/scripts)
- 防火墙iptables的配置文件(/etc/sysconfig/iptables)
- 自己思考下还有什么需要备份呢
- Web服务器A访问日志路径假定为(/app/logs)
- Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
- 备份服务器上,保留每周一的所有数据副本,其它只保留6个月的数据副本
- 备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
- 需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发送给系统管理员邮箱中。
环境部署
操作系统
[root@backup ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
内核版本
[root@backup ~]# uname -r
2.6.32-642.el6.x86_64
NFS服务器脚本
#!/bin/bash
IP=`ifconfig eth0 | /bin/awk -F "[ :]+" 'NR==2{print $4}'`
[ -d /backup/$IP ] || /bin/mkdir -p /backup/$IP
if [ $(date +%w) -eq 1 ];then
date="$(date +%F)_monday"
else
date="$(date +%F)"
fi
/bin/tar zcfh /backup/$IP/config-$date.tar.gz /var/spool/cron/root /etc/sysconfig/iptables /etc/rc.local /server/scripts /etc/sysconfig/iptables &>/dev/null
/bin/tar zcf /backup/$IP/web-$date.tar.gz /var/html/www &>/dev/null
/bin/tar zcf /backup/$IP/logs-$date.tar.gz /app/logs &>/dev/null
/bin/find /backup -type f -name "*.tar.gz" | xargs md5sum > /backup/$IP/check-$(date +%F)
/usr/bin/rsync -avz /backup/ rsync_backup@192.168.200.128::backup/ --password-file=/etc/rsync.password &>/dev/null
/bin/find /backup -type f -mtime +7 | xargs rm -f
备份服务器检查脚本
#!/bin/bash
IP=`/bin/find /backup/ -type d -name "192.168.*"`
for i in $IP
do
cd $i
[ -f check-$(date +%F) ]
if [ $? -eq 0 ];then
/usr/bin/md5sum -c check-$(date +%F) &>/dev/null
if [ $? -ne 0 ];then
echo "$i校验失败"
else
echo "$i校验成功"
fi
else
echo "没有$i的校验文件"
fi
let a++
done
echo "共有$a个客户端推送成功"
/bin/find /backup -type f ! -name "*_monday" -mtime +180 | xargs rm -f
注:备份服务器需要配置rsync