Linux下inotify rsync檔案實時同步

2021-08-28 06:30:29 字數 4360 閱讀 8835

與傳統的cp、

tar備份方式相比,

rsync

具有安全性高、備份迅速、支援增量備份等優點,通過

rsync

可以解決對實時性要求不高的資料備份需求,例如定期的備份檔案伺服器資料到遠端伺服器,對本地磁碟定期做資料映象等。

隨著應用系統規模的不斷擴大,對資料的安全性和可靠性也提出的更好的要求,

rsync

在高階業務系統中也逐漸暴露出了很多不足,首先,

rsync

同步資料時,需要掃瞄所有檔案後進行比對,進行差量傳輸。如果檔案數量達到了百萬甚至千萬量級,掃瞄所有檔案將是非常耗時的。而且正在發生變化的往往是其中很少的一部分,這是非常低效的方式。其次,

rsync

不能實時的去監測、同步資料,雖然它可以通過

linux

守護程序的方式進行觸發同步,但是兩次觸發動作一定會有時間差,這樣就導致了服務端和客戶端資料可能出現不一致,無法在應用故障時完全的恢復資料。基於以上原因,

rsync+inotify

組合出現了!

inotify 

是乙個2.6.13

的核心版本)

rsync是類unix系統下的資料映象備份工具——remote sync。一款快速增量備份工具remote sync,遠端同步支援本地複製,或者與其他ssh、rsync主機同步

環境描述

配置環境:centos 6.5

rsync版本:rsync-3.0.6

inotify版本:inotify-tools-3.13

伺服器端:192.168.1.3

客戶端:192.168.1.4

1、安裝rsync服務端

yum install rsync xinetd

2、編輯配置檔案,設定開機啟動

rsync

vi /etc/xinetd.d/rsync    #

將disable

後的引數改為no3

、建立rsyncd.conf

配置檔案

vi /etc/rsyncd.conf

use chroot=no  #

預設為true

,修改為

no,增加對目錄檔案軟連線的備份

max connections=4 #

最大連線數字

4pid file=/var/run/rsyncd.pid   #pid

檔案的存放位置

log file=/var/log/rsyncd.log   #

日誌檔案的位置

lock file=/var/run/rsync.lock  #

支援max connections

引數的鎖檔案

[roothome]#

自定義名稱

uid=root   #

設定rsync

執行許可權為

root

gid=root   #

設定rsync

執行許可權為

root

path=/var/roothome     #rsync

服務端資料目錄路徑

comment=roothome   #

模組名稱與自定義名稱相同

ignore errors=yes  ·# rsyncd

在判斷是否執行傳輸時的刪除操作時忽略

server

上的io

錯誤,一般來說

rsync

在出現io

錯誤時將將跳過

--delete

操作,以防止因為暫時的資源不足或其它

io錯誤導致的嚴重問題

read only=no   #

設定是否允許客戶上載檔案。如果為

yes那麼任何上載請求都會失敗,如果為

no並且伺服器目錄讀寫許可權允許那麼上載是允許的。預設值為

yeslist=no#

使用者請求列出可使用的模組列表時,該模組是否被列出

auth users=root#

指定由空格或逗號分隔的使用者名稱列表,只有這些使用者才允許連線該模組

這裡的使用者和系統使用者沒有任何關係

。如果"auth users"

被設定,那麼客戶端發出對該模組的連線請求以後會被

rsync

請求challenged

進行驗證身份這裡使用的

challenge/response

認證協議。使用者的名和密碼以明文方式存放在

"secrets file"

選項指定的檔案中。預設情況下無需密碼就可以連線模組

(也就是匿名方式

)secrets file=/etc/roothome.pass#

指定乙個包含定義使用者名稱

:密碼對的檔案。只有在

"auth users"

被定義時,該檔案才有作用。檔案每行包含乙個

username:passwd

對。一般來說密碼最好不要超過

8個字元。沒有預設的

secures file

名,需要限式指定乙個

(例如:

/etc/rsyncd.passwd)

。注意:該檔案的許可權一定要是

600,否則客戶端將不能連線伺服器

4、建立使用者認證檔案

vi /etc/rsync.pass

root:1.q1.q

5、設定檔案許可權

chmod 600 /etc/rsyncd.conf #

設定檔案所有者讀取、寫入許可權

chmod 600 /etc/roothome.pass  #

設定檔案所有者讀取、寫入許可權

6、啟動

rsync

/etc/init.d/xinetd start  #

啟動service xinetd stop   #

停止service xinetd restart #

重新啟動

安裝rsync

客戶端yum install rsync xinetd 

編輯配置檔案,設定開機啟動

rsync

vi /etc/xinetd.d/rsync    #

將disable

後的引數改為

no建立密碼認證檔案(客戶端只需要存在密碼)

vi /etc/roothome.txt

1.q1.q

測試客戶端是否可以向伺服器上傳資料

最小2.6.13

核心安裝

inotify-tools

yum install make gcc gcc-c++  #

安裝編譯工具

tar zxvf inotify-tools-3.13.tar.gz  #

解壓cd inotify-tools-3.13#

進入解壓目錄

./configure --prefix=/usr/local/inotify  #

配置make  #

編譯make install #

安裝設定系統環境變數,新增軟連線

echo "path=/usr/local/inotify/bin:$path" >>/etc/profile.d/inotify.sh

source /etc/profile.d/inotify.sh  #

使設定立即生效

echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf

ln -s /usr/local/inotify/include  /usr/include/inotify

修改inotify

預設引數(

inotify

預設核心引數值太小)

修改引數:

sysctl -w fs.inotify.max_queued_events="99999999"

sysctl -w fs.inotify.max_user_watches="99999999"

sysctl -w fs.inotify.max_user_instances="65535"

vi /etc/sysctl.conf #

新增以下**

fs.inotify.max_queued_events=99999999   #inotify

佇列最大長度

fs.inotify.max_user_watches=99999999    #

要同步的檔案包含多少目錄

fs.inotify.max_user_instances=65535    #

每個使用者建立

inotify

例項最大值

Linux下Redis下安裝

redis安裝 檢查是否安裝redis ps ef grep redis2.檢查gcc服務是否安裝成功 rpm qa grep gcc注 安裝成功則顯示 mkdir redis5.解壓redis安裝包 tar zxvf redis 2.8.17 tar.gz c usr local redis 解壓...

Linux下程式設計

windows下我的環境為 windows10 vs2015 opencv3.4.0 opencv3.4.0 contrib python linux下我的環境為 ubuntu16004 也有ubuntu1804 opencv3.4.0 opencv3.4.0 contrib python gnu ...

linux下萬用字元

萬用字元是一類鍵盤字元,有星號 和問號 當查詢檔案呀資料夾時,可以使用它來代替乙個或多個真正字元 當不知道真正字元或者不想建入完整名字時,常常使用萬用字元代替乙個或多個真正字元。星號 可以使用星號代替0個或多個字元。如果正在查詢以aew開頭的乙個檔案,但不記得檔名其餘部分,可以輸入aew,查詢以ae...