实时同步服务

如何实现数据实时同步?

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服务结合在一起
   [root@nfs01 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/ rsync_backup@172.16.1.41::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/ [root@nfs01 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 --- 进行解压 [root@nfs01 sersync_installdir_64bit]# mv sersync/ /usr/local/

第二个里程碑:编写sersync配置文件 [root@nfs01 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服务守护进程 [root@nfs01 bin]# chmod +x sersync [root@nfs01 bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml 参数-d: 启用守护进程模式 参数-r: 在监控前,将监控目录与远程主机用rsync命令推送一遍 参数-o: 指定配置文件,默认使用confxml.xml文件

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

3.2 Inotify服务优化

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