rsync+inotify實時數據同步
1,rsync命令用法
格式:rsync [選項..] 源目錄 目標目錄
區別:同步與復制的差異
復制:完全拷貝源到目標
同步:增量拷貝,只傳輸變化過的數據
2,本地同步
rsync [選項..] 本地目錄1 本地目錄2 #把目錄1同步到目錄2下
rsync [選項..] 本地目錄1/ 本地目錄2 #把目錄1下的數據同步到目錄2下
-a :歸檔模式,相當於-rlptgoD
-v :顯示詳細信息
-z :傳輸過程中啟用壓縮/解壓
-n :測試同步過程,不做實際修改 #與-avz連用
--delete :刪除目標文件夾內多余的文檔 #與-avz連用
3,遠程同步
rsync+ssh
--命令
rsync user@host:遠程目錄/ #列出ssh服務端資源
rsync [選項..] user@host:遠程目錄 本地目錄 #下行(下載) 不常用
rsync [選項..] 本地目錄 user@host:遠程目錄 #上行(上傳) 常用
-a :歸檔模式,相當於-rlptgoD
-v :顯示詳細信息
-z :傳輸過程中啟用壓縮/解壓
-n :測試同步過程,不做實際修改 #與-avz連用
--delete :刪除目標文件夾內多余的文檔 #與-avz連用
提示:同步目錄時在目錄後加/,表示同步目錄裏的數據;同步目錄不加/,表示同步此目錄。
4,實現實時同步
1)部署公鑰、私鑰,實現ssh無密碼驗證
[root@svr7 /]# ssh-keygen #虛擬機A生成公鑰、私鑰 一路回車
[root@svr7 /]# ls /root/.ssh #公鑰、私鑰生成的位置
id_rsa id_rsa.pub known_hosts
[root@svr7 /]# ssh-copy-id [email protected] #傳遞公鑰到目標主機(入虛擬機B)
[root@pc207 ~]# ls /root/.ssh #查看上傳到虛擬機B的公鑰
authorized_keys #上傳到客戶機的公鑰文件
2)inotify實時同步
--源碼安裝inotify-tools工具,實現監控目錄內容的變化
[root@svr7 /]# mkdir /myrpm
[root@svr7 /]# tar -xf /tools/inotify-tools-3.13.tar.gz -C /myrpm #減壓
[root@svr7 /]# yum -y install gcc make #安裝編譯環境gcc make
[root@svr7 /]# cd /myrpm/inotify-tools-3.13/
[root@svr7 inotify-tools-3.13]# ./configure #生成Makefile文件
[root@svr7 inotify-tools-3.13]# make #編譯成二進制文件
[root@svr7 inotify-tools-3.13]# make install #安裝
[root@svr7 inotify-tools-3.13]# which inotifywait #查看命令位置
/usr/local/bin/inotifywait
--inotifywait基本用法
inotifywait [選項] 目標文件夾
-m :持續監控(捕獲一個事件後不退出)
-r :遞歸監控,包括子目錄及文件
-q :減少屏幕輸出信息
-qq:無屏幕輸出信息
-e :指定監控的modify move create delete attrib等事件類別
3)書寫shell 腳本
--利用while循環來實現反復檢查單次監控
語法:
while [ 條件 ]
do
循環執行
done
--實現
#vim /jluocc/rsync.sh
#/bin/bash
while inotifywait -rqq /opt
do
rsync -az --delete /opt/ [email protected]:/opt #同步本地opt目錄下的數據到另一臺主機的/opt目錄下
done
#chmod +x /jluocc/rysnc.sh #給腳本執行權限
#/jluocc/rsync.sh #運行腳本達到實時數據同步
4)實現開機運行數據同步腳本
#vim /etc/rc.local #打開系統開機默認運行文件
/jluocc/rsync.sh #在文件裏寫入剛才寫的腳本的絕對路徑
#chmod +x /etc/rc.local #rc.local默認沒有執行權限,需要賦予執行權限
5,總結
rsync:實現數據同步
inotifywait:實現監控指定目錄下的數據變化,發生變化返回相應結果
shell腳本:實現inotifywait實時監控,一旦數據變化,將實現rsync數據同步,達到數據的實時同步
rsync+inotify實時數據同步