0
点赞
收藏
分享

微信扫一扫

架构 -- rsync补充02


架构 – rsync补充

rsync -avz /var root@172.16.1.41: /tmp    

## rsync 参数

-a #归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
--exclude=PATTERN #指定排除不需要传输的文件
--partial #断点续传
–exclude-from=file #排除参数
--bwlimit=100 #限速传输
#指定排除文件推送内容
[root@web01 ~]# rsync -avz ./* rsync_mm@172.16.1.41::backup --exclude=1.txt
sending incremental file list
txt10
txt5
txt6
txt7

2)–bwlimit=100 限速传输

#创建一个1G的文件

[root@web01 ~]# dd if=/dev/zero of=/root/a.tt bs=100M count=10

#限速1M每秒推送 (默认以 M 为传输单位)
[root@web01 ~]# rsync -avzP 1.txt rsync_mm@172.16.1.41::backup --bwlimit=1
sending incremental file list
1.txt

–delete 数据一致,删除多余的东西
(无差异同步)

#查看客户端数据
[root@web01 ~]# ll
-rw-r--r--. 1 root root 0 Nov 19 09:17 a.txt
-rw-r--r--. 1 root root 0 Nov 19 09:17 b.txt
-rw-r--r--. 1 root root 0 Nov 19 09:17 c.txt

#删除数据
[root@web01 ~]# rm -rf a.txt
[root@web01 ~]# rm -rf b.txt

#执行数据一致同步
[root@web01 ~]# rsync -avz ./ rsync_mm@172.16.1.41::backup --delete
sending incremental file list
deleting txt4
./

sent 332 bytes received 52 bytes 768.00 bytes/sec
total size is 7,746 speedup is 20.17

#查看服务端
[root@backup backup]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 19 09:17 a.txt
-rw-r--r--. 1 root root 0 Nov 19 09:17 b.txt
-rw-r--r--. 1 root root 0 Nov 19 09:17 c.txt

#注意:
拉取时:客户端数据与服务端数据一致,以服务端数据为准(服务端有什么,客户端就有什么)
推送时:服务端数据一客户端数据一致,以客户端数据为准(客户端有什么,服务端就有什么)

二、Rsync备份案例

 主机      IP         主机角色             

web01 10.0.0.7 rsync客户端

backup 10.0.0.41 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个月的备份数据,其余的全部删除

客户端

###### 创建备份目录
#尝试获取信息

[root@web01 ~]# mkdir /backup -- 创建目录
[root@web01 ~]# hostname
web01
[root@web01 ~]# hostname -I
10.0.0.7 172.16.1.7
[root@web01 ~]# hostname -I | awk '{print $2}' -- IP地址第二个
172.16.1.7
[root@web01 ~]# date +%F -- 时间
2021-3-27

#结合信息创建目录

[root@web01 ~]# mkdir /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)

------ 第一种格式

[root@web01 ~]# mkdir /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`

------ 第二种格式

#查看backup里面内容

[root@web01 ~]# ll /backup/
drwxr-xr-x. 2 root root 6 Nov 19 10:00 web01_172.16.1.7_2021-3-27

打包数据

#打包文件

第一种方式

#打包
[root@web01 ~]# tar zcf conf.tar.gz /var/log/maillog

#移动

[root@web01 ~]# mv conf.tar.gz /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)/

第二种方式

#直接打包到目录
[root@web01 ~]# tar czf /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`/conf.tar.gz /var/log/maillog

推送文件

[root@web01 ~]# rsync -avz /backup/ rsync_mm@172.16.1.41::backup

将以上步骤写成脚本

[root@web01 ~]# vim client.sh 
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2.创建表备份目录
mkdir $SRC -p

#3.打包文件
cd /var && tar zcf $SRC/conf.tar.gz ./log/maillog

#4.推送文件
export RSYNC_PASSWORD=123
rsync -az $DIR/ rsync_mm@172.16.1.41::backup


# 5.将脚本加入定时任务
[root@web01 ~]# crontab -e

#每天凌晨1点执行备份脚本
0 1 * * * /bin/bash /root/client.sh

6)只保留七天 的数据

#模拟30天数据
[root@web01 ~]# for i in {1..30};do date -s 2021/03/$i;sh client.sh;done

#删除七天前的数据
[root@web01 ~]# find /backup/ -type d -mtime +7 | xargs rm -rf

客服端完整脚本

客户端先判断文件是否存在
[root@web01 ~]# vim client.sh
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2.创建表备份目录
[ -d $SRC ] || mkdir $SRC -p

#3.打包文件
[ -f $SRC/conf.tar.gz ] || cd /var && tar zcf $SRC/conf.tar.gz ./log/maillog

#4.推送文件
export RSYNC_PASSWORD=123
rsync -az $DIR/ rsync_mm@172.16.1.41::backup

#5.删除七天前数据
find $DIR/ -type d -mtime +7 | xargs rm -rf

web客户端脚本

[root@web01 ~]# vim client.sh 
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2.创建表备份目录
[ -d $SRC ] || mkdir $SRC -p

#3.打包文件
cd /var && tar zcf $SRC/conf.tar.gz ./log/maillog

#4.生成校验码
md5sum $SRC/conf.tar.gz > $SRC/flag

#5.推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ rsync_mm@172.16.1.41::backup

#6.删除七天前数据
find $DIR/ -type d -mtime +7 | xargs rm -rf

服务端

##服务端

1)部署rsync服务端
2)客户端脚本加入生成校验码的操作

校验文件

[root@backup backup]# md5sum -c web01_172.16.1.7_2021-03-27/flag
/backup/web01_172.16.1.7_2021-03-27/conf.tar.gz: OK


[root@backup backup]# md5sum -c /backup/*_$(date +%F)/flag

服务端使用邮件发送消息

1.服务端配置邮件功能vim /etc/mail.rc
1 set from=171554782@qq.com #更改为你的邮箱
2 set smtp=smtps://smtp.qq.com:465
3 set smtp-auth-user=171554782@qq.com #更改为你的邮箱
4 set smtp-auth-password=nvaeranunveledja #更改为你的邮箱密文(查看复制)
5 set ssl-verify=ignore
6 set nss-config-dir=/etc/pki/nssdb/

最正确的邮件发送
set from=1715554782@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1715554782
set smtp-auth-password=mmrqawgxtcejihba
set smtp-auth=login
[root@backup ~]# echo hello word | mail -s " title" 1715554782@qq.com


保存退出;执行命令:输入想发送的内容,

mail -s "what are you doing?" 1710724925@qq.com < 1.txt

2.测试发送邮件
[root@backup ~] mail -s "what are you doing?" 171554782@qq.com <1.txt

服务端脚本

[root@backup ~]# vim client.sh 
服务端脚本
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2.校验文件
md5sum -c $DIR/*_$DATE/flag > $DIR/result.txt

#3.将校验结果发送给管理员邮箱
mail -s "$DATE备份文件 校验结果" 1715554782@qq.com < $DIR/result.txt

#4.删除6个月之前的数据
find $DIR/ -type d -mtime +180 | xargs rm -rf

6)将服务端脚本加入定时任务
[root@backup ~]# crontab -e

#服务端每天12点10分将校验备份结果发给管理员
10 12 * * * /bin/bash /root/server.sh &> /dev/null

了解 – Rsync结合inotify

1.安装inotify  (inotify-tools软件包)软件包

2.常用参数
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载

3.测试命令

/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup

4.实时备份脚本编写

1粗略版(推荐,简洁直接)
[root@backup ~]# vim rsyn-inotify.sh
#!/bin/bash
dir=/backup
export RSYNC_PASSWORD=123
/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_mm@172.16.1.41::backup =/etc/rsync.passwd >/dev/null 2>&1
done &


举报

相关推荐

0 条评论