rsync+inotify实时同步
!!!在安装前要先确保,rsync daemon服务配置成功,在安装inotify-tools前先确认你的linux内核是否达到了2.6.13,并且在编译时开启CONFIG_INOTIFY选项,也可以通过以下命令检测。
一、rsync + inotify 组合的起源
Rsync(remote sync)远程同步工具,通过rsync可以实现对远程服务器数据的增量备份同步,但rsync自身也有瓶颈,同步数据时,rsync采用核心算法对远程服务器的目标文件进行比对,只进行差异同步。我们可以想象一下,如果服务器的文件数量达到了百万甚至千万量级,那么文件对比将是非常耗时的。而且发生变化的往往是其中很少的一部分,这是非常低效的方式。inotify的出现,可以缓解rsync不足之处,取长补短。
【客户端】
rsync版本:3.0.6,inotify版本:inotify-tools-3.14.tar
二、编译安装
1)确认内核版本
- [root@weiwei ~]# uname -r
- 2.6.32-573.el6.x86_64
- [root@weiwei ~]# ls -l /proc/sys/fs/inotify/
- total 0
- -rw-r--r-- 1 root root 0 Aug 16 15:13 max_queued_events
- -rw-r--r-- 1 root root 0 Aug 16 15:13 max_user_instances
- -rw-r--r-- 1 root root 0 Aug 16 15:13 max_user_watches
- 显示这三项就说明支持
2)编译安装inotify
- [root@weiwei inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14
- [root@weiwei inotify-tools-3.14]# make && make install
- [root@weiwei local]# ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify
3)本地测试
- 测试create
- [root@weiwei ~]# /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /backup
- 16/08/17 19:01 /backup/a.txt
- 16/08/17 19:02 /backup/test_dir
- 测试delete
- [root@weiwei ~]# /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete /backup
- 16/08/17 19:04 /backup/a.txt
- 16/08/17 19:04 /backup/nini.txt
- 测试close_write
- [root@weiwei ~]# /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete,close_write /backup
- 16/08/17 19:06 /backup/nima
- 16/08/17 19:06 /backup/nima
- 上面的create,close_write如果是创建文件则会重复了监控,如果仅仅写入则只会有close_write的监控
- 没有时间的监控,简化事件的输出
- [root@weiwei ~]# /usr/local/inotify/bin/inotifywait -mrq --format ' %w%f' -e create /backup
- /backup/jij.txt
三、下面用列表详细解释一下各个参数的含义
inotifywait参数 | 含义说明 |
-r --recursive | 递归查询目录 |
-q --quiet | 打印很少的信息,仅仅打印监控事件的信息 |
-m,--monitor | 始终保持事件监听状态 |
--exclude | 排除文件或目录时,不区分大小写 |
--timefmt | 指定时间输出的格式 |
--format | 打印使用指定的输出类似格式字符串 |
-e,--event | 通过此参数可以指定需要监控的事件,如下一个列表所示 |
-e :--event的各种事件含义
Events | 含义 |
---|---|
access | 文件或目录被读取 |
modify | 文件或目录内容被修改 |
attrib | 文件或目录属性被改变 |
close | 文件或目录封闭,无论读/写模式 |
open | 文件或目录被打开 |
moved_to | 文件或目录被移动至另外一个目录 |
move | 文件或目录被移动到另一个目录或从另一个目录移动至当前目录 |
create | 文件或目录被创建在当前目录 |
delete | 文件或目录被删除 |
umount | 文件系统被卸载 |
四、实时监控的脚本
- #!/bin/sh
- path="/backup"
- cmd="/usr/local/inotify/bin/inotifywait"
- $cmd -mrq --format ' %w%f' -e create,close_write,delete /backup |\
- while read line
- do
- if [ ! -e "$line" ];then 如果此时执行了删除操作,则推送整个目录
- cd $path &&\
- rsync -az --delete ./ --delete rsync_backup@192.168.222.140::oldboy --password-file=/etc/rsync.password
- else 如果只是创建文件或者目录,则只需要推送文件或目录
- rsync -az --delete $line rsync_backup@192.168.222.140::oldboy --password-file=/etc/rsync.password
- fi
- done
五、参数优化
- [root@weiwei ~]# cd /proc/sys/fs/inotify/
- [root@weiwei inotify]# ll
- total 0
- -rw-r--r-- 1 root root 0 Aug 16 15:13 max_queued_events ===关键参数,可以搞大点,5000000
- -rw-r--r-- 1 root root 0 Aug 16 15:13 max_user_instances
- -rw-r--r-- 1 root root 0 Aug 16 15:13 max_user_watches ===关键参数,327679
- [root@weiwei inotify]# cat *
- 16384
- 128
- 8192
在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。
修改参数:
- [root@weiwei data]# cat /proc/sys/fs/inotify/max_
- max_queued_events max_user_instances max_user_watches
- [root@weiwei data]# cat /proc/sys/fs/inotify/max_user_watches
- 8192
- [root@weiwei data]# echo "50000000" > /proc/sys/fs/inotify/max_user_watches
- [root@weiwei data]# cat /proc/sys/fs/inotify/max_user_watches
- 50000000
- [root@weiwei data]# cat /proc/sys/fs/inotify/max_queued_events
- 16384
- [root@weiwei data]# echo "326790" > /proc/sys/fs/inotify/max_queued_events
- [root@weiwei data]# cat /proc/sys/fs/inotify/max_queued_events
- 326790
- [root@weiwei data]# sysctl -p
六、inotify优缺点
优点:监控文件系统事件变化,通过同步工具实现实时数据同步。
缺点:
1)并发如果大于200个文件(10-100k),同步就会有延迟
2)我们前面写的脚本,每次都是全部推送一次,但确实是增量的。也可以只同步变化的文件,不变化的不理。
3)监控到事件后,调用rsync同步是单进程的,而sersync为多进程同步。既然有了inotify-tools,为什么还要开发sersync?
七、参考文档
https://github.com/rvoicilas/inotify-tools/wiki
rsync+inotify实时同步的更多相关文章
- rsync+inotify实时同步环境部署记录
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足.首先,rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件 ...
- rsync+inotify实时同步方案
rsync+inotify实时同步,inotify可以实时监控本地文件或目录变化,当检测到本地文件变化,执行rsync同步命令,将变化的文件同步到其他服务器节点. 1.配置环境 3.在服务节点1.服务 ...
- CentOS6.5实现rsync+inotify实时同步
参考博文: 参考1:CentOS6.5实现rsync+inotify实时同步 参考2:inotify-tools+rsync实时同步文件安装和配置 CentOS 6.3下rsync服务器的安装与配置 ...
- 配置rsync+inotify实时同步
与上一篇同步做 配置rsync+inotify实时同步 1:调整inotify内核参数 在linux内核中,默认的inotify机制提供三个调控参数:max_queue_events.max_user ...
- linux设置rsync+inotify实时同步文件
linux设置rsync+inotify实时同步文件 应用场景: 同步接收方:test01 接收目录:/opt/software/test/a/ 同步发起方:test02 同步目录:/opt/so ...
- (转)rsync+inotify实时同步
原文:http://lxw66.blog.51cto.com/5547576/1331048 声明:rsync inotify 需要逆向思考,当只做rsync不实时同步时,我们一般是从rsync服务端 ...
- 浅谈Rsync+Inotify实时同步
Rsync是Unix/Linux旗下的一款应用软件,利用它可以是多台服务器数据保持同步一致性,第一次同步时rsync会复制全部内容,但在下次只传输修改过的文件 Rsync在传输数据的过程中可以实行压缩 ...
- centos 6 rsync+inotify 实时同步
主机名.ip: server 172.31.82.184 client 172.31.82.185 需求: 1.server端 ”/data/server“ 做为client端 “/data/cli ...
- rsync + inotify 实时同步
1. 前言 2 台 nginx 需要做集群, 静态文件和php文件都在nginx服务器本地. 有三种方案: (1)NFS (2)Rsync + inotify (3)共享存储服务器 第一种:当 nfs ...
随机推荐
- 如何利用gdb调试程序?
程序的大体意思就是各一个数组赋值,然后输出来程序已经写在了上面,下面我们就来看一下如何产生带有调试信息的编译文件,这里我们要使用gcc的-g参数,用于在编译文件中加入一些调试信息.发现加了-g和没有加 ...
- spring 集成 redis -- pub/sub
redis除了常用的当做缓存外,还可以当做简单的消息中间件,实现消息发布订阅 spring集成redis,可以使用spring-data-redis 首先引入相关maven依赖(此处我spring相关 ...
- Handler vs Timer,究竟该用哪个?
Handler vs Timer 在我们Android开发过程中,经常需要执行一些短周期的定时任务,这时候有两个选择Timer或者Handler.然而个人认为:Handler在多个方面比Timer更为 ...
- 解密.net
一直疑惑与几个专业的名词,今天好不easy看完了.net视频,能够好好总结一下了. 一.关于.net中的几个概念 ①..NET Framework用来保证应用程序的安全的.详细的百度上有解说. wat ...
- Photoshop脚本之eps转换成jpg
function saveEPS( doc, saveFile ) { var saveOptions = new JPEGSaveOptions( ); saveOptions.encoding = ...
- leetcode-happy number implemented in python
视频分析: http://v.youku.com/v_show/id_XMTMyODkyNDA0MA==.html?from=y1.7-1.2 class Solution(object): def ...
- 网页(aspx)与用户控件(ascx)交互逻辑处理实现
几个页面(ASPX)都使用一些相同的控件,一个文本框,二个按钮(搜索和导出),为了以后好维护,把这相同的部分抽取放在一个用户控件(ASCX)上.现需要处理逻辑如下 搜索事件处理的逻辑在各个页面处理. ...
- asp.net 读取配置文件方法
方法1: System.Collections.Specialized.NameValueCollection nvc = (System.Collections.Specialized.NameVa ...
- 【ask】Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
1.周五对nodejs tcp长连接服务器框架进行压测,一切开始比较常规(没什么特殊问题). 2.突然手一哆嗦,把压测用的客户端群一起关闭了. 3.这个时候nodejs的服务器爆出了"Cau ...
- poj 1129(dfs+图的四色定理)
题目链接:http://poj.org/problem?id=1129 思路:根据图的四色定理,最多四种颜色就能满足题意,使得相邻的两部分颜色不同.而最多又只有26个点,因此直接dfs即可. #inc ...