rsync+inotify實時同步

 

Rsync的企業工作場景說明

利用rsync+inotify 實現遠程實時同步配置與文件併發測試

Inotify 是一個 Linux 內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等。您還可以跟蹤活動的源頭和目標等細節。

使用 inotify 很簡單:創建一個文件描述符,附加一個或多個監視器(一個監視器 是一個路徑和一組事件),然後使用 read 方法從描述符獲取事件。read 並不會用光整個週期,它在事件發生之前是被阻塞的。

可以監控文件系統中添加,刪除,修改,移動等各種事件

 

inotify邏輯

 

wKiom1j4Y6qCY_haAANPjE2Rwqc163.png-wh_50


                              環境:需要二臺服務器,inotify安裝在master的服務器

master192.168.0.110  255.255.255.0

slave192.168.0.111     255.255.255.0

 

操作步驟:

1.rsync服務端的相關設置

2.檢查系統的內核,查看是否有匹配的文件

3.master上下載inotify的源碼包

4.手動測試創建文件

5.手動測試刪除文件

6.編寫一個實時監控的腳本

 

1. rsync服務端的相關設置

新建rsync用戶及模塊目錄並更改其用戶組

useradd lizheng -s /sbin/nologin    #添加用戶

greplizheng /etc/passwd     #查看用戶

mkdir/risehome/                 #創建rsync工作模式的模塊目錄

chownlizheng.lizheng /risehome/          #更改模塊目錄的用戶組

創建rsyncd.conf文件

vi/etc/rsyncd.conf

 

寫入內容

#server configure start

port = 873

uid = root
gid = root
use chroot = no
max connections = 300

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/run/rsyncd.log

 [risehome]                                 #設置模塊名

path = /risehome/

ignore errors

read only = false

list = false

hosts allow = *                  #所有網段

hosts deny = 0.0.0.0/32

auth users = lizheng   #用戶

secrets file = /etc/rsync.password

#rsync_config___________________end

注意點:rsync--daemon 客戶端開啓873端口

rsync服務端(slave)

vi /etc/rsync.password

lizheng:lizheng123

更改權限

chmod 600/etc/rsync.password

查看rsync是否開啓 

netstat -lnpe |grep rsync

rsync服務端(master)

vi /etc/rsync.password

lizheng123

更改權限

chmod 600/etc/rsync.password

加入開機啓動
echo"/usr/bin/rsync --daemon" >> /etc/rc.local

2.查看系統是否可以安裝inotify服務,內核要在2.6.1版本以上

查看master是否有下列三個選項

ls -l/proc/sys/fs/inotify


wKiom1j4ZDOzPKqXAABAzEtf5OI729.png-wh_50

查看slave是否有下列三個選項

wKioL1j4ZEeTimo9AAAUrPYhhMo689.png-wh_50

事件相關參數的大小  /proc/sys/fs/inotify/


wKioL1j4ZFDDg1oTAABJXrMv3Ts009.png-wh_50


可直接修改/etc/sysctl.conf配置文件,將管理隊列設爲32768,實例數設爲1024,監控數設爲9000000(建議大於監控目標的總文件數)。

[root@xuegod63~]#vim/etc/sysctl.conf#以文件最後,添加以下內容

fs.inotify.max_queued_events=32768

fs.inotify.max_user_instances=1024

fs.inotify.max_user_watches=90000000



sysctl -p#使修改後的sysctl.conf文件生效

查看是否修改成功:

[root@xuegod63~]# cat /proc/sys/fs/inotify/max_user_watches

3.master上下載源碼安裝包

進入源碼包存放的路徑

mkdir -p/home/lizheng/tools

cd/home/lizheng/tools

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

tar zxvfinotify-tools-3.14.tar.gz

進入inotify目錄並編譯安裝(./congifure --help可以查看參數)

cdinotify-tools-3.14

./configure--prefix=/usr/local/inotify-tools-3.14/   (指定安裝路徑)

make&& make install

ln-s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools #給安裝路徑做一個軟鏈接,去掉版本號

ll/usr/local/inotify-tools  #查看文件

4.關於create的測試

 

  1.新建一個backup的文件

    mkdir /backup

執行命令

/usr/local/inotify-tools-3.14/bin/inotifywait-mrq --timefmt '%d/%m/%y  %H:%M'  --format '%T %w%f' -e create/backup

 

5.關於delete的測試

/usr/local/inotify-tools-3.14/bin/inotifywait-mrq --timefmt '%d/%m/%y  %H:%M'  --format '%T %w%f' -e delete/backup

                                                                

6.編寫腳本

/server/scripts/路徑下新建一個inotify.sh的腳本

mkdir -p/server/scripts

vim/server/scripts/inotify.sh

腳本內容

#!/bin/bash

#written bylizheng

#about inotofy

#para

host01=192.168.0.111     #定義的變量,slaveip地址 

src=/backup/                    #master數據的目錄

dst=backup                        #rsync中定義的模塊

user=lizheng          #rsync中設置的用戶

rsync_passfile=/etc/rsync.password             #密碼文件

inotify_home=/usr/local/inotify-tools-3.14/   #inotify的路徑

#judge

if  [ ! -e"$src" ] \

  ||  [! -e "${rsync_passfile}" ]\

  ||  [! -e "${inotify_home}/bin/inotifywait" ]\

  ||  [! -e "/usr/bin/rsync" ];

then

  echo"Check File and Folder"

  exit 9

fi

 

${inotify_home}/bin/inotifywait-mrq --timefmt '%d/%m/%y  %H:%M'  --format '%T %w%f' -eclose_write,create,attrib,delete $src \

| while read file

          do

      # rsync -avzP --delete --timeout=100--password-file=${rsync_passfile} $src $user@$host01::$dst > /dev/null2>&1

 

執行後臺運行

sh inotify.sh&

查看後臺執行

ps -ef |grep ino

關於錯誤

@ERROR: authfailed on module test
rsync error: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]

檢查服務器A存儲密碼文件和服務器B密碼文件。
服務器A密碼文件/etc/rsyncd.secrets 格式爲: username:password
服務器B密碼文件password.rsync 格式爲:password

文件權限錯誤

 

password filemust not be other-accessible
continuing without password file
Password:
@ERROR: auth failed on module ***
rsync error: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]

檢查服務器A存儲密碼文件和服務器B密碼文件。
服務器A密碼文件 /etc/rsyncd.secrets權限爲600 chmod 600/etc/rsyncd.secrets

服務器B密碼文件 password.rsync 權限爲600:chmod 600 password.rsync

 

附錄:關於參數

inotifywait命令參數

-m是要持續監視狀態。

-r遞歸查詢目錄。

-q打印監控事件的信息。

-e指定要監視的事件列表。

--timefmt是指定時間的輸出格式。

--format指定文件變化的詳細信息。

--excludei<pattern>:排除文件和目錄時,不區分大小寫

 

可監聽的事件

-e|--event<event1>....

 

事件

描述

access

訪問,讀取文件。

modify

修改,文件內容被修改。

attrib

屬性,文件元數據被修改。

move

移動,對文件進行移動操作。

create

創建,生成新文件

open

打開,對文件進行打開操作。

close

關閉,對文件進行關閉操作。

delete

 

刪除,文件被刪除。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章