• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
2022
博客园    首页    新随笔    联系   管理    订阅  订阅

架构 -- 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  &
posted @ 2021-03-27 21:06  博客之记  阅读(37)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3