Rsync的簡單介紹及rsync+inotify實現實時同步更新
rsync是類unix系統下的數據鏡像備份工具——remotesync。一款快速增量備份工具 Remote Sync,遠程同步支持本地複製,或者與其他SSH、rsync主機同步。Rsync是超級進程來管理的,服務端口爲873。
特點:
1、可以鏡像保存整個目錄樹或文件系統;
2、有較高的數據傳輸效率;
3、可藉助於SSH實現安全數據傳輸;
4、 支持匿名傳輸
工作模式:
1、shell模式,也稱作本地模式
2、遠程shell模式,可以利用ssh協議承載其遠程傳輸過程,命令有兩種
3、列表模式,僅列出源中的內容,-nv
4、服務模式,此時rsync工作爲守護進程,能接收客戶端的數據同步請求;
下面爲大家介紹rsync工具的使用
rsync常用命令的選項:
-n: 同步測試,不執行真正的同步過程;
-v: 詳細輸出模式
-q: 靜默模式
-c: checksum,開啓校驗功能
-r: 遞歸複製
-a: 歸檔,保留文件的原有屬性;
-p: 保留文件的權限;
-t: 保留文件的時間戳;
-l: 保留符號鏈接
-g: 保留屬組
-o: 保留屬主
-D:保留設備文件
-e ssh: 使用ssh作爲傳輸承載;
-z: 壓縮後傳輸;
--progress: 顯示進度條
--stats: 顯示如何執行壓縮和傳輸
注意:rsync命令中,如果源路徑是目錄,且給複製路徑時末尾有/,則會複製目錄中的內容,而非目錄本向;如果末尾沒有/,則會同步目錄本身及目錄中的所有文件;目標路徑末尾是否有/無關緊要;
使用示例: [root@localhost~]# rsync -r --stats -e ssh --progress /etc/pam.d [email protected]:/rmp/ 從本機複製文件到另一主機
以下簡單說下rsync工具的服務模式及rsync和inotify的組合使用實現數據實時同步更新
rsync服務模式
1、設定rsync服務器端
# yum -y install xinetd
# chkconfig rsync on
2、爲rsync提供配置文件
/etc/rsyncd.conf
配置文件分兩段:
全局配置段:1個
共享配置段:多個
配置示例:
# Global Settings
uid = nobody//運行RSYNC守護進程的用戶
gid = nobody//運行RSYNC守護進程的組
use chroot = no//不使用chroot
max connections = 10// 最大連接數無限制
strict modes = yes//是否工作在嚴格模式下
pid file = /var/run/rsyncd.pid//鎖文件的存放位置
log file = /var/log/rsyncd.log//日誌記錄文件的存放位置
# Directory to be synced
[tools]//這裏是認證的模塊名,在client端需要指定
path = /data//需要做同步的目錄,不可缺少
ignore errors = yes//表示在複製文件的過程中,若發生錯誤,是繼續複製(yes)還是終止複製(no)
read only = no// 非只讀
write only = no//非只寫
hosts allow = 172.16.0.0/16//允許哪些主機來訪問,做白名單的
hosts deny = *//黑名單
list = false//是否允許用戶列出文件列表
uid = root//
gid = root
3、啓動服務
# service xinetd start
啓動以後查看是否監聽於873/tcp端口
4、使用服務器啓用認證功能
1)在共享定義處加配置便可實現
[tools]
path = /data
ignore errors = yes
read only = no
write only = no
hosts allow = 172.16.0.0/16
hosts deny = *
list = false
uid = root
gid = root
auth users = USERNAME LIST//認證的用戶名,如果沒有這行則表明是匿名,此用戶與系統無關
secrets file = /etc/rsyncd.passwd//密碼和用戶名對比表,密碼文件自己生成
說明: USERNAME LIST爲以逗號分隔的在rsyncd.passwd中存在用戶名的列表;
2)創建密碼文件(文件權限爲600,此文件不能允許其他用戶有權限,並且用戶密碼不能超過8位數)
格式:username:password
3)重啓下服務便實現認證功能
Rsync+inotify的使用
實例是用兩臺服務器簡單實現的,其中文件服務器的IP爲172.16.25.1,inotify服務器的IP爲172.16.25.2
先搭建文件服務器所需要的環境
[root@localhost ~]# yum install xinetd –y //安裝超級守護進程 [root@localhost ~]# mkdir /root/data //創建共享目錄 [root@localhost data]# vim /etc/rsyncd.conf //配置rsync的服務配置文件(下面的文件配置項在上面的rsync服務模式中都已做詳細的介紹,這裏不在詳細的說明) # Global Settings uid = nobody gid = nobody use chroot = no max connections = 10 strict modes = yes pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log # Directory to be synced [tools] path = /root/data/ ignore errors = yes read only = no write only = no hosts allow = 172.16.0.0/16 hosts deny = * list = false uid = root gid = root auth users = nydia secrets file = /etc/rsyncd.passwd [root@localhost data]# vim/etc/rsyncd.passwd //創建認證用戶的密碼文件 nydia:nydia //文件內容只需填入用戶和密碼並使用:隔開即可,並設定此文件的權限爲600 [root@localhost data]# chkconfig rsync on //將服務加入啓動列表中 [root@localhost data]# service xinetd start //然後啓動超級守護進程服務即完成rsync文件服務器的配置
Inotify服務器配置
先爲大家介紹下inotify的概述及使用,然後再開始配置服務
Inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。學習如何將 inotify 集成到您的應用程序中,並發現一組可用來進一步自動化系統治理的命令行工具。
inotifywait
語法:
inotifywait [-hcmrq] [-e ] [-t ] [--format ][--timefmt ] [ ... ]
參數:
-h,–help
輸出幫助信息
@
排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。
–fromfile
從文件讀取需要監視的文件或排除的文件,一個文件一行,排除的文件以@開頭。
-m, –monitor
接收到一個事情而不退出,無限期地執行。默認的行爲是接收到一個事情後立即退出。
-d, –daemon
跟–monitor一樣,除了是在後臺運行,需要指定–outfile把事情輸出到一個文件。也意味着使用了–syslog。
-o, –outfile
輸出事情到一個文件而不是標準輸出。
-s, –syslog
輸出錯誤信息到系統日誌
-r, –recursive
監視一個目錄下的所有子目錄。
-q, –quiet
指定一次,不會輸出詳細信息,指定二次,除了致命錯誤,不會輸出任何信息。
–exclude
正則匹配需要排除的文件,大小寫敏感。
–excludei
正則匹配需要排除的文件,忽略大小寫。
-t , –timeout
設置超時時間,如果爲0,則無限期地執行下去。
-e , –event
指定監視的事件。
-c, –csv
輸出csv格式。
–timefmt
指定時間格式,用於–format選項中的%T格式。
–format
指定輸出格式。
%w 表示發生事件的目錄
%f 表示發生事件的文件
%e 表示發生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定義的時間格式
inotifywatch
語法:
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
參數:
-h, –help
輸出幫助信息
-v, –verbose
輸出詳細信息
@
排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。
–fromfile
從文件讀取需要監視的文件或排除的文件,一個文件一行,排除的文件以@開頭。
-z, –zero
輸出表格的行和列,即使元素爲空
–exclude
正則匹配需要排除的文件,大小寫敏感。
–excludei
正則匹配需要排除的文件,忽略大小寫。
-r, –recursive
監視一個目錄下的所有子目錄。
-t , –timeout
設置超時時間
-e , –event
只監聽指定的事件。
-a , –ascending
以指定事件升序排列。
-d , –descending
以指定事件降序排列。
可監聽事件
注:inotifywatch中的信息轉載於http://www.51rhca.com/archives/133文中
簡單的介紹完以後就接着開始配置服務了
[root@localhost ~]#yum installinotify-tools –y //安裝工具包 [root@localhost ~]# /usr/bin/inotifywait-mrq -e modify,delete,create,attrib /root/data //使用此命令測試inotify工具的效果,在/root/data下創建一個文件可看到inotify工具會做出相應的提醒 [root@localhost ~]# vim /tmp/inotify.sh //編輯inotify自動同步更新的腳本 #!/bin/bash /usr/bin/inotifywait -mrq –timefmt '%d/%m/%y%H:%M'--format '%T %w%f' -e modify,delete,create,attrib /root/data/ | while read file do /usr/bin/rsync -vzrtopg --delete --password-file=/etc/rsyncd.passwd --progress /root/data/ [email protected]::tools echo "${files} was rsynced">>/var/log/rsync.log 2>&1 done [root@localhost ~]# vim /etc/rsyncd.passwd //創建此文件並在其中填入文件服務器設定的用戶密碼 nydia [root@localhost tmp]# bash +x inotify.sh //創建完以後就可以運行此文件了,inotify服務也配置完成了,現在只需測試了 [root@localhost data]# touch 3.abc //在本服務器的/root/data的目錄中創建一個文件之類,然後就可以看到剛纔編寫的腳本有相關提示,並可在文件服務器上查看到已經同步過來的文件了。