首頁 > 易卦

Rsync+inotify實現實時同步

作者:由 網際網路資深ops專家 發表于 易卦日期:2022-09-26

程序同步的機制有幾種

rsync

+inotify實時同步

背景

我們都知道,在伺服器間資料同步有一個很好的工具叫rsync,尤其做線上資料備份,可以說是一件利器。但在不同的業務場景下rsync並非萬能,他的缺陷表現在以下兩個方面:

全目錄掃描比對。在決定哪些目錄需要同步到遠端的時候,rsync會進行全目錄的掃描比對,但正在建立或修改的檔案卻是少數,在檔案數量達到幾百萬甚至上千萬的時候,變得非常低效。

實時性不行。rsync不能實時監測,即便透過守護程序觸發,依然有延遲。比如兩個賬房A和B,約定每小時A向B更新一次賬目。此時恰巧C來找A還賬,還賬結果記到了A上,此時A賬房出了故障,賬目全毀。由於不到整點更新賬目,B沒有收到C的還賬記錄。此時B接管A的話,自然不會認C已還賬。

在這種情況下,一種可以實時監控目錄,並對修改隨時進行同步的機制就變得非常有必要。於是,引入rsync+inotify進行同步的機制就誕生了。

二、架構圖

下面我們來看一下rsync+inotify的簡單架構圖:

Rsync+inotify實現實時同步

這裡的inotify-master和inotify-slave只是角色名稱而已,inotify-slave本身不需要inotify。具體工作過程:

inotify-master啟動inotify程序監控磁碟事件

發現磁碟事件以後,inotify觸發本機的rsync客戶端發起同步請求

rsync客戶端發現當前目錄和rsync服務(daemon)端有差異,實施同步

rsync服務端接收更新資料到本地目錄

三、部署

伺服器角色分配如下:

Rsync+inotify實現實時同步

伺服器基本部署如下:

Rsync+inotify實現實時同步

3。1 inotify-slave部署rsync

3。1。1 安裝

執行安裝命令:

yum -y install rsync

驗證安裝:

Rsync+inotify實現實時同步

則安裝成功

3。1。2 配置

將配置檔案上傳至/etc/目錄下,配置檔案內容有詳細的註釋,各位可以開啟檢視。

建立虛擬密碼檔案,操作過程如下:

Rsync+inotify實現實時同步

建立相關使用者和目錄許可權,如下:

Rsync+inotify實現實時同步

3。1。3 啟動

操作過程如下:

Rsync+inotify實現實時同步

3。2 inotify-master部署rsync

3。2。1 安裝

只執行安裝過程如3。1。1所示

3。2。2 配置

建立虛擬密碼檔案:

Rsync+inotify實現實時同步

這裡需要注意密碼需要和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

檢視安裝結果

Rsync+inotify實現實時同步

3。3。2 建立啟動指令碼

建立指令碼目錄(這個目錄位置沒有要求):

mkdir -p /usr/local/inotify-3。14/scripts/

將指令碼檔案上傳到新建目錄下,指令碼詳細內容可以自己看下,有疑問咱們可以一起溝通一下

建立測試目錄:

Rsync+inotify實現實時同步

3。3。3 啟動inotify

操作顯示如下:

Rsync+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

執行結果如下:

Rsync+inotify實現實時同步

檢視inotify-slave同步結果

Rsync+inotify實現實時同步

新建立的檔案已經成功同步過來

4。2 整體測試

在inotify-master執行

echo “This is my inotify and rsync test” > /data/backup2/inotifytest。txt

顯示如下:

在inotify-slave端檢視執行結果

Rsync+inotify實現實時同步

可以看到inotify-master上的檔案已經傳到了inotify-slave上了

Rsync+inotify實現實時同步

Rsync+inotify實現實時同步