!!!在安装前要先确保,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实时同步的更多相关文章

  1. rsync+inotify实时同步环境部署记录

    随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足.首先,rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件 ...

  2. rsync+inotify实时同步方案

    rsync+inotify实时同步,inotify可以实时监控本地文件或目录变化,当检测到本地文件变化,执行rsync同步命令,将变化的文件同步到其他服务器节点. 1.配置环境 3.在服务节点1.服务 ...

  3. CentOS6.5实现rsync+inotify实时同步

    参考博文: 参考1:CentOS6.5实现rsync+inotify实时同步 参考2:inotify-tools+rsync实时同步文件安装和配置 CentOS 6.3下rsync服务器的安装与配置  ...

  4. 配置rsync+inotify实时同步

    与上一篇同步做 配置rsync+inotify实时同步 1:调整inotify内核参数 在linux内核中,默认的inotify机制提供三个调控参数:max_queue_events.max_user ...

  5. linux设置rsync+inotify实时同步文件

    linux设置rsync+inotify实时同步文件   应用场景: 同步接收方:test01 接收目录:/opt/software/test/a/ 同步发起方:test02 同步目录:/opt/so ...

  6. (转)rsync+inotify实时同步

    原文:http://lxw66.blog.51cto.com/5547576/1331048 声明:rsync inotify 需要逆向思考,当只做rsync不实时同步时,我们一般是从rsync服务端 ...

  7. 浅谈Rsync+Inotify实时同步

    Rsync是Unix/Linux旗下的一款应用软件,利用它可以是多台服务器数据保持同步一致性,第一次同步时rsync会复制全部内容,但在下次只传输修改过的文件 Rsync在传输数据的过程中可以实行压缩 ...

  8. centos 6 rsync+inotify 实时同步

    主机名.ip: server 172.31.82.184 client  172.31.82.185 需求: 1.server端 ”/data/server“ 做为client端 “/data/cli ...

  9. rsync + inotify 实时同步

    1. 前言 2 台 nginx 需要做集群, 静态文件和php文件都在nginx服务器本地. 有三种方案: (1)NFS (2)Rsync + inotify (3)共享存储服务器 第一种:当 nfs ...

随机推荐

  1. 加密web.config中的邮件配置mailSettings

    加密: 在命令提示符下键入: aspnet_regiis -pef connectionStrings 要加密的web.config完整路经 演示样例:C:\Program Files (x86)\M ...

  2. 换个角度剖析iptables防火墙

    这篇文章会尽量以通俗易懂的方式描述iptables的相关概念,请耐心的读完它. 防火墙相关概念 此处先描述一些相关概念. 从逻辑上讲.防火墙可以大体分为主机防火墙和网络防火墙. 主机防火墙:针对于单个 ...

  3. sublime text 格式化html css 与显示函数列表

    sublime 格式化html css 1.ctrl + shift + p 2.输入install package,选择install package 3.输入:HTML-CSS-JS Pretti ...

  4. IntelliJ IDEA JDK配置

    1.JDK环境 目前大多数IDE都没有集成JDK环境,IDEA也是一样,在使用IDEA之前首先要安装JDK,并且配置环境变量.与其他IDE不同之处在于,IDEA不会自动匹配系统的JDK环境,编译时会提 ...

  5. ubuntu1204-gedit中文乱码

    1 在界面上使用ALT-F2打开"执行应用程序"界面. 2 输入dconf-editor.然后点击"执行"打开"Configuration Edito ...

  6. redis php 实例一

    下面的例子都是基于php-redis这个扩展的. 1,connect 描述:实例连接到一个Redis. 参数:host: string,port: int 返回值:BOOL 成功返回:TRUE;失败返 ...

  7. TF-IDF(词频-逆向文件频率)用于文字分类

    SVM分类器:支持向量机Support Vector Machine. 一个普通的SVM就是一条直线,用来完美划分linearly separable的两类.解决线性 要解决非线性需要到高维处理: 核 ...

  8. IOS-应用之间调用

    本文转载至 http://blog.csdn.net/likendsl/article/details/7553605 原文作者的博客值得关注. ios应用之间的调用步骤: 一.调用自己开发的应用 1 ...

  9. netty学习之路

    Netty是一个高效的提供异步事件驱动的网络通信框架,换言之,Netty是一个nio实现框架并且能简化传统的TCP.UDP.Socket编程.

  10. vijos P1740 聪明的质检员

    题目链接:传送门 题目大意:给你n个物品,每件物品有重量 W 和价值 V,给m个区间,和一个标准值.(n,m最大200000) 要求找到一个值x,使得m个所有区间的权值和与标准值的差的绝对值最小.单个 ...