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