备份案例
使用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小时左右)