总览
客户端需求
1,客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
5.客户端每天凌晨1点定时执行该脚本
服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
注意:所有服务器的备份目录必须都为/backup
客户端要求(写成脚本)
[root@nfs backup]# cat /scripts/clinet_push_data.sh
#!/usr/bin/bash
#客户端推送备份的数据至备份服务器 by oldxu
#1.将目录需要用的主机名,IP,时间,定义为变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Host=$(hostname)
Addr=$(ifconfig eth1 | awk '/inet / {print $2}')
Time=$(date +%F)
Path=/backup
DirName="${Host}_${Addr}_${Time}"
#2.我们要准备一个目录
mkdir -p "$Path/$DirName"
#3.将文件备份到该目录中
cd / && \
tar czf $Path/$DirName/sys.tar.gz etc/rc.local etc/fstab && \
tar czf $Path/$DirName/other.tar.gz etc/hosts scripts && \
md5sum $Path/$DirName/*.tar.gz > $Path/$DirName/check_flag_$Time
#4.使用rsync命令进行运输
export RSYNC_PASSWORD=123456
rsync -avz $Path/rsync_backup@172.16.1.41::backup
#5.保留本地7天的数据
find $Path -type d -mtime +7 | xargs rm -rf
服务端要求(脚本)
[root@backup ~]# cat /scripts/check_clinet_data.sh
#!/usr/bin/bash
# 检查客户端推送的数据 by oldxu
#1.将目录需要用的主机名,IP,时间,定义为变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Time=$(date +%F)
Path=/backup
#2.找到当天的check_flag文件,校验数据是否是完整的,并且将校验结果存储至某个文件中
find $Path/ -type f -name "check_flag_$Time" | xargs md5sum -c > $Path/result_$Time
#3.将校验的结果通知给管理人员
mail -s "Rsync Backup $Time" #收件人邮箱 <$Path/result_$Time
#4.服务端仅保留6个月的备份数据,其余的全部删除
find $Path -type d -mtime +180 | xargs rm -rf
配置发件人的邮箱账号密码
[root@backup ~]# vim /etc/mail.rc
set from=邮箱账号
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=邮箱账号
set smtp-auth-password=#客户端授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/