rsync加inotify實現無間隔文件同步

 一: 工具簡介

 rsync

  它是一款實現遠程同步功能的軟件,它在同步文件的同時,可以保持原來文件的權限、時間、軟硬鏈接等附加信息。 rsync是用 “rsync 算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送文件的變化部分,而不是每次都整體傳送,因此速度相當快。

 inotyify

   inotify是Linux核心子系統之一,做爲文件系統的附加功能,它可監控文件系統並將異動通知應用程序。於Linux核心2.6.13發佈時,被正式納入Linux內核。所以內核版本在2.6.13之前的用戶,就只能通過給內核打補丁的方式來使用此功能了。


 二:rsync

 1)rsync工作模式  

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

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

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

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

  rsync命令的選項 

 -n: 同步測試,不執行真正的同步過程;
 -v: 詳細輸出模式
 -q: 靜默模式
 -c: checksum,開啓校驗功能
 -r: 遞歸複製
 -a: 歸檔,保留文件的原有屬性;
 -p: 保留文件的權限;
 -t: 保留文件的時間戳;
 -l: 保留符號鏈接
 -g: 保留屬組
 -o: 保留屬主
 -D:保留設備文件
 -e ssh: 使用ssh作爲傳輸承載;
 -z: 壓縮後傳輸;
 --progress: 顯示進度條
 --stats: 顯示如何執行壓縮和傳輸

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


 三:inotyify

 1)inotyify工作模式

  inotifywait:wait for changes to files using inotify  使用inotify監控文件變化

   inotifywait [option]  file1 [ file2 ] [ ... ]

  option:

-h, –help輸出幫助信息排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。
-m, –monitor接收到一個事情而不退出,無限期地執行。默認的行爲是接收到一個事情後立即退出。-d, –daemon跟–monitor一樣,除了是在後臺運行,需要指定–outfile把事情輸出到一個文件。
-o, –outfile 輸出事情到一個文件而不是標準輸出。-s, –syslog輸出錯誤信息到系統日誌
-r, –recursive監視一個目錄下的所有子目錄。
-q, –quiet指定一次,不會輸出詳細信息,指定二次,除了致命錯誤,不會輸出任何信息。
–exclude  正則匹配需要排除的文件,大小寫敏感。
–excludei 正則匹配需要排除的文件,忽略大小寫。
-t , –timeout 設置超時時間,如果爲0,則無限期地執行下去。
-e , –event 指定監視的事件。
-c,  –csv輸出csv格式。


inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]


參數:
-h,  –help輸出幫助信息
-v,  –verbose輸出詳細信息
-z,  –zero輸出表格的行和列,即使元素爲空
–exclude 正則匹配需要排除的文件,大小寫敏感。
–excludei 正則匹配需要排除的文件,忽略大小寫。
-r,  –recursive監視一個目錄下的所有子目錄。
-t , –timeout 設置超時時間
-e , –event 只監聽指定的事件。
-a , –ascending 以指定事件升序排列。
-d , –descending 以指定事件降序排列



配置一個rsync+inotify 示意圖

wKioL1P54zCDMbmwAACpKf8Fa5g396.jpg


  分發服務器有數據變化就會把數據傳送給節點一和節點二,節點一和節點二位rsync服務器,分發服務器爲inotify服務器。

配置rsync服務器

yum -y install xinetd #由於rsync服務依賴於xinetd,所以要先把xinetd安裝進來
vim /etc/xinetd.d/rsync 
disable = no

vim /etc/rsyncd.conf #編輯rsyncd.conf 的配置文件
#Gloable Setting    #全局配置文件
uid = root#設定運行用戶
gid = root#設定運行組
use chroot = no#不實用chroot
max connections = 5#設置最大連接數
strict modes = yes#使用密碼文件時,是否檢查其權限
pid file = /var/run/rsyncd.pid#pid文件位置
log file = /var/log/rsyncd.log#日誌文件位置
  
#Directory Setting
[test]#定義一個新的資源
path = /test#指定資源路徑  兩個主機都要使用這個路徑資源
ignore errors = no#不忽略錯誤
read only = no#不使用只讀模式
hosts allow = 172.16.16.0/24#允許哪些網段登錄 這樣可以接入多臺主機,只要網段相同
hosts deny = *#不允許登錄的網段
list = true #是否允許列出文件列表
auth users = user1, user2#可登錄用戶
secrets file = /etc/rsyncd.pw#密碼文件,確保只有屬主有權限

vim /etc/rsyncd.pw

#文件格式爲用戶名:密碼
user1:123
user2:123

chmod 600 /etc/rsyncd.pw #給密碼文件添加權限

 

配置inotify服務器

 tar xf inotify-tools-3.14.tar.gz -C /usr/local/src
 cd /usr/local/src/inotify-tools-3.14/
 ./configure --prefix=/usr/local/inotify-tools
 make && make install
 
 vim /etc/rsyncd.auth #配置用戶文件信息
  user1
  user2
  
 chmod 600 /etc/rsyncd.auth 
 
 爲分發服務器配置如上面安裝完成後編輯以下腳本,讓其自動同步數據。
  vim /bin/inotify.sh 
  
Source=/test
Host=172.16.16.1
Dest=test
Host1=172.16.16.2



/usr/local/inotify-tools/bin/inotifywait -mrq -e modify,delete,create,attrib /test | whil
e read D E F
do
        /usr/bin/rsync -ahqz    --password-file=/etc/rsyncd.auth ${Source}   user1@$Host::${Dest}/
        /usr/bin/rsync -ahqz    --password-file=/etc/rsyncd.auth ${Source}   user2@$Host1::${Dest}/
done



OK 通過以上腳本就可以實現文件之間的同步。

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