使用場景html
現有服務器A和服務器B,若是服務器A的指定目錄(例如 /home/paul/rsync/
)中的內容發生變動(增刪改和屬性變動),實時將這些變動同步到服務器B的目標目錄中(例如 /home/paul/rsync/
)。linux
數據鏡像備份工具Rsyncgit
Rsync是一個很是快速和靈活的文件複製工具。它支持本機或者是和遠程服務器間的文件複製。Rsync使用了delta-transfer算法,它只須要傳送源端和目標端的文件差別部分,大大減小了網絡帶寬的消耗和複製耗費的時間。Rsync多用於數據備份和鏡像。github
Rsync使用了快速檢查算法,經過比較文件大小或最後修改時間的變化來判斷文件是否須要同步。算法
Rsync鏈接遠程主機有兩種方式:使用ssh或rsync daemon。這裏使用Rsync方式來實現遠程文件備份。centos
Rsync的安裝與操做服務器
安裝Rsync網絡
分別在服務器A和服務器B的terminal執行:ssh
sudo yum install rsync
安裝完畢後,會發現rsync的配置文件位於 etc/rsyncd.conf 。該文件使用daemon方式同步時須要使用,此處暫不介紹。工具
配置服務器A和B之間的免密登陸
服務器A執行:
ssh-keygen ssh-copy-id 服務器B的IP地址
建立源端目錄和目標端目錄
在服務器A中:
mkdir /home/paul/rsync
在服務器B中:
mkdir /home/paul/rsync
在服務器A建立測試文件
echo "Hello from Server A" >> /home/paul/rsync/demo.txt
執行文件傳送命令
在服務器A運行:
# (1) rsync -avPz --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync # (2) rsync -avPz --delete --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync
會發如今demo.txt也出如今了服務器B中/home/paul/rsync目錄。
命令解析:
(1) 將服務器A中的/home/paul/rsync目錄內的文件複製到服務器B(192.168.100.130)的/home.paul/rsync中。
(2) 比較目標端和源端的文件,若是目標端的文件在源端不存在,在目標端刪除該文件。
Rsync存在的問題
Rsync僅是一個文件複製工具,它沒法對源端文件的增刪改操做進行監聽。在源端作出更改後,須要執行rsync命令才能將變動同步到目標端。
Rsync在每次同步前須要掃描整個目錄。若是源目錄內的文件數量比較多,掃描可能須要耗費較多的時間。
爲了知足實時監聽的要求,咱們須要引入另外一個工具:inotify。
文件系統事件監聽工具inotify
inotify-tools爲inotify提供一個簡單接口。它是一個c語言編寫的庫,同時也包含命令行工具。
inotify-tools的詳細介紹請點擊: https://github.com/rvoicilas/inotify-tools/wiki
inotify-tools的安裝
對於centos7系統,依次執行:
yum install -y epel-release yum --enablerepo=epel install inotify-tools
使用inotifywait命令進行事件監聽
監聽腳本以下(inotifywait-rsync.sh):
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib /home/paul/rsync/ | while read file do rsync -avPz --progress /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/ rsync -avPz --delete /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/ echo "${file} was synchronized" done
參數解析
對於每次觸發的監聽時間,inotifywait會執行do和done之間的代碼。在這裏,咱們調用以前所說的rsync命令進行文件同步。
監聽腳本加入crontab
crontab -e * * * * * sh /home/paul/inotifywait-rsync.sh
參考資料
https://rsync.samba.org
https://github.com/rvoicilas/inotify-tools/wiki
您可能感興趣的文章:
文章同步發佈: https://www.geek-share.com/detail/2755097834.html
參考文章: