Rsync远程同步+inotify监控

一、rsync是什么?

一款快速增量备份工具

  • Remote Sync ,远程同步

  • 支持本地复制,或者其它SSH、rsync主机同步。

  • 官方网站:https://rsync.samba.org/

rsync复制时的原理

  • 首先将源文件和目标位置的文件对比,找出差异部分
  • 根据目标位置的文件与源文件差异的部分,进行一致性同步

2、rsync同步源

rsync同步源:指的就是备份操作的远程服务器,也称备份源。

例如

  • A服务器同步B服务器的数据,B服务器就是备份源,相反,一样。
    在这里插入图片描述

3、配置rsync源

基本思路

  • 建立rsync.conf配置文件、独立的账户文件
  • 启用rsync的 --daemon(守护进程)模式

配置文件/etc/rsync/rsyncd.conf

  • 认证配置auth users、secrets file ,不加则为匿名

独立的账号文件

  • 文件位置可在配置文件中定义
  • 格式: 用户名:密码
  • 每一行一个用户记录
  • 独立的账号数据,不依赖系统账号

启动rsync服务

  • 通过–daemon独自提供服务,rsync–daemon
  • 执行kill(cat /var/run/rsyncd.pid)关闭服务

4、rsync命令

  • 命令使用语法
rsync 【选项】 原始位置  目标位置
  • 常用选项
选项功能
-a规章模式,递归并保留对象属性,等同于-rlptgoD
-v显示同步过程信息
-z在传输过程中进行压缩
-H保留硬链接文件
-A保留ACL属性信息
–delete删除目标位置有,而同步源中没有的文件
根据对象的校验和来决定是否跳过文件

5、配置源的两种表达方式

格式一

用户名@主机地址::共享模块名  本地目录

例如:rsync -avz backuper@20.0.0.55::wwwroot /data
#表示将20.0.0.55同步源的wwwroot模块中定义的文件同步到本地的/data目录

格式二

rsync://用户名@主机地址/共享模块名 本地目录

例如:rsync -avz rsync://ydq@20.0.0.55/wwwroot /root
#意思与上面一样,写法不同

二、rsync实验

1、本地复制

rsync -avz /abc /opt 
#复制整个abc目录

rsync -avz /abc/ /opt 
#复制abc目录下的文件
image-20220823215422017 image-20220823215537269

1.1 本地复制的"妙用"

对一个目录下所有文件删除时,我们可以使用rm -rf 进行删除,但是rm -rf 是需要对文件进行遍历的。比较消耗资源,所以我们可使用–delete进行本地删除。

这种办法,对资源的消耗较少。

在这里插入图片描述

2、异地复制

配置环境

主机名操作系统ip地址所需软件
rsynccentos720.0.0.55rsync
clientcentos720.0.0.56rsync

2.1 rsync服务器配置

关闭防火墙、核心防护、下载更新rsync服务

systemctl stop firewall
systemctl disbale firewalld
setenforce 0
yum -y install rsync

在这里插入图片描述

修改配置文件

vim /etc/rsyncd.conf 
 
uid = root
gid = root
use chroot = yes                                                
address = 20.0.0.55
port 873                                                                
log file = /var/log/rsyncd.log                  
pid file = /var/run/rsyncd.pid                  
hosts allow = 20.0.0.0/24
[wwwroot]                                                               
path = /var/www/html                                    
comment = Document Root of www.lic.com
read only = yes                                                  
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z        
auth users = ydq                                               
secrets file = /etc/rsyncd_users.db

在这里插入图片描述

设置密码文件、并开启rsync服务

vim /etc/rsyncd_users.db
ydq:123
 
chmod 600 /etc/rsyncd_users.db
 
rsync --daemon
netstat -natp | grep rsync

-------------------------------
如果要关闭服务可以使用以下命令
kill $(cat /var/run/rsync.pid)

在这里插入图片描述
在这里插入图片描述

创建共享文件,也就是源文件

mkdir -p /var/www/html
chmod +r /var/www/html
cd /var/www/html
echo "yudeqiang">ydq.txt
echo "zhouxingchi">zxc.txt

在这里插入图片描述

2.2 rsync客户端配置

关闭防火墙、核心防护、修改主机名

在这里插入图片描述

2.2.1 普通同步

创建目录,完成共享

rsync -avz ydq@20.0.0.55::wwwroot /abc

在这里插入图片描述

2.2.2 免密同步
vim /etc/server.pass
123

chmod 600 /etc/server.pass
rsync -avz --password-file=/etc/server.pass ydq@20.0.0.55::wwwroot /abc

在这里插入图片描述
在这里插入图片描述

2.2.3 --delete选项的用法
rsync -avz -delete --password-file=/etc/server.pass ydq@20.0.0.55::wwwroot /abc

在这里插入图片描述

三、inotify简介

1、inotify介绍

可以监控文件系统的变动情况,并作出通知响应

  • 可以调整inotify内核参数(优化)
vim /etc/sysctl.conf(内核参数文件)
max_queue_events    	#监控事件队列大小
max_user_instances  	#最多监控实例数
max_user_watches    	#每个实例最多监控文件数  

#命令工具
inotifywait     #用于持续监控,时实输出结果
inotifywatch    #用于短期监控,任务完成后再输出结果

常用选项

选项功能
-m持续监控
-r递归监控所有子对象
-q简化输出信息
-e指定要监控哪些事件类型
modify修改
create创建
move移动
delete删除

2、rsync+inotify实现配置

2.1 rsync服务器配置

修改配置文件

vim /etc/rsyncd.conf
read only = no

kill (cat /var/run/rsyncd.pid)
rsync --daemon
netstat -natp |grep rsync

在这里插入图片描述
在这里插入图片描述

修改内核文件(一个优化操作)

vim /etc/sysctl.conf

fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p

在这里插入图片描述

2.2 client端配置

安装inotif安装包

yum -y install gcc gcc-c++

cd /opt
tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14/
./configure
make && make install

在这里插入图片描述
在这里插入图片描述

编写触发同步脚本

脚本的目的就是时实监控、时实同步的功能

vim /opt/inotify.sh

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /abc"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /abc/ ydq@20.0.0.55::wwwroot"
 
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
	fi
done

#脚本解释
先定义一个变量为监控这个目录中是否创建、删除、移动、修改、属性等信息的变化
再定义一个变量为rsync同步,将/abc中的目录中的信息同步到rsync服务器中的指定目录
再编写一个while循环,先执行监控变量,再执行while循环,
循环内容为,读取目录事件文件,如果rsync进程同步操作不存在,则执行同步操作的变量。

在这里插入图片描述

chmod +x /opt/inotify.sh
./inotify.sh

---------------#加入自启动-----------------------
chmod +x /etc/rc.d/rc.local
echo "/opt/inotify.sh" >>/etc/rc.d/rc.local

在这里插入图片描述

2.3 client端验证

在这里插入图片描述

四、总结

优点

  • 可以时实

缺点

  • 带宽特别充裕的情况下,rsync同步的速率比scp要慢

  • 同步百万级数据,参数严格要按要求去写,不然可能导致同步失败。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值