一、rsync實現兩台服務器數據同步的原理:
Rsync 是基於rsync算法校驗源(SRC)與目標(DEST)之間的差異實現數據同步的。也就是說,當使用rsync工具同步數據時候,只復制源(SRC)發生改變的文件,到目標(DEST),這類似於增量備份。所以rsync同步數據的速度是很快的。但是rsync的傳輸性能有點差,在海量小文件需要同步時,表現很差勁。因為rsync是基於文件同步的(不是塊級別的),在傳輸之前還要進行校驗。
Rsync的工作模式有多中,使用rsync的服務模式來構建:主/從服務器的數據同步。此時rsync工作為守護進程監聽在:TCP/873, 能接收客戶端的數據同步請求。
客戶端發出的數據同步請求方式有兩種:
1、 從遠程rsync服務器拉取數據到本地
例:
從遠程rsync服務器拉取數據(把rsync導出的存儲空間中的所有文件鏡像到本地)到本地的/web目錄
2、往遠程服務器推送數據
例:
往遠程rsyn服務器導出的存儲空間(web)推送數據(文件fstab)
使用rsync協議向遠程rsync服務器導出的存儲空間(web)推送數據(鏡像目錄/etc)
二、那么如何實現:實現兩台服務器的數據同步呢?
要點:只要當數據改變時,rsync客戶端往rsync服務器推送數據或從主服務器拉取數據,就可以實現兩台服務器數據同步了。
1、選擇rsync客戶端的工作模式:
因為:rsync客戶端向服務端發出的數據同步請求命令的方式有兩種(推送數據/拉取數據):那么,Rsync客戶端是從rsync服務器拉取數據(鏡像數據)還是rsync客戶端推送(上傳)數據,這要視,同步數據源放在rsync服務器端還是放在rsync客戶端?
說明:本實驗的同步數據源存放在rsync客戶端192.168.60.40所在文件系統的:/web目錄中,所以
使用“推送模式”。
2、選擇觸發rsyc客戶端從rsync服務器端拉取數據或推送數據的方式?
說明:
第1種方式,不能保證兩台服務器的數據是實時同步的,因為數據發生改變與rsync客戶端發出同步請求命令不能聯運起來。如果,我們的數據更新頻度很快的話,往往會造成某台服務器的數據落后很多另一台服務器的。而第2種解決方案,只要數據發生改變就會發生數據同步請求,它是實時的。
Rsync + inotify 機制實現的兩台服務器數據同步如下圖如示:

三、在192.168.60.99主機搭建rsync服務器
Rsync工作於服務模式,要為其提供配置文件,配置文件如下:
四、在192.168.60.40安裝inotifywatch工具;
要使用inotifywatch工具定義inotify監控的對象和監控事件。Inotify工作在內核空間。
Inotifywatch會把inotify監控到的事件輸出到標准輸出來。
安裝步驟:
五、在客戶端192.168.60.40設置inotify 與 rsync聯動;
聯動原理:
可以通過管道,把innotify監控到的事件送到while循環,由read讀取到有監控事件發生,就執行while循環體內的rsync同步數據請求命令。這樣就實現了inotify與rsync的聯運。代碼如下:
六、測試;
1、啟用服務
說明:這里選擇rsync由超級守護進行xinetd管理。所以,要啟用xinetd服務。
啟動 xinetd服務
開啟rsync服務
2、在rsync服務端運行inotify.sh腳本
說明:在后台運行。
注意:rsync服務器監聽的端口為:TCP/873
3、查看rsync服務器192.168.60.99輸出的存儲空間的數據文件
4、在rsync客戶端192.168.60.40,復制一些文件到被inotify監控的目錄/web中
5、查看rsync服務器輸出的存儲空間/web是否有對應的文件
OK!!!
