rsync实例

rsync实例

Rsync备份案例

已知3台服务器主机名分别为web01、backup 、nfs主机信息见下表:

角色 外网IP(NAT) 内网IP(LAN) 主机名
WEB eth0:10.0.0.7 eth1:172.16.1.7 web01
NFS eth0:10.0.0.31 eth1:172.16.1.31 nfs01
Rsync eth0:10.0.0.41 eth1:172.16.1.41 backup

客户端需求
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个月的备份数据,其余的全部删除

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

建议备份的数据内容如下 (孟诗雨不接受建议)

#1.开机自启动配置文件  设备挂载配置文件  本地内网配置文件    (系统配置文件)
/etc/rc.local       /etc/fstab      /etc/hosts              

#2.cron定时任务        firewalld防火墙       脚本目录      (重要目录)
/var/spool/cron/    /etc/firewalld     /server/scripts

#3.系统日志文件
/var/log/   //系统安全日志、sudo日志、内核日志、rsyslog日志

#4.应用程序服务配置文件 nginx、PHP、mysql、redis.....

客户端优化脚本

孟诗雨的思路

'1.我要备份什么?
	/etc/fstab /var/spool/cron/USERNAME   /server/scripts
'2.我要怎么备份?
	/backup/主机名_ip地址_时间  命名的目录中
'3.我要备份到哪?
	rsync备份服务器   172.16.1.41
	
	
得到了自己想要的
就可以写脚本了
脚本位置可以这么创建:
mkdir /server/scripts -p

vim /server/scripts/client_push_data.sh

`#!/bin/bash  开头写这个 不写这个会出现解释器不知道解释哪个文件的问题

客户端的优化脚本

[root@nfs ~]# for i in {1..30};do date -s 2018/12/$i;sh /server/scripts/client_push_data.sh ;done
#批量修改时间。并执行脚本,产生数据文件(这个命令是为了修改时间到18年,好测试是否成功)

[root@nfs ~]# cat /server/scripts/client_push_data.sh   (vim编辑后的脚本 首先要创建这个目录)

#!/bin/bash (开头写这个 不写这个会出现解释器不知道解释哪个文件的问题)
#1.定义变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
SRC=/backup
HOST=$(hostname)
ADDR=$(ifconfig eth1|awk 'NR==2 {print $2}')
DATE=$(date +%F)
DEST=${HOST}_${ADDR}_${DATE}

#2.创建目录
[ -d $SRC/$DEST ] || mkdir -p $SRC/$DEST (这句话的意思是判断是否有这个文件 如果有后面就不执行了 直接执行后面的也可以)

#3.备份文件
cd / && \
[ -f $SRC/$DEST/sys.tar.gz ] ||  tar czf $SRC/$DEST/sys.tar.gz etc/fstab etc/passwd && \
[ -f $SRC/$DEST/other.tar.gz ] || tar czf $SRC/$DEST/other.tar.gz var/spool/cron/ server/scripts && \

tar: Removing leading `/' from member names(就是出现了这句话 前面才加那一串)
'[ -f $SRC/$DEST/sys.tar.gz ](这句话的意思是判断是否有这个文件 如果有后面就不执行了 直接执行后面的也可以)一般一天执行一次不会出现这种情况 只有测试才会          

#4.使用md5打标记
[ -f $SRC/$DEST/flag_$DATE ] || md5sum $SRC/$DEST/*.tar.gz  > $SRC/$DEST/flag_$DATE 

#4.本地推送到备份服务器
export RSYNC_PASSWORD=123456 (有了这个命令就不用反复输密码了)
rsync -avz $SRC/$DEST rsync_backup@172.16.1.41::backup

#5.保留本地最近7天的数据
find $SRC/ -type d -mtime +7|xargs rm -rf 

这是孟诗雨对md5sum偷偷做的测试,事实证明偷偷打开文件会被发现

[root@nfs ~]# md5sum /etc/passwd > t
[root@nfs ~]# md5sum -c t
/etc/passwd: OK
cp /etc/passwd ./
[root@nfs ~]# md5sum passwd
a8d364eaf13039245b2ead5b1ac4d8fa passwd
md5sum passwd > t
[root@nfs ~]# vim passwd (打开并修改一下)
[root@nfs ~]# md5sum -c t
passwd: FAILED (果然失败了)
md5sum: WARNING: 1 computed checksum did NOT match

服务端脚本优化

服务端脚本

服务端操作如下:

1.配置邮件
[root@backup ~]# yum install mailx -y
[root@backup ~]# vim /etc/mail.rc    (这段加在最后面)
set from=912418275@qq.com  '发送方的邮箱
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=912418275@qq.com
set smtp-auth-password=wwqyusxzacugbdhh   (自己邮箱设置的码)
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

2.验证能否成功的发送邮件
[root@backup ~]# mkdir /server/scripts -p
[root@backup ~]# cat /server/scripts/check_client_data.sh
#!/bin/bash
#1.定义变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
SRC=/backup
DATE=$(date +%F)

#1.使用md5进行校验,并保存校验的结果
md5sum -c $SRC/*_$DATE/flag_$DATE > $SRC/result_$DATE

#2.将保存的结果文件发送给管理员
mail -s "Rsync Backup $DATE" 912418275@qq.com <$SRC/result_$DATE

#3.保留最近180天的数据
find $SRC/ -type d -mtime +180|xargs rm -rf
手动校验 把今天校验的文件发送给管理员就行
[root@backup ~]# ls /backup/nfs_172.16.1.31_2019-09-04/   #查看收到的文件
cron  flag_2019-09-04  flog_2019-09-04  fstab  other.tar.gz  scripts  sys.tar.gz
[root@backup ~]# md5sum -c /backup/nfs_172.16.1.31_2019-09-04/flog_2019-09-04   #检查是否被打开过
/backup/nfs_172.16.1.31_2019-09-04/other.tar.gz: OK
/backup/nfs_172.16.1.31_2019-09-04/sys.tar.gz: OK
[root@backup ~]# md5sum -c /backup/nfs_172.16.1.31_2019-09-04/flag_2019-09-04 > /backup/result_$(date +%F)  #把需要的文件放入到一个文件夹里带上时间戳发给管理员
[root@backup ~]# cat /backup/result_2019-09-04 
/backup/nfs_172.16.1.31_2019-09-04/other.tar.gz: OK
/backup/nfs_172.16.1.31_2019-09-04/sys.tar.gz: OK
[root@backup ~]# sh /server/scripts/check_client_data.sh 
手动执行这个脚本 就会收到邮件啦
'客户端编写定时任务,让备份每天凌晨1点执行
[root@nfs01 ~]# crontab -l
00 01 * * * /bin/bash /server/scripts/backup_rsync.sh &>/dev/null
'服务端编写定时任务脚本
[root@backup backup]# crontab -l
00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null

如何备份多台服务器?

[root@web01 ~]# rsync -avz root@172.16.1.31:/server  /
[root@web01 ~]# sh /server/scripts/client_push_data.sh
posted @ 2020-01-02 20:18  干瘪的柠檬  阅读(143)  评论(0)    收藏  举报