Linux 内核从 2.6.13 版本开始提供了 inotify 通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。可以监控某个用户,什么时间,做了什么动作!利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。

  使用 rsync 工具与 inotify 机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

软件下载地址:http://sourceforge.net/projects/inotify-tools/                            #notify-tools-3.13

试验要求:将test2主机/var/www/html目录实时同步到test1主机/var/www/html目录中;

试验拓普图

  [root@test2 ~]#uname -r                                                                                   #查看linux内核

   2.6.32-431.el6.x86_64

  [root@test2 ~]#yum -y install xinetd rsync;                                                        #安装rsync服务

[root@test2 ~]#yum -y install gcc-c++,openssh-clients

将inotify-tools上传并进行解压安装

  [root@test2 ~]# tar xvf inotify-tools-3.13.tar.gz -C /usr/local/src/                       #解压

  [root@test2 ~]# cd /usr/local/src/inotify-tools-3.13/                                            #切换目录

  [root@test2 inotify-tools-3.13]#./configure --prefix=/usr/local/inotify-tools ;         #编译安装

  [root@test2 inotify-tools-3.13]#make ; make install

测试

使用inotifywait命令监控网站目录/var/www/html发生的变化,然后在另一个终端向/var/www/html目录下添加文件、移动文件,查看屏幕输出结果。

  inotifywait常用参数:

  -e  用来指定要监控哪些事件。这些事件包括: create 创建,move 移动,delete 删除,modify 修改文件内容,attrib 属性更改。

  -m 表示持续监控

  -r  表示递归整个目录

  -q 表示简化输出信息

[root@test2 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/

然后再另开一终端,进入/var/www/html目录进行新增删除测试;

  [root@test2 html]#mkdir test

  [root@test2 html]#touch test.txt

  [root@test2 html]#rm -rf test.txt

创建触发式脚本自动同步数据

ssh免密码登录

  [root@test2~]#ssh-keygen                                                                                              #生成密钥

  [root@test2~]#ssh-copy-id root@192.168.1.190                                                              #发布公钥

编写脚本

  [root@test2~]#vim inotify.sh

  #!/bin/bash

  SRC=/var/www/html

  DST=root@192.168.1.190:/var/www/html

  inotifywait -mrq -e modify,delete,create,attrib ${SRC}|while read D E F

do

/usr/bin/rsync -avz --delete $SRC $DST

done

  [root@test2~]#chmod +x inotify.sh                                                     #添加执行权限

测试自动同步的效果

  [root@test2~]#./inotify.sh                                                                   #运行脚本

  另开一终端进行新增删除修改动作

  [root@test2~]#cd /var/www/html/

  [root@test2~]#touch bb.txt

 

然后登录到192.168.1.190服务器进行查看备份目录

  

实战:rsync+inotify实现数据实时同步的更多相关文章

  1. CentOS 6.5 rsync+inotify实现数据实时同步备份

    CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync    remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...

  2. sersync基于rsync+inotify实现数据实时同步

    一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192. ...

  3. rsync+inotify磁盘数据实时同步

    一.rsync+inotify主服务器部署 1.1安装rsync [root@nginx ~]# cd /usr/src/ [root@nginx src]# tar zxvf rsync-3.0.9 ...

  4. rsync+inotify实现数据实时同步

    rsync rsync是linux系统下的数据镜像备份工具.支持远程同步,本地复制,或者与其他SSH.rsync主机同步. 优点: 1).可以镜像保存整个目录树和文件系统.保存源目录整个目录树和文件系 ...

  5. 利用rsync+inotify实现数据实时同步脚本文件

    将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133. ...

  6. 通过rsync+inotify实现数据实时备份同步

    一.环境描述 测试环境 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 环境描述: 主服务器172.26.7.50 ,从 ...

  7. Linux下Rsync+sersync实现数据实时同步

    inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...

  8. Rsync+sersync实现数据实时同步

    前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增 ...

  9. Linux下Rsync+Inotify-tools实现数据实时同步

    Linux下Rsync+Inotify-tools实现数据实时同步 注意:下面的三个案例都是rsync 每次都是全量的同步(这就坑爹了),而且 file列表是循环形式触发rsync ,等于有10个文件 ...

随机推荐

  1. VC++6.0文件关联问题的解决方法

    最近我的电脑*.c文件关联失败,无法实现双击*.c打开vc++6.0,感觉特别不爽. 在经过自己的琢磨研究后,终于找到了解决方法. 特此分享下,希望可以帮到遇到同样问题的你. 核心内容: 1.& ...

  2. 【大结局】《从案例中学习JavaScript》之酷炫音乐播放器(四)

    这是之前写的用H5制作的音乐播放器,前三节其实已经做得差不多了,音轨的制作原理已经在上一节说明,不过一直还没有和音乐对接. 本章作为该系列的一个完结篇,我会专门把动态音轨的实现代码贴出来,demo地址 ...

  3. 细说Cookie

    阅读目录 开始 Cookie 概述 Cookie的写.读过程 使用Cookie保存复杂对象 Js中读写Cookie Cookie在Session中的应用 Cookie在身份验证中的应用 Cookie的 ...

  4. do{...}while(0)的妙用

    在学习第一门编程语言时,就已经介绍了顺序分支.条件分支.循环分支.比如循环分支有for.while.do-while语句.在随后的学校及工作中,如果手工循环一般使用for.while,很少使用do-w ...

  5. Gitlab使用总结

    Gitlab日常开发流程 1. 从某一功能分支新建一个自己的开发分支 二. 将master分支clone到本地 mkdir git-test cd git-test\ git clone http:/ ...

  6. javaMail使用163邮箱报535 Error: authentication failed

    javaMail使用网易163邮箱或者是126或者是网易其他邮箱报535 Error: authentication failed javax.mail.AuthenticationFailedExc ...

  7. Java中随机数的产生方式与原理

    查阅随机数相关资料,特做整理 首先说一下java中产生随机数的几种方式 在j2se中我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以 ...

  8. 《数据结构与算法Python语言描述》习题第二章第二题(python版)

    ADT Date: #定义日期对象的抽象数据类型 Date(self, int year, int month, int day) #构造表示year/month/day的对象 difference( ...

  9. Session中load/get方法的详细区别

    Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区别在于: 如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个O ...

  10. 深入理解http/https协议

    深入理解HTTP协议(转) http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(Wo ...