一: 工具簡介
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 示意圖
分發服務器有數據變化就會把數據傳送給節點一和節點二,節點一和節點二位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 通過以上腳本就可以實現文件之間的同步。