rsync + cron

备份案例

使用3台服务器(客户端)主机名分别为web01、backup 、nfs主机信息见下表:

角色 外网IP(WAN) 内网IP(LAN) 主机名
rsync客户端 eth0:10.0.0.7 eth1:172.16.1.7 web01
rsync客户端 eth0:10.0.0.8 eth1:172.16.1.8 web02
rsync客户端 eth0:10.0.0.31 eth1:172.16.1.31 nfs01
rsync服务端 eth0:10.0.0.41 eth1:172.16.1.41 backup

注意:所有服务器的备份目录必须都为/backup

客户端需求

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
因为脚本中记录了环境变量中的密码,所以要记得授权脚本为700

vim /etc/profile.d/bfpzwj.sh
#!/bin/bash
#主机名: 
H=$(hostname)
#内网IP: 
IP=$(hostname -I|awk '{print $2}')
#备份到哪: (前面/加后面不加)
na=/backup
#当前时间: 
#年月日 时分
C=$(date +%F-%R)
#年月日
D=$(date +%F)
#年月日时分秒
E=$(date +%F-%T)
#备份哪个目录:(前后都不要加根) 
A='etc'

bf=${na}/${H}_${IP}_${D}
[ -d $bf ]||mkdir -p $bf
#校验

#多次调用变量的目的,简化命令行,避免太长的命令行执行不了

2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02

cd /$A && cd .. && \
tar zcf ${bf}/${H}_${IP}_${D}.$A.tgz $A
md5sum ${bf}/${H}_${IP}_${D}.$A.tgz >${bf}/md5sum.passwd

3.客户端最后将备份的数据进行推送至备份服务器

export RSYNC_PASSWORD=123
rsync -az ${bf}/${H}_${IP}_${D}.$A.tgz bck@10.0.0.41::backupmk

4.客户端每天凌晨1点定时执行该脚本

crontab -e

# 备份重要配置文件 编辑时间 编辑人:xxx
00 1 * * * /usr/bin/sh /etc/profile.d/bfpzwj.sh >>/dev/null

5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

find $na -mitime +7 ! -name '$na' |xargs rm -rf

客户端总结

备份频率增加的话只需要修改变量cde,配合while循环可实现高频率定时备份

vim /etc/profile.d/bfpzwj.sh
#!/bin/bash
#主机名: 
H=$(hostname)
#内网IP: 
IP=$(hostname -I|awk '{print $2}')
#备份到哪: (前面/加后面不加)
na=/backup
#当前时间: 
#年月日 时分
C=$(date +%F-%R)
#年月日
D=$(date +%F)
#年月日时分秒
E=$(date +%F-%T)
cde=$D
#备份哪个目录:(前后都不要加根) 
A='etc'
#以传参的方式定义一个目录
bf=${na}/${H}_${IP}_${D}
[ -d $bf ]||mkdir -p $bf
#校验
#清理

cd /$A && cd .. && \
tar zcf ${bf}/${H}_${IP}_${cde}.$A.tgz $A

cd ${bf} && \
md5sum ${H}_${IP}_${cde}.$A.tgz >${H}_${IP}_${cde}.$A.tgz.md5sum.passwd

export RSYNC_PASSWORD=123
rsync -az ${na}/ bck@10.0.0.41::backupmk

find $na -mitime +7 ! -name '$na' |xargs rm -rf

crontab -e
# 备份重要配置文件 编辑时间 编辑人:xxx
00 1 * * * /usr/bin/sh /etc/profile.d/bfpzwj.sh >>/dev/null

服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据

1.yum install -y rsync
2.vim /etc/rsyncd.conf
3.[root@web01 ~]# useradd www -s /sbin/nologin -M

4.[root@web01 ~]# mkdir /backup
5.[root@web01 ~]# chown rsync. /backup/

6.[root@web01 ~]# vim /etc/rsync.passwd
bck:123
或
[root@web01 ~]# echo bck:123 >/etc/rsync.passwd      (虚拟用户名:密码,必须要做)
7.[root@web01 ~]# chmod 600 /etc/rsync.passwd
8. systemctl start rsyncd

2.服务端需要每天校验客户端推送过来的数据是否完整

md5sum 可以对文件进行校验,校验码记录了文件的位置,-c 可以检查文件的完整性
-c :校验

md5sum a.tar.gz > md5.txt  #生成校验码
md5sum -c md5.txt		  #校验文件的完整性(可以认为是 重新对指定的文件生成检验码,然后跟密码文件对比)

md5sum 后面在脚本里面 不是只能跟相对路径,也可以跟绝对路径
md5sum -c 后面只能使用相对路径

3.服务端需要每天校验的结果通知给管理员

#配置邮箱
备份频率增加的话只需要修改变量cde,配合while循环可实现高频率定时备份

vim /etc/profile.d/bfpzwj.sh
#!/bin/bash
#主机名: 
H=$(hostname)
#内网IP: 
IP=$(hostname -I|awk '{print $2}')
#备份到哪: (前面/加后面不加)
na=/backup
#当前时间: 
#年月日 时分
C=$(date +%F-%R)
#年月日
D=$(date +%F)
#年月日时分秒
E=$(date +%F-%T)
cde=$D
#备份哪个目录:(前后都不要加根) 
A='etc'

bf=${na}/${H}_${IP}_${cde}

#校验1,适用于服务端上 /backup目录下 一个目录一台主机的 当天的 备份校验(频率可以增加)
校检频率增加的话只需要修改变量cde,配合while循环可实现高频率定时校检

cd $na/web01_172.16.17_${cde}
md5sum -c web01_172.16.17_${cde}.$A.tgz.md5sum.passwd |
mail -s 'web01_172.16.17_${cde}_rsync的校验结果' 424525@qq.com

#校验2,适用于服务端上 /backup目录下 多个目录多台主机 当天的 备份校验 (不显示IP)
#cd $na && \
#md5sum -c ./*${cde}.$A.tgz.md5sum.passwd |
#mail -s 'web01_172.16.17_${cde}rsync的校验结果' 424525@qq.com

#校验2,适用于服务端上 /backup目录下 多个目录多台主机 当天的 备份校验
#find $na -name '*${cde}.$A.tgz.md5sum.passwd' |xargs md5sum -c |
#mail -s 'web01_172.16.17_${cde}rsync的校验结果' 424525@qq.com

#清除
find $na ! -mtime -180 ! -name 'backup'|xargs rm -rf

crontab -e
#校验备份结果 写入时间2020-5-8 9:00 xxx
00 6 * * * /usr/bin/sh /etc/profile.d/bfpzwj.sh >>/dev/null

# crontab里多个闹钟的定时最好不要相同,也会存在某些命令不执行的情况,也会存在跨点的不执行
# 邮件频率太高(每分钟),会被限制(2小时左右)
posted @ 2020-05-13 21:49  看萝卜在飘  阅读(212)  评论(0编辑  收藏  举报