rsync加inotify实现无间隔文件同步

一: 工具简介

 rsync

它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送文件的变化部分,而不是每次都整体传送,因此速度相当快。

inotyify

   inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。于Linux核心2.6.13发布时,被正式纳入Linux内核。所以内核版本在2.6.13之前的用户,就只能通过给内核打补丁的方式来使用此功能了。



 二:rsync

 1)rsync工作模式  

第一种模式:shell模式,也称作本地模式;

第二种模式:远程shell模式,可以利用ssh协议承载其远程传输过程;

第三种模式:列表模式,仅列出源中的内容,-nv

第四种模式:服务模式,此时rsync工作为守护进程,能接收客户端的数据同步请求

  rsync命令的选项 

 -n: 同步测试,不执行真正的同步过程;
 -v: 详细输出模式
 -q: 静默模式
 -c: checksum,开启校验功能
 -r: 递归复制
 -a: 归档,保留文件的原有属性;
 -p: 保留文件的权限;
 -t: 保留文件的时间戳;
 -l: 保留符号链接
 -g: 保留属组
 -o: 保留属主
 -D:保留设备文件
 -e ssh: 使用ssh作为传输承载;
 -z: 压缩后传输;
 --progress: 显示进度条
 --stats: 显示如何执行压缩和传输

注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本向;如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要



 三:inotyify

 1)inotyify工作模式

  inotifywait:wait for changes to files using inotify  使用inotify监控文件变化

   inotifywait [option]  file1 [ file2 ] [ ... ]

  option:

-h, –help输出帮助信息排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
-m, –monitor接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。-d, –daemon跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。
-o, –outfile 输出事情到一个文件而不是标准输出。-s, –syslog输出错误信息到系统日志
-r, –recursive监视一个目录下的所有子目录。
-q, –quiet指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
–exclude  正则匹配需要排除的文件,大小写敏感。
–excludei 正则匹配需要排除的文件,忽略大小写。
-t , –timeout 设置超时时间,如果为0,则无限期地执行下去。
-e , –event 指定监视的事件。
-c,  –csv输出csv格式。

inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]

参数:

-h,  –help输出帮助信息
-v,  –verbose输出详细信息
-z,  –zero输出表格的行和列,即使元素为空
–exclude 正则匹配需要排除的文件,大小写敏感。
–excludei 正则匹配需要排除的文件,忽略大小写。
-r,  –recursive监视一个目录下的所有子目录。
-t , –timeout 设置超时时间
-e , –event 只监听指定的事件。
-a , –ascending 以指定事件升序排列。
-d , –descending 以指定事件降序排列


配置一个rsync+inotify 示意图

分发服务器有数据变化就会把数据传送给节点一和节点二,节点一和节点二位rsync服务器,分发服务器为inotify服务器。

配置rsync服务器

yum -y install xinetd #由于rsync服务依赖于xinetd,所以要先把xinetd安装进来
vim /etc/xinetd.d/rsync 
disable = no

vim /etc/rsyncd.conf #编辑rsyncd.conf 的配置文件
#Gloable Setting    #全局配置文件
uid = root#设定运行用户
gid = root#设定运行组
use chroot = no#不实用chroot
max connections = 5#设置最大连接数
strict modes = yes#使用密码文件时,是否检查其权限
pid file = /var/run/rsyncd.pid#pid文件位置
log file = /var/log/rsyncd.log#日志文件位置
  
#Directory Setting
[test]#定义一个新的资源
path = /test#指定资源路径  两个主机都要使用这个路径资源
ignore errors = no#不忽略错误
read only = no#不使用只读模式
hosts allow = 172.16.16.0/24#允许哪些网段登录 这样可以接入多台主机,只要网段相同
hosts deny = *#不允许登录的网段
list = true #是否允许列出文件列表
auth users = user1, user2#可登录用户
secrets file = /etc/rsyncd.pw#密码文件,确保只有属主有权限

vim /etc/rsyncd.pw

#文件格式为用户名:密码
user1:123
user2:123

chmod 600 /etc/rsyncd.pw #给密码文件添加权限

配置inotify服务器

 tar xf inotify-tools-3.14.tar.gz -C /usr/local/src
 cd /usr/local/src/inotify-tools-3.14/
 ./configure --prefix=/usr/local/inotify-tools
 make && make install
 
 vim /etc/rsyncd.auth #配置用户文件信息
  user1
  user2
  
 chmod 600 /etc/rsyncd.auth 
 
 为分发服务器配置如上面安装完成后编辑以下脚本,让其自动同步数据。
  vim /bin/inotify.sh 
  
Source=/test
Host=172.16.16.1
Dest=test
Host1=172.16.16.2

/usr/local/inotify-tools/bin/inotifywait -mrq -e modify,delete,create,attrib /test | whil
e read D E F
do
        /usr/bin/rsync -ahqz    --password-file=/etc/rsyncd.auth ${Source}   [email protected]$Host::${Dest}/
        /usr/bin/rsync -ahqz    --password-file=/etc/rsyncd.auth ${Source}   [email protected]$Host1::${Dest}/
done




OK 通过以上脚本就可以实现文件之间的同步。

时间: 2024-10-21 11:20:06

rsync加inotify实现无间隔文件同步的相关文章

烂泥:rsync与inotify集成实现数据实时同步更新

本文首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要分以下几个步骤: 1.rsync的优点与不足 2.inotify是什么 3.检测OS是否支持inotify 4.inotify相关参数详解 5.inotify监控的文件事件类似 6.inotify-tools是什么 7.安装inotify-tools 8.inotifywait使用详解 9.inotifywatch使用详解

rsync与inotify集成实现数据实时同步更新

本文转载:http://ilanni.blog.51cto.com/526870/1605200 把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要分以下几个步骤: 1.rsync的优点与不足 2.inotify是什么 3.检测OS是否支持inotify 4.inotify相关参数详解 5.inotify监控的文件事件类似 6.inotify-tools是什么 7.安装inotify-tools 8.inotifywait使用详解 9.inotifywatch使用详解

rsync 加 inotify 实现无缝数据同步

rsync 是远程差异同步数据的工具,把一份数据复制到另一台机器上.它的同步特性是,在整个文件域中,根据rsync算法计算文件的特征码,只同步有改变的文件,但在同步整个域的时候,会计算整个域中所有文件的特征,这样使得在文件数据过多情况下计算文件特性就花费了很多时间.如果不借助其它软件,rsync无法做到真正的即时同步数据.rsync可以对目录或整个文件系统做同步,可能借助ssh加密后安全传输,因为只同步差异数据,所以效率较高,还支持匿名传输等特性.rsync分为服务端和客户端,做为服务端随时等待

Rsync实现Windows系统与Linux文件同步

rsync是类Linux系统下的数据镜像备份工具(remote sync) .一款快速增量备份工具Remote Sync,远程同步支持本地复制,或者与其他SSH.rsync主机同步. 1.安装配置Rsync软件(Linux系统服务端) [[email protected] ~]# yum install rsync -y[[email protected] ~]# vim /etc/rsyncd.conf uid=root                    --文件上传的所属用户gid=ro

CentOS7通过rsync+crontab实现两台服务器文件同步

centos7系统中已经默认安装rsync 1:主服务器配置 (1)修改rsyncd.conf 配置文件 [[email protected] app]# vi /etc/rsyncd.conf motd file = /etc/rsyncd.motdlog file = /var/log/rsyncd.logpid file = /var/run/rsyncd.pidlock file = /var/run/rsyncd.lockport = 873address = 192.168.0.24

centos7安装rsync及两台机器进行文件同步

安装及配置 yum -y install rsync #启动rsync服务 systemctl start rsyncd.service systemctl enable rsyncd.service #检查是否已经成功启动 netstat -lnp|grep 873 服务端配置 # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # config

rsync从linux到linux的文件同步备份

一.环境 需要备份文件的服务器(服务器端):192.168.1.201 (RHEL 5) 接收备份文件的服务器(客户端):192.168.1.202 (CENTOS 5) 二.安装配置 1.服务器端的配置 A.采用系统默认安装的rsync 编辑/etc/rsyncd.conf文件,如果没有则新建一个. vi /etc/rsyncd.conf #[globale] strict modes= yes  #check passwd file port= 873 #default port logfi

Ubuntu 下rsync+inotify实现实时文件同步

rsync+inotify实现实时文件同步 一.rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚

rsync+inotify实现服务器之间文件实时同步

1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的.而且正在发生变化