Linux下inotify+rsync文件實時同步


  • 使用背景

與傳統的cptar備份方式相比,rsync具有安全性高、備份迅速、支持增量備份等優點,通過rsync可以解決對實時性要求不高的數據備份需求,例如定期的備份文件服務器數據到遠端服務器,對本地磁盤定期做數據鏡像等。
 隨着應用系統規模的不斷擴大,對數據的安全性和可靠性也提出的更好的要求,rsync在高端業務系統中也逐漸暴露出了很多不足,首先,rsync同步數據時,需要掃描所有文件後進行比對,進行差量傳輸。如果文件數量達到了百萬甚至千萬量級,掃描所有文件將是非常耗時的。而且正在發生變化的往往是其中很少的一部分,這是非常低效的方式。其次,rsync不能實時的去監測、同步數據,雖然它可以通過linux守護進程的方式進行觸發同步,但是兩次觸發動作一定會有時間差,這樣就導致了服務端和客戶端數據可能出現不一致,無法在應用故障時完全的恢復數據。基於以上原因,rsync+inotify組合出現了!

 

 

  • 相關介紹

Inotify 是一個Linu內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等(必須有不低於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

 

  • 安裝與配置rsync

1、安裝rsync服務端

yum install rsync xinetd

2、編輯配置文件,設置開機啓動rsync

vi /etc/xinetd.d/rsync    #disable後的參數改爲no

3、創建rsyncd.conf配置文件

vi /etc/rsyncd.conf

use chroot=no  #默認爲true,修改爲no,增加對目錄文件軟連接的備份

max connections=4 #最大連接數位4

pid 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並且服務器目錄讀寫權限允許那麼上載是允許的。默認值爲yes

list=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 #重新啓動

 

 

  1. 安裝rsync客戶端

yum install rsync xinetd 

  1. 編輯配置文件,設置開機啓動rsync

vi /etc/xinetd.d/rsync    #disable後的參數改爲no

  1. 創建密碼認證文件(客戶端只需要存在密碼)

Vi /etc/roothome.txt

1.q1.q

 

測試客戶端是否可以向服務器上傳數據

 

  • 安裝inotify-tools工具,實現rsync實時同步

uname –a #最小2.6.13內核

  1. 安裝inotify-tools

yum install make gcc gcc-c++  #安裝編譯工具

  1. tar zxvf inotify-tools-3.13.tar.gz  #解壓

cd inotify-tools-3.13#進入解壓目錄

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

make  #編譯

make install #安裝

  1. 設置系統環境變量,添加軟連接

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

  1. 修改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實例最大值

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章