簡介shell
rsync=remote sync,即遠程數據同步備份工具,最大的優點就是快速安全
特性bash
能夠鏡像保存整個目錄樹和文件系統;服務器
能夠很容易作到保持原來文件的權限、時間、軟硬連接等等;ssh
無須特殊權限便可安裝; socket
優點tcp
快速:ide
第一次同步時 rsync 會複製所有內容,但在下一次只傳輸修改過的文件;工具
rsync 在傳輸數據的過程當中能夠實行壓縮及解壓縮操做,所以可使用更少的帶寬; 測試
安全:
可使用scp、ssh等方式來傳輸文件,固然也能夠經過直接的socket鏈接;
工做模式
shell模式:也稱本地模式,相似cp;
遠程shell模式:此時可使用ssh協議承載其數據傳輸過程;
列表模式:僅列出源的內容,使用選項-nv便可,相似ls;
服務器模式:此時rsync工做爲守護進程,可以接受客戶端的數據傳輸請求;在使用時,能夠在客戶端使用rsync命令把文件發送給守護進程,也能夠向服務器請求獲取文件;
經常使用使用選項一級
-n:# 測試指令,在不肯定命令可否能按照意願執行時,務必要先進行測試 -v:--verbose # 詳細輸出模式 -q:--quiet # 靜默模式 -c:--checksum # 開啓校驗功能,強制對文件傳輸進行校驗 -r:--recursive # 遞歸複製 -a:--archive # 歸檔,保留文件的原有屬性,等同於-rlptgoD,通常都使用此選項 -p:perms # 保留文件的權限 -t:times # 保留文件的時間戳,很重要,保持源端文件和目的端文件的mtime一致能避免重複同步問題 -l:links # 保留文件的符號連接 -g:group # 保留文件的屬組 -o:owner # 保留文件的屬主 -D:--devices # 保留設備文件
注:對-r選項的重點解釋
經常使用使用選項二級
-e ssh # 表示使用ssh協議做承載(rsync不具有加密功能) -z # 對文件壓縮後傳輸 --progress # 顯示每一個文件傳輸進度條 --stats # 顯示傳輸文件的統計信息 --existing # 不一樣步新文件,只同步已存在目的端的文件 --ignore-existing # 不更新已存在文件,只同步新文件 --delete # 目的端刪除源端不存在的文件,即保持和源端一致 --delete-before # 默認刪除策略,同步前刪除目的端文件 --delete-after # 刪除策略,同步後刪除目的端文件 --delete-excluded # 專門指定需在目的端刪除的文件,後跟--exclude選項 --exclude=PATTERN # 源端匹配PATTERN模式的文件,屏蔽其同步 --exclude-from=FILE # 從文件中讀取PATTERN
配置rsync以daemon方式運行
設定rsync服務器端
安裝並啓動xinetd
# 安裝程序 yum -y install xinetd rsync # 配置文件設置 # vi /etc/rsyncd.conf # Global Settings uid = nobody # 運行rsync的用戶 gid = nobody # 運行rsync的組 use chroot = no # 關閉chroot max connections = 2 # 最大鏈接數 strict mode = yes # 開啓對密碼文件權限的嚴格限制,不能被除rsync運行用戶之外的用戶訪問,即密碼文件權限通常得是600 pid file = /var/run/rsyncd.pid # pid文件 log file = /var/log/rsyncd.log # 日誌文件 # Directory Settings [mydata] # 對於備份目錄的模塊名,在同步時使用 path = /mydata/data # 需備份的數據目錄 ignore errors = yes # 同步時,忽略錯誤 read only = no # 非只讀 write only = no # 非只寫 hosts allow = 172.16.0.0/16 # 訪問控制,容許訪問的來源IP段 hosts deny = * # 訪問控制,不容許訪問的來源IP,此處*表明所有 list = false # 不容許列出目錄 uid = root # 會覆蓋global settings的相關配置 gid = root # 同上 auth users = jason # 容許同步數據的用戶,在此只有一個jason secrets file = /etc/rsyncd.passwd # 密碼文件目錄
配置密碼文件/etc/rsyncd.passwd
# 格式:username:password, # vi /etc/rsyncd.passwd jason:jason123 chmod 600 /etc/rsyncd.passwd
配置服務啓動
chkconfig rsync on service xinetd start # 注:rsync被xinetd調用後監聽在873/tcp端口
客戶端配置
客戶端也必須配置密碼文件,但格式略有不一樣
格式:password # vi /etc/rsyncd.passwd jason123 chmod 600 /etc/rsyncd.passwd
測試數據同步的用法
若是須要作週期性操做,則須要將命令寫入crontab中:
# crontab -e */5 * * * * /usr/bin/rsync -a --password-file=/etc/rsyncd.passwd jason@172.16.251.182::mydata /data &>/dev/null
高級應用:rsync+inotify實現數據實時同步
簡介
rsync和crontab結合雖然能夠實現數據定時同步,但對於須要實時備份數據的場景就不適用了,此時就可藉助於inotify了;
inotify其實是Linux Kernel中的一個特性,能夠監控文件系統,好比刪除、讀、寫和卸載操做等;
能夠利用inotify的監控功能,當待備份文件出現改變(如新增,刪除,修改等)時,及時通知rsync進行數據同步操做,就實現了實時同步的目的;
原理說明
由於是發起rsync的主動同步,並且是推送(即PUSH)數據,只能是從rsync客戶端向rsync服務器端推送數據,這點與rsync+crontab形式的從服務器端拉取(即PULL)數據不一樣,區別以下
具體部署
rsync的服務器端和客戶端的配置與上面所述基本相同,再也不贅述;
在rsync客戶端再也不是拉取數據,而是推送數據,首先安裝inotify-tools,其中包含所需的inotifywait文件系統監控工具
yum -y install inotify-tools
而後配置運行一個後臺程序,用以實時監控待備份的數據目錄,下面用例中監控本地/tmp目錄,將數據同步至rsyns服務器的mydata模塊對應的目錄下
更多技巧
由於inotify是針對文件系統的監控,很是靈敏,爲了防止一些臨時文件或者大文件的不斷同步問題,可利用以下技巧:
解決編輯文件時產生臨時文件同步:--exclude ".*(swp|swx|~)"
解決寫入大文件時不斷同步的問題:-e close_write,delete,create,attrib