rsync+inotify詳解和配置

rsync + inotify簡介

inotify是一種強大的、細粒度的、異步的機制,它滿足各種各樣的文件監控需要。在單獨使用rsync同步時,每次同步它會把全部的文件讀取一遍,而inotify+rsync同步是觸發式同步。

 

 Rsync是一個遠程同步工具,融合了cp,和scpRsync 使用所謂的“ Rsync 演算法 ”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。運行 Rsyncserver 的機器也叫backupserver ,一個 Rsyncserver 可同時備份多個 client 的數據;也可以多個 Rsync server 備份一個client 的數據。特點:1、可以鏡像保存整個目錄樹或文件系統;2、較高的數據傳輸效率;3、可以藉助於ssh實現安全數據傳輸;4、支持匿名傳輸;

 

rsync命令的工作模式:

              第一種模式:shell模式,也稱作本地模式;

              第二種模式:遠程shell模式,可以利用ssh協議承載其遠程傳輸過程;

              第三種模式:列表模式,僅列出源中的內容,-nv

              第四種模式:服務模式,此時rsync工作爲守護進程,能接收客戶端的數據同步請求

rsync命令的選項:

              -n: 同步測試,不執行真正的同步過程;

              -v: 詳細輸出模式

              -q: 靜默模式

              -c: checksum,開啓校驗功能

              -r: 遞歸複製

注意:rsync命令中,如果源路徑是目錄,且給複製路徑時末尾有/,則會複製目錄中的內容,而非目錄本向;如果末尾沒有/,則會同步目錄本身及目錄中的所有文件;目標路徑末尾是否有/無關緊要;

 

              -a: 歸檔,保留文件的原有屬性;

              -p: 保留文件的權限;

              -t: 保留文件的時間戳;

              -l: 保留符號鏈接

              -g: 保留屬組

              -o: 保留屬主

              -D:保留設備文件

               -e ssh: 使用ssh作爲傳輸承載;

              -z: 壓縮後傳輸;

               --progress: 顯示進度條

              --stats: 顯示如何執行壓縮和傳輸

Accessvia rsync daemon(語法格式):

        Pull拉取文件: rsync [OPTION...] [USER@]HOST::SRC...[DEST]

                     rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

         Push推送文件: rsync [OPTION...] SRC...[USER@]HOST::DEST

                     rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

rsync服務模式例:在172.16.31.31 當服務器,172.16.31.30,當客戶端,在服務器上創建/data 目錄,rsync自己監聽,因爲是瞬時守護進程,要藉助於超級守護進程。

1,在服務器端安裝超級守護進程

        #yum installxinetd  

       #chkconfig   rsync on 

安裝完後,會在/etc/xinetd.d/目錄下生成一個rsync文件

2,編輯rsync文件

      disable= yes  改爲 no           啓用rsync服務

 

 

3、爲rsync提供配置文件

                     /etc/rsyncd.conf

 

                     配置文件分兩段:

                     全局配置段:1

                     共享配置段:多個                

                            [SHARE_NAME]

 

                     配置示例:

                     #Global Settings                       //全局定義段,只能有一個。

                     uid= nobody

                     gid= nobody

                     usechroot = no                            // rsync時是否支持chroot

                     maxconnections = 10                 //最大連接次數

                     strictmodes = yes                      //啓用嚴格模式

                     pidfile = /var/run/rsyncd.pid

                     logfile = /var/log/rsyncd.log

 

                     #Directory to be synced             //定義同步的目錄,可以有多個

                     [tools]                    

                     path= /data                                

                     ignoreerrors = yes                      //傳輸數據時是否忽略錯誤

                     readonly = no

                     writeonly = no

                     hostsallow = 172.16.0.0/16         //允許哪些主機通過,也就是白名單

                     hostsdeny = *                   

                     

            list= false                                //允許不允許列出文件

                      uid = root                               //指定此共享使用那個用戶身份運行

                      gid = root                              //  指定此共享使用那個用戶組身份運行

           

3、啓動服務

                     #service xinetd start

 

                     監聽於873/tcp

 

測試
    rsync /etc/fstab   172.16.31.31::tools

    rsync -a /etc/pam.d   172.16.31.31::tools    //推送目錄

        rsync -a/etc/pam.d  /   172.16.31.31::tools   //推送文件

 

       rsync -a172.16.31.31::tools ./                  //拉取目錄

       rsync -a172.16.31.31::tools/centos.repo ./           //拉取文件

 

也可以基於用戶認證配置,在[tools]最後添加

auth users = USER1, USER2   指定可以通過rsync同步的用戶

 secrets file =/etc/rsyncd.passwd      指定驗證用戶的文件

然後創建密碼文件/etc/rsyncd.passwd

                     username:password

 

                     此文件不能允許其它用戶有訪問權限,且密碼不能超過8個字符;

                            chmod 666 etc/rsyncd.passwd

用法 rsync [email protected]::tools/./

 

 

 

INOTUFY

不過這樣做有缺陷,在傳數據的過程中,會出現斷電,數據中斷什麼的,所以這時候類外一個技術inotify,彌補了這個缺陷

inotify: 在服務器端,可用於定義監控指定的目錄下的所有文件,一旦有文件的元數據發生改變,即會通知客戶端來拉取  

編譯安裝

           #tar xf inotify-tools-3.14.tar.gz 
                    #cdinotify-tools-3.14 
                   #./conifgure 
                    #make&& make install   

           #cd /usr/local/bin

                    #ls

                     inotifywait  inotifywatch    生成這兩個文件

           #yum install inotify-tools

inotifywait用於等待文件或文件集上的一個特定事件,它可以監控任何文件和目錄設置,並且可以遞歸地監控整個目錄樹。 

inotifywatch用於收集被監控的文件系統統計數據,包括每個inotify事件發生多少次等信息

 

inotifywait相關參數   
       -m --monitor,表示始終保持事件監聽狀態。 
       -r --recursive,表示遞歸查詢目錄。 
       -q --quiet,表示打印出監控事件。 
       -e --event,通過此參數可以指定要監控的事件

 

 

實驗內容:2個客戶端,一個rsync + inotify服務器

serveice1  ip  172.16.31.31

serveice1  ip  172.16.31.32

服務器端   ip  172.16.31.30

 

安裝Rsync服務端S1

#yum -y install xinetdrsync

2  rsync服務提供配置文件

uid = nobody

gid = nobody

use chroot = no

max connections = 5

timeout = 600

pid file = /var/run/rsyncd.pid

log file = /var/log/rsyncd.log

[s1]

path = /s1/data

ignore errors = yes

read only = no

write only = no

hosts allow = 172.16.31.30

hosts deny = *

list = yes

uid = root

gid = root

auth users = s1user

secrets file = /etc/s1.passwd



3  創建目錄

 # mkdir /s1/data

 #vim /etc/s1.passwd

   s1user:user

 #chmod 600 /etc/ftp.passwd

 

4  配置Rsync服務端(172.16.31.30

#Global Settings

uid = nobody

gid = nobody

use chroot = no

max connections = 5

timeout = 600

pid file = /var/run/rsyncd.pid

log file = /var/log/rsyncd.log

[s2]

path = /s2/data

ignore errors = yes

read only = no

write only = no

hosts allow = 172.16.31.32

hosts deny = *

list = yes

uid = root

gid = root

auth users = s2user

secrets file = /etc/s2.passwd

5 創建目錄 

 # mkdir /s2/data

 #vim /etc/s2.passwd

   s2user:user

 #chmod 600 /etc/s2.passwd

6  設置 (172.16.31.32)rsync 客戶端的密碼文件,客戶端只需要設置 rsync 同步的密碼即可,不用設置用戶名  

#echo "s1user" > /etc/web.passwd

#echo "s2user" > /etc/ftp.passwd

#chomd 600 /etc/s1.passwd

#chmod 600 /etc/s2.passwd

 

rsync客戶端(172.16.31.30)編寫rsync腳本

#!/bin/bash

src=/var/web/

des1=s2

des2=s1

host1=172.16.31.32

host2=172.16.31.31

user1=s2

user2=s1

/usr/bin/inotifywait -mrq--timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -emodify,delete,create,attrib $src | while read file DATETIME DIR; 

do

/usr/bin/rsync -vzrtopg --delete --progress $src$user1@$host1::$des1 --password-file=/etc/s2.passwd

/usr/bin/rsync -vzrtopg --delete --progress $src$user2@$host2::$des2 --password-file=/etc/s1.passwd

echo "${files} was rsynced" >> /var/log/rsync.log2>&1

done

 接着,將這個腳本命名爲rsync.sh,放到/var/web目錄下,然後給定可執行權限,放到後臺運行: 

  #chmod 755/var/web/rsync.sh

 

 

 

 

 




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