inotify是一种强大的,细粒度的,异步文件系统时间监控机制,它可以替代crond实现与rsync的触发式文件同步,从而监控文件系统中添加,删除,修改,移动等细粒事件,从LINUX 2.6.13起,就已加入了对inotify的支持,所以我们只需要安装一个第三方软件inotify-tools即可管理此服务.之前利用的rsync+crond来触发实现同步的瓶颈在于,rsync在同步数据时,需要先扫描所有文件后进行比对,而后进行差异传输,如果文件数量级别很大而且变化会很快,扫描所有文件会非常耗时,而且会存在漏同步的问题,造成效率低下.而rsync+inotify则会弥补前者先扫描后同步的效率问题,采用系统级别监控各种变化,当文件发生任何变化,就会触发rsync同步,解决效率与实时性问题。

Linux操作系统: CentOS6.5 32bit

rsync: 系统自带

data(rsync server):192.168.1.200

test(rsync client):192.168.1.201

(server)表示仅服务端配置

(client)表示仅客户端配置

(server,client)表示客户端与服务端都需配置

环境搭建:(server,client)

1.关闭iptables和SELINUX

# service iptables stop

# service ip6tables stop

#chkconfig iptables off

#chkconfig ip6tables off

# setenforce 0

# vi /etc/sysconfig/selinux

---------------

SELINUX=disabled

---------------

判断Linux系统内核是否达到2.6.13以上:

# uname -a

-------------

Linux localhost.localdomain 2.6.32-431.el6.i686 #1 SMP Dec 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux

-------------

查看inotify目录是否存在:

# ls -l  /proc/sys/fs/inotify/

------------------

总用量 0

0 dr-xr-xr-x 0 root root 0 12月 4 14:04 ..

0 dr-xr-xr-x 0 root root 0 12月 4 11:35 .

0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_user_watches

0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_user_instances

0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_queued_events

------------------

若返回以上内容,则系统支持inotify.

一.安装rsync:(server)

配置:(server)

# vi /etc/rsync.conf

--------------------

uid = nobody

gid = nobody

use chroot = no

max connections = 10

auth user = webuser

secrets file = /root/rsync.passwd

strict modes = yes

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[data]

path = /data/

comment = web file

ignore errors

read only = no

write only = no

hosts allow = 192.168.1.0/24

hosts deny = *

list = no

--------------------

创建rsync同步账户密码验证文件:vi /root/rsync.passwd

输入:webuser:rsync-pwd后保存退出

给rsync同步账户密码验证文件赋予可读可写权限:

chmod 764 /root/rsync.passwd

启动rsync

# rsync --daemon --config=/etc/rsync.conf

查看rsync是否启动正常

lsof -i:873

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rsync   1091 root    4u  IPv4  10692      0t0  TCP *:rsync (LISTEN)

rsync   1091 root    5u  IPv6  10693      0t0  TCP *:rsync (LISTEN)

一切正常,如上所示

二.安装inotify-tools:(client)

可以到https://github.com/rvoicilas/inotify-tools/下载zip包,然后传到系统进行编译安装:

# unzip inotify-tools-master.zip

# cd inotify-tools-master

# ./autogen.sh

# ./configure --prefix=/usr/local/inotify

# make && make install

配置client端的rsync_inotify.sh:(client)

# vi /root/rsync_inotify.sh

该脚本在做客户端目录下文件若发生变化,则向服务端做同步上传操作,也就是保持客户端目录文件发生变化,服务端也相应改变。

------------------

#!/bin/bash

host=192.168.1.200

src=/test

des=data

user=webuser

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' -e modify,delete,create,attrib $src | while read files

do

/usr/bin/rsync -vzrtopg --delete --progress $src $user@$host::$des --password-file=/root/rsync.passwd

echo "${files} was rsynced" >>/tmp/rsync.log 2>&1

done

------------------

赋予执行权限

# chmod 764 /root/rsync_inotify.sh

创建rsync同步账户密码验证文件:vi /root/rsync.passwd

输入   rsync-pwd后保存退出

给rsync同步账户密码验证文件赋予可读可写权限:

chmod 764 /root/rsync.passwd

执行脚本并做开机启动:

# /root/rsync_inotify.sh

# echo "/root/rsync_inotify.sh" >> /etc/rc.local

注:这个脚本的作用是通过inotify监控文件目录的变化,进而触发rsync进行同步操作,由于这是通过内核完成的主动式触发操作,所以比rsync遍历整个目录的扫描方式效率要高很多。

验证:

在客户端创建5个文件,到服务端查看文件是否实时同步?

(client)

# cd /test

# touch 1 2 3 4 5

(server)

# cd /data/test

# ls

-------------

1 2 3 4 5

-------------

验证成功,client端的目录发生变化会实时同步到server端

总结:

rsync+inotify比较适用于轻量级文件即时同步,如果量大建议还是使用共享存储方法解决。

转载于:https://www.cnblogs.com/linuxzkq/p/rsync-inotify.html

Rsync+Inotify-tools实现数据实时同步相关推荐

  1. rsync+inotify实现文件增量实时同步

    rsync+inotify实现文件增量实时同步 项目环境 防火墙{项目环境,不是必要条件} 项目需求 一.rsync安装部署 1.检查是否安装rsync 2.测试系统rsync命令 3.新建配置文件 ...

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

    本文转载:http://ilanni.blog.51cto.com/526870/1605200 把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要分以下几个步骤: 1.r ...

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

    Rsync (Rmote sync)是一款非常好的数据同步工具,能够通过对比同步双方的数据变动,实现增量同步,还可以通过LAN/WAN实现远程多台主机间文件的同步,还能结合crond任务计划来执行自动 ...

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

    Rsync与Inotify 单一的rsync只可以进行数据同步,单一的inotify只可以实时监控文件,两者结合使用刚好满足数据实时同步的需求,下面就用一个数据发布服务器和两个web服务器实例解析rs ...

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

    说明: 操作系统:CentOS 5.X 源服务器:192.168.21.129 目标服务器:192.168.21.127,192.168.21.128 目的:把源服务器上/home/www.osyun ...

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

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

  7. Centos rsync + notify 实现数据实时同步

    目录 rsync + notify 实现数据实时同步 一.简介 二.原理 三.实验环境 四.实验预期 五.准备工作 六.服务配置 目标服务器配置 源服务器配置 七.实现inodify实时触发rsync ...

  8. linux云计算架构师:Rsync+sersync实现数据实时同步

    全套学习资料移步至公众号[学神来啦]更多学习资料添加扣扣资源群:661308959 本节所讲内容:   2.1  Rsync概述   2.2  Rsync服务安装   2.3  Rsync+sersy ...

  9. Sersync和lsyncd实现数据实时同步

    文章目录 一.实时同步概念 1. 什么是实时同步 2. 实时同步原理 3. 实时同步的场景 4. 实时同步工具 二.实时同步案例 1.环境准备 2.配置思路 3.nfs服务端配置(172.16.1.3 ...

  10. binlog流程 mysql_小米 MySQL 数据实时同步到大数据数仓的架构与实践

    背景MySQL由于自身简单.高效.可靠的特点,成为小米内部使用最广泛的数据库,但是当数据量达到千万/亿级别的时候,MySQL的相关操作会变的非常迟缓:如果这时还有实时BI展示的需求,对于mysql来说 ...

最新文章

  1. 从传统运维到云运维演进历程之软件定义存储(五)上
  2. CSP认证201509-2 日期计算[C++题解]:枚举、模拟
  3. python3.8安装插件locust报错error: Microsoft Visual C++ 14.0 is required. Get it with Microsoft Visual C++
  4. JZOJ 5406. 【NOIP2017提高A组模拟10.10】Tree
  5. centos忘记root用户的密码
  6. 撬锁锤怎么用_安全锤是啥?消防蜀黍教你怎么选?如何快速破拆逃生?
  7. .net core 上传文件大小限制 webconfig
  8. 学成在线--6.CMS页面管理开发(删除页面)
  9. Spring JMS 整合 ActiveMQ
  10. 据中心综合管理存在诸多挑战
  11. Python字符串title()
  12. 各种语言的模块导入导出形式
  13. 05 Confluent_Kafka权威指南 第五章: kafka内部实现原理
  14. 玉米稻风波被中途扼杀 国稻种芯-何登骥:生物育种风险机制
  15. 【数学建模】三维曲面绘图 | matlab
  16. miui修改Android,修改 MIUI「快捷开关」布局
  17. C语言结构体struck所占用的字节数如何计算
  18. SWUST OJ954: 单链表的链接
  19. js图片截图粘贴和上传
  20. 通过GPU服务器运行Carla

热门文章

  1. Java面试题中高级,神策数据Java面试题
  2. 成功从小公司跳槽!35岁的程序员被裁
  3. python【数据结构与算法】最大上升子序列(简单dp)
  4. Android移动开发之【Android实战项目】DAY5-MPAndroidChart可滑动折线图
  5. python绘制科赫雪花(递归)
  6. 设计模板类,使得在创建一个对象时可以动态确定它的基类(public)
  7. 网络推广运营期间如何提升用户增长水平促进企业稳步推进网络推广
  8. 网络营销专员浅析如何判断网络营销中网站优化效果几何?
  9. 浅析搜索引擎对网站的抓取规则有哪些方面
  10. 北大计算机考研考什么时候,北大计算机考研复习计划有哪些