程序同步的機制有幾種
rsync
+inotify實時同步
背景
我們都知道,在伺服器間資料同步有一個很好的工具叫rsync,尤其做線上資料備份,可以說是一件利器。但在不同的業務場景下rsync並非萬能,他的缺陷表現在以下兩個方面:
全目錄掃描比對。在決定哪些目錄需要同步到遠端的時候,rsync會進行全目錄的掃描比對,但正在建立或修改的檔案卻是少數,在檔案數量達到幾百萬甚至上千萬的時候,變得非常低效。
實時性不行。rsync不能實時監測,即便透過守護程序觸發,依然有延遲。比如兩個賬房A和B,約定每小時A向B更新一次賬目。此時恰巧C來找A還賬,還賬結果記到了A上,此時A賬房出了故障,賬目全毀。由於不到整點更新賬目,B沒有收到C的還賬記錄。此時B接管A的話,自然不會認C已還賬。
在這種情況下,一種可以實時監控目錄,並對修改隨時進行同步的機制就變得非常有必要。於是,引入rsync+inotify進行同步的機制就誕生了。
二、架構圖
下面我們來看一下rsync+inotify的簡單架構圖:
這裡的inotify-master和inotify-slave只是角色名稱而已,inotify-slave本身不需要inotify。具體工作過程:
inotify-master啟動inotify程序監控磁碟事件
發現磁碟事件以後,inotify觸發本機的rsync客戶端發起同步請求
rsync客戶端發現當前目錄和rsync服務(daemon)端有差異,實施同步
rsync服務端接收更新資料到本地目錄
三、部署
伺服器角色分配如下:
伺服器基本部署如下:
3。1 inotify-slave部署rsync
3。1。1 安裝
執行安裝命令:
yum -y install rsync
驗證安裝:
則安裝成功
3。1。2 配置
將配置檔案
建立虛擬密碼檔案,操作過程如下:
建立相關使用者和目錄許可權,如下:
3。1。3 啟動
操作過程如下:
3。2 inotify-master部署rsync
3。2。1 安裝
只執行安裝過程如3。1。1所示
3。2。2 配置
建立虛擬密碼檔案:
這裡需要注意密碼需要和inotify-salve的/etc/rsync-master。password檔案裡的密碼相同。
3。3 inotify-master部署inotify
3。3。1 安裝inotify-tools
安裝過程如下:
cd /usr/local/src
wget http://github。com/downloads/rvoicilas/inotify-tools/inotify-tools-3。14。tar。gz
tar xzvf inotify-tools-3。14。tar。gz
cd inotify-tools-3。14
。/configure ——prefix=/usr/local/inotify-3。14
make && make install
檢視安裝結果
3。3。2 建立啟動指令碼
建立指令碼目錄(這個目錄位置沒有要求):
mkdir -p /usr/local/inotify-3。14/scripts/
將指令碼檔案
建立測試目錄:
3。3。3 啟動inotify
操作顯示如下:
可以看到,針對兩個監控目錄,開啟了兩個監控程序
四、測試
4。1 rsync服務測試
在inotify-master端建立測試目錄及檔案
mkdir /tmp/rsynctest
echo “This my rsync test” > /tmp/rsynctest/mytest。txt
/usr/bin/rsync -avzP ——password-file=/etc/rsync-slave。password /tmp/rsynctest/ rsync_backup@192。168。200。22::backup1
執行結果如下:
檢視inotify-slave同步結果
新建立的檔案已經成功同步過來
4。2 整體測試
在inotify-master執行
echo “This is my inotify and rsync test” > /data/backup2/inotifytest。txt
顯示如下:
在inotify-slave端檢視執行結果
可以看到inotify-master上的檔案已經傳到了inotify-slave上了