inotify实时同步数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了inotify实时同步数据相关的知识,希望对你有一定的参考价值。

实时同步服务

如何实现数据实时同步?

技术分享图片
2.1.1 实现数据同步通过(利用rsync服务)
rsync服务端部署
rsync客户端部署
2.1.2 实现数据实时监控(利用inotify)
inotifywait -mrq --format ‘%w%f‘ -e create,delete,moved_to,close_write /data

2.2 实现数据同步与实时监控结合(利用脚本实现)

   编写脚本,让rsync服务于inotify服务结合在一起
   [[email protected] scripts]# vim jiankong.sh 
   #!/bin/bash

   inotifywait -mrq --format ‘%w%f‘ -e create,delete,moved_to,close_write /data|   while read line
   do
     rsync -az --delete /data/ [email protected]::backup --password-file=/etc/rsync.password
   done

2.3 实时同步数据监控服务

介绍inotify软件?
Inotify是一种强大的,细粒度的。异步的文件系统事件监控机制
通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件(对文件重命名是属于什么事件?)
实时监控软件名称为inotify-tools

2.4 inotify软件部署过程

第一个里程碑:检查软件是否安装
rpm -qa inotify-tools

第二个里程碑:进行软件安装(yum安装/编译安装)
yum install -y inotify-tools

实时监控软件安装条件

1)linux内核是否达到了2.6.13
ls -l /proc/sys/fs/inotify/
[[email protected] yum.repos.d]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Dec 4 09:42 max_queued_events
-rw-r--r-- 1 root root 0 Dec 4 09:42 max_user_instances
-rw-r--r-- 1 root root 0 Dec 4 09:42 max_user_watches
max_user_watches: (8192) 设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances:(128) 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_queued_events: (16384) 设置inotify实例事件(event)队列可容纳的事件数量

2)系统epel源已经部署配置好

第三个里程碑:利用inotify命令进行实时监控
inotifywait: 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,
执行后处于阻塞状态,适合在shell脚本中使用
inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

inotifywait命令重要参数
-m|--monitor --- 始终保持事件监听状态
-r --- 递归监控目录数据信息变化
-q|--quiet --- 输出信息少(只打印事件信息)
--timefmt <fmt> --- 指定时间输出的格式
--format <fmt> --- 打印使用指定的输出类似格式字符串;即实际监控输出的内容
-e --- 指定监听指定的事件,如果省略,表示所有事件都进行监听。

2.5 实时监控实践练习:

2.5.1 实践练习一:监控创建事件(创建文件或创建目录)
创建文件:
touch oldgirl.txt
/data/ CREATE oldgirl.txt
/data/ OPEN oldgirl.txt
/data/ ATTRIB oldgirl.txt
/data/ CLOSE_WRITE,CLOSE oldgirl.txt

创建目录:
/data/ CREATE,ISDIR dir03
/data/ OPEN,ISDIR dir03
/data/ CLOSE_NOWRITE,CLOSE,ISDIR dir03

2.5.2 实践练习二:监控删除实践(删除文件或删除目录)
删除文件:
/data/ DELETE oldgirl.txt

删除目录:
/data/ OPEN,ISDIR dir03
/data/dir03/ OPEN,ISDIR
/data/ DELETE,ISDIR dir03
/data/ CLOSE_NOWRITE,CLOSE,ISDIR dir03
/data/dir03/ CLOSE_NOWRITE,CLOSE,ISDIR
/data/dir03/ DELETE_SELF

/data/ OPEN,ISDIR 01dir
/data/01dir/ OPEN,ISDIR
/data/01dir/ OPEN,ISDIR dir
/data/01dir/dir/ OPEN,ISDIR
/data/01dir/ CLOSE_NOWRITE,CLOSE,ISDIR dir
/data/01dir/dir/ CLOSE_NOWRITE,CLOSE,ISDIR
/data/01dir/ DELETE,ISDIR dir
/data/01dir/dir/ DELETE_SELF
/data/01dir/ DELETE 02.txt
/data/01dir/ DELETE 01.txt
/data/ DELETE,ISDIR 01dir
/data/ CLOSE_NOWRITE,CLOSE,ISDIR 01dir
/data/01dir/ CLOSE_NOWRITE,CLOSE,ISDIR
/data/01dir/ DELETE_SELF

2.5.3 实践练习三:监控重命名操作(重命名文件)
/data/ MOVED_FROM 1.txt
/data/ MOVED_TO 3.txt

2.5.4 实践练习四:sed命令替换过程
/data/ OPEN oldboy.txt
/data/ CREATE sedI5BZVM
/data/ OPEN sedI5BZVM
/data/ ACCESS oldboy.txt
/data/ MODIFY sedI5BZVM
/data/ ATTRIB sedI5BZVM
/data/ ATTRIB sedI5BZVM
/data/ CLOSE_NOWRITE,CLOSE oldboy.txt
/data/ CLOSE_WRITE,CLOSE sedI5BZVM
/data/ MOVED_FROM sedI5BZVM
/data/ MOVED_TO oldboy.txt

2.6 sed命令替换原理:

  1. 打开要被替换的文件,并且创建出一个临时文件
  2. 访问要被替换的文件,根据要替换文件的内容,包替换后的文件信息保存到临时文件
  3. 不写入关闭要被替换的文件,写入关闭临时文件
  4. 将临时文件进行重命名为要被替换的文件,将要被替换的文件覆盖掉

    企业常用inotify监控命令

    inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f 事件信息:%:e‘ -e create,delete,moved_to,close_write /data
    inotifywait -mrq --format ‘%w%f‘ -e create,delete,moved_to,close_write /data

技术分享图片

技术分享图片
技术分享图片
技术分享图片

3.1 sersync软件部署流程

sersync服务端部署
第一个里程碑:安装sersync软件
wget http://sersync.googlecode.com/files/sersync2.5_32bit_binary_stable
tar -zxvf sersync2.5_32bit_binary_stable_final.tar.gz -C /usr/local/ --- 编译安装
unzip sersync_installdir_64bit.zip --- 进行解压
[[email protected] sersync_installdir_64bit]# mv sersync/ /usr/local/

第二个里程碑:编写sersync配置文件
[[email protected] sersync]# cp conf/confxml.xml{,.bak}
vim /usr/local/sersync/conf/confxml.xml
<filter start="false">
<exclude expression="(.).svn"></exclude>
<exclude expression="(.
).gz"></exclude>
<exclude expression="^info/"></exclude>
<exclude expression="^static/
"></exclude>
</filter>
说明:指定默认文件不进行数据同步

<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
说明:定义sersync监控事件信息

<localpath watch="/opt/tongbu">
        <remote ip="127.0.0.1" name="tongbu1"/>
        <!--<remote ip="192.168.8.39" name="tongbu"/>-->
        <!--<remote ip="192.168.8.40" name="tongbu"/>-->
    </localpath>
    <rsync>
        <commonParams params="-artuz"/>
        <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
        <userDefinedPort start="false" port="874"/><!-- port=874 -->
        <timeout start="false" time="100"/><!-- timeout=100 -->
        <ssh start="false"/>
    </rsync>
说明:以上信息都是你需要改动的配置信息

第三个里程碑:启动sersync服务守护进程
[[email protected] bin]# chmod +x sersync
[[email protected] bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml
参数-d: 启用守护进程模式
参数-r: 在监控前,将监控目录与远程主机用rsync命令推送一遍
参数-o: 指定配置文件,默认使用confxml.xml文件

第四个里程碑:进行数据实时同步测试

3.2 Inotify服务优化

技术分享图片

3.3 实时同步服务serync-服务配置文件对比说明

技术分享图片

以上是关于inotify实时同步数据的主要内容,如果未能解决你的问题,请参考以下文章

rsync+inotify实现实时同步

inotify实时同步数据

inotify和rsync实现数据实时同步

inotify+rsync实现实时同步

rsync+inotify实时同步

rsync与inotify实现数据实时同步