1、rsync
man一下sync,就會發現:sync-flush file system buffers,它是一個把緩沖區中的資料同步到檔案系統中的一個指令;而rsync其實就是remote rsync,它是一個遠端同步工具,兼具cp和scp的功能,rsync指令的使用幾乎和scp是一樣一樣的。rsync是通過超級守護程序xinetd進行觸發同步的。
1)優點:與cp和scp相比來說,rsync更快,更安全,支援增量備份。rsync在資料同步的過程中,不像cp一樣全部都拷貝,而是先去比對特征碼,隻有不一樣的才會去拷貝,如果一樣了,就不需再做多餘操作。通過使用rsync+crontab可以解決對實時性要求不是太高的場景。
2)缺點:在這個大資料年代,如果資料量非常大,你每做一次任務計劃,rsync都會先去周遊目标目錄,把所有資料做一次特征碼比對,然後進行差量傳輸,這個過程會是很漫長的,對于那些要求實時性更新比較高的企業來說,無疑是一場噩夢。rsync+inotify組合能夠實時的去監控我們的檔案系統,隻有在資料改變時才會觸發它去同步!
rsync有4種模式
1.本地模式。
2.遠端shell模式
3.查詢模式
4.C/S模式
2、inotify
Inotify 是一種強大的、細粒度的、異步的檔案系統事件監控機制,linux核心從2.6.13起,加入了Inotify支援,通過Inotify可以監控檔案系統中添加、删除,修改、移動等各種細微事件,利用這個核心接口,第三方軟體就可以監控檔案系統下檔案的各種變化情況,而inotify-tools就是這樣的一個第三方軟體。
3、rsync+inotify 好處
1)伺服器性能:rsync+crontab會定時去檢查是否有檔案更新,這勢必會造成伺服器性能下降;而rsync+inotify組合是觸發式更新,隻有在資料檔案有變化時,才會去更新,是以相對前者而言,是提高了伺服器性能。
2)資料實時性:rsync+crontab是周期性任務計劃,不能保證資料的實時性;rsync+inotify組合是觸發式更新,隻要有資料變化,就立刻同步更新。
rsync指令是快速、多用、遠端和本地檔案複制工具;
指令文法格式:
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
選項:
-v, --verbose:冗長資訊;
-r, --recursive:對目錄遞歸;
1.本地模式
rsync -rv /etc/passwd ./
拷貝passwd 到目前目錄
2.遠端shell模式
rsync -rv /etc/passwd 172.18.11.12:/tmp
把passwd拷貝到遠端主機上,類似于scp指令需要使用者密碼;
3.清單模式
rsync -r 172.18.11.12:/tmp
檢視遠端目錄下的檔案
重點是第四種模式,實作資料同步:
4.C/S模式,資料同步:
實驗環境:
master:172.18.11.11
slave:172.18.11.113
實驗目标:
實作master主機的/var/ftp/目錄下隻要有檔案變化(可定義),會實時同步到slave主機上的/home/ftp目錄下。
如果不是用root使用者,首先確定各主機建立相同的使用者;
在slave端:
]# vim /etc/rsyncd.conf
<a href="http://s5.51cto.com/wyfs02/M00/80/51/wKiom1c9qEzByHpkAABcd49QHok057.png" target="_blank"></a>
建立密碼檔案 /etc/rsyncd.pass 如下格式,并確定權限為600或400
]# vim /etc/rsyncd.pass
<a href="http://s3.51cto.com/wyfs02/M00/80/4E/wKioL1c9qZyg9OZjAAAMZbeM8co553.png" target="_blank"></a>
]# chmod 600 /etc/rsyncd.pass
啟動守護程序
]# rsync --daemon
]# netstat -tnlp|grep rsync
檢視873端口監聽;
在master端:
<a href="http://s3.51cto.com/wyfs02/M00/80/51/wKiom1c9qSrxOfJ5AAAKn5vwmq8889.png" target="_blank"></a>
注意:此密碼檔案隻輸入在slave端設定的密碼即可;
手動測試,master端passwd檔案是否能同步到slave端設定的目錄中;
解釋:
root為slave端指定的使用者;
172.18.11.113為slave端位址;
/etc/rsyncd.pass為存放slave端設定的指定使用者的密碼;
可在slave端的同步目錄檢視是否收到passwd檔案;
安裝inotify-tools
]# yum -y install inotify-tools
編寫監控腳本并加載到背景執行:
]# vim /root/rsync.sh
<a href="https://s3.51cto.com/wyfs02/M00/8E/67/wKiom1i_ifCSsu2wAABuiIlbzvw645.png" target="_blank"></a>
将腳本加入背景執行
]# sh rsync.sh &
實時同步測試:
]# for a in `seq 200`;do touch $a;done
建立200個檔案;
]# ll --time-style=full-iso
<a href="http://s1.51cto.com/wyfs02/M01/80/51/wKiom1c9rzzg3yuJAACvkozzoYE307.png" target="_blank"></a>
再到slave端檢視:
]# ll --time-style=full-iso /home/ftp
<a href="http://s2.51cto.com/wyfs02/M01/80/4F/wKioL1c9sKCDKy63AADiw2jNsIM594.png" target="_blank"></a>
實作了資料實時同步。
本文轉自 crystaleone 51CTO部落格,原文連結:http://blog.51cto.com/linsj/1775162,如需轉載請自行聯系原作者