RSYNC实用案例
客户端需求:
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
服务端需求:
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
1.客户端运行脚本
#!/bin/bash
DIR=/backup
IP=$(hostname -i)
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
#客户端需求:
#1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
[ -d $SRC ] || mkdir $SRC
#2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
tar -czf $SRC/${TIME}.backup.tar.gz `find /etc/ -type f` &>/dev/null
#建立文件校验文件
md5sum /$SRC/${TIME}.backup.tar.gz >/$SRC/${TIME}.md5sum
#3.客户端最后将备份的数据进行推送至备份服务器
rsync -avz /backup/ rsync_backup@rsync::backup --password-file=/etc/rsync.passwd
#4.客户端每天凌晨1点定时执行该脚本
# 通过 crontab -e 设置定时任务: 0 1 * * * /bin/bash /root/kehuduan.sh
#5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
find $DIR/ -mtime +7 |xargs rm -rf
2.服务端运行脚本
#!/bin/bash
DIR=/backup
IP="172.16.1.31"
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
#服务端需求:
#1.服务端部署rsync,用于接收客户端推送过来的备份数据
rpm -q rsync &>/dev/null
[ $? -ne 0 ]|| yum install rsync -y &>/dev/null
#2.服务端需要每天校验客户端推送过来的数据是否完整
md5sum -c $SRC/${TIME}.md5sum >$SRC/result.txt
#3.服务端需要每天校验的结果通知给管理员
mail -s "${TIME}备份文件 校验结果" 446010175@qq.com <$SRC/result.txt &>/dev/null
#4.服务端仅保留6个月的备份数据,其余的全部删除
find $DIR/ -mtime +180 |xargs rm -rf
3.rsync结合inotify案例(客户端)
3.1 安装inotify
[root@web01 ~]# yum -y install inotify-tools
3.2 inotify的参数
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3.3 测试命令
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup
# inotify 自动监测脚本,实现监控/backup目录以及无差异同步(重要)
[root@backup ~]# vim rsyn-inotify.sh
#!/bin/bash
dir=/backup
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
cd $dir && rsync -az -R --delete . rsync_backup@172.16.1.31::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1
done &
3.4 客户端实现
#!/bin/bash
DIR=/backup
IP=$(hostname -i)
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
INOTIFY_DIR=/backup/
# 自动监测命令,检查目标目录是否有更新
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib ${INOTIFY_DIR} |while read line
do
#已知确认的是每日产生一个打包压缩文件,若已产生文件,就不需要循环监测(只监测一次)
if [ -f $SRC/${TIME}.backup.tar.gz ];then
continue
fi
#客户端需求:
#1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2021-08-03
[ -d $SRC ] || mkdir $SRC
#2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2021-08-03
tar -czf $SRC/${TIME}.backup.tar.gz `find /etc/ -type f` &>/dev/null
#建立文件校验文件
md5sum /$SRC/${TIME}.backup.tar.gz >/$SRC/${TIME}.md5sum
#3.客户端最后将备份的数据进行推送至备份服务器
rsync -avz /backup/ rsync_backup@rsync::backup --password-file=/etc/rsync.passwd
#4.客户端每天凌晨1点定时执行该脚本
# 通过 crontab -e 设置定时任务: 0 1 * * * /bin/bash /root/kehuduan.sh
#5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
find $DIR/ -mtime +7 |xargs rm -rf
done &
3.5 服务端实现??
#!/bin/bash
DIR=/backup
IP="172.16.1.31"
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
INOTIFY_DIR=/backup/
#服务端需求:
#1.服务端部署rsync,用于接收客户端推送过来的备份数据
rpm -q rsync &>/dev/null
[ $? -ne 0 ]|| yum install rsync -y &>/dev/null
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib ${INOTIFY_DIR} | while read line
do
echo $line
if [ -f $SRC/result.txt ];then
continue
fi
if [ -d $SRC ];then
if [ ! -f $SRC/${TIME}.md5sum ];then
continue
fi
fi
#2.服务端需要每天校验客户端推送过来的数据是否完整
#3.服务端需要每天校验的结果通知给管理员
md5sum -c $SRC/${TIME}.md5sum >$SRC/result.txt
if [ $? -ne 0 ];then
echo "$SRC 文件校验失败" >>$SRC/result.txt
else
mail -s "${TIME}备份文件 校验结果" 446010175@qq.com <$SRC/result.txt &>/dev/null
fi
#4.服务端仅保留6个月的备份数据,其余的全部删除
find $DIR/ -mtime +180 |xargs rm -rf
done