1. 程式人生 > >inotify實時同步數據

inotify實時同步數據

監控服務 params 刪除文件 oldboy /etc/ line ins exclude 介紹

實時同步服務

如何實現數據實時同步?

技術分享圖片
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/ [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/
[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-服務配置文件對比說明

技術分享圖片

inotify實時同步數據