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比较适用于轻量级文件即时同步,如果量大建议还是使用共享存储方法解决。

Rsync+Inotify-tools实现数据实时同步的更多相关文章

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

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要 ...

  2. rsync+inotify百万级文件实时同步

    实验环境:Centos7.4 目的:将源服务器的文件实时同步至目标服务器 源服务器:10.11.1.107 目标服务器:10.11.1.106 分别在两个节点安装rsync yum -y instal ...

  3. 使用rsync+inotify实现/www目录实时同步

    一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...

  4. nfs+rsync+inotify实现文件的实时同步

    准备三台服务器进行测试: nfs_server:192.168.12.110 web_server:192.168.12.111 rsync_server:192.168.12.112 网络规划图: ...

  5. Linux系统之网络文件共享与数据实时同步实践

    1.实现基于MYSQL验证的vsftpd虚拟用户访问 首先环境说明,数据库服务器是192.168.0.10,vsftpd服务器是192.168.0.30 1)安装vsftpd [root@test-c ...

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

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

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

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

  8. rsync+inotify实现多台服务器之间数据实时同步

    配置环境 1.操作系统:CentOS6.5-X86_64 2.rsync客户端(rsync+inotify):192.168.200.82 3.rsync服务端:192.168.200.80,192. ...

  9. centos 配置rsync+inotify数据实时同步2

    一.Rsync服务简介 1. 什么是Rsync 它是一个远程数据同步工具,它在同步文件的同时,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“rsync算法”来使本地和远程两个主机 ...

  10. Rsync+sersync(inotify)实现数据实时双向同步

    目录 Rsync+Sersync数据实时同步(双向) 服务介绍 节点声明 编译环境配置 安装Rsync 编辑Rsync配置文件 配置文件解析 配置密码文件 启动rsync验证 安装sersync服务 ...

随机推荐

  1. percona-toolkit -1

    http://blog.chinaunix.net/uid/16844903/cid-165634-list-1.html

  2. node.js 浏览器中输出 “hello world”

    前段时间花了几个小时,在command面板输出了“hello world”,今天就来说说怎么在浏览器上输入一个地址,然后页面输出“hello world”. 首先要搭建一个基础的 HTTP 服务器 一 ...

  3. 在饼图上显示百分比值(报表生成器和 SSRS)

    在饼图上显示百分比值(报表生成器和 SSRS) 默认情况下,图例中显示了类别来标识每个值. 如果使用了类别标签标记饼图,则可能希望在图例中显示百分比. 注意 在 SQL Server Data Too ...

  4. How to Tune Java Garbage Collection--reference

    reference:http://architects.dzone.com/articles/how-tune-java-garbage The Performance Zone is support ...

  5. CSS 之 清除 float 常用的方法

    大多数前端使用.clearfix:after{ .....}  和 .clearit{....}的组合来清除浮动. 前端开发经常用到浮动 float:left; float:right; 有浮动就需要 ...

  6. 自定义控件(视图)1期笔记01:View 和 ViewGroup

    1.View 和 ViewGroup 图解关系: 2. View 和 ViewGroup 关系和作用: (1) 关系: • 继承关系 • 组合关系 (2) 作用:      • View的作用: 提供 ...

  7. 阿里云 mysql 无缘无故挂掉

    近期在登录自己博客时,老是报数据库连接失败,然后重启服务器就好了.但是,重启服务器很耗时间,不方便,不能每次都重启吧于是远程连接服务器看了一下原来是数据库服务挂掉了启动时还报错于是查看了下错误日志 2 ...

  8. react native for Android (make you first android app)

    第一步:如果你的电脑安装了node,恭喜你,第一步完成:如果没有,那请先安装node. 第二步:安装react-native-cli,在windows下需要从github签下来的react-nativ ...

  9. 命令行创建AVD

    1.命令行创建AVD android create avd -n myAvd -t 8 -b armeabi-v7a -p d:\scard.img -s HVGA 2.删除AVD android d ...

  10. [LaTex]Visio文件转EPS文件[转]

    在LaTeX系统中,由于DVI 文件经常被转为PostScript 文件,所以LATEX 支持最好的是EPS 格式(Encapsulated Post-Script ,是PostScript 语言的子 ...