天天看點

rsync+inotify實作實時同步

源伺服器          192.168.50.218 

目标伺服器         192.168.50.219

目的:實作源伺服器192.168.50.218 /www檔案夾檔案實時同步到目标伺服器192.168.50.219 的/www目錄下

一、目标伺服器上安裝rsync并配置

#cd /usr/local/src/tarbag/  //切換下載下傳目錄

#wget http://www.samba.org/ftp/rsync/rsync-3.0.6.tar.gz  //wget下載下傳檔案

#tar –xzvf rsync-3.0.6.tar.gz –C ../software/  //解壓tar包到指定目錄

#cd /usr/local/src/software/ rsync-3.0.6/  //切換到解壓目錄

#./configure –prefix=/usr/local/rsync –disable-ipv6  //配置

#make && make install  //編譯安裝

#cd /usr/local/rsync

#mkdir /var

#vim /usr/local/rsync/etc/rsyncd.conf

log file = /usr/local/rsync/var/rsyncd.Log

pid file = /usr/local/rsync/var/rsyncd.Pid

lock file = /usr/local/rsync/var/rsyncd.Lock

secrets file = /usr/local/rsync/etc/rsyncd.Pas

motd file = /usr/local/rsync/etc/rsyncd.Motd

hosts allow = 192.168.50.0/24

list = yes

uid = root

gid = root

use chroot = no

max connections = 30

[www]

path = /www

comment = bakup www

read only = no

auth users = root

#chmod 600 rsyncd.conf //修改權限

# vi rsyncd.motd //顯示同步資訊

welcome

# vim rsyncd.pas //密碼檔案,用戶端也需要

root:123456

# rsync --daemon --config=/usr/local/rsync/etc/rsyncd.conf //啟動rsync服務  

二、源伺服器上安裝notity

#wget http://downloads.sourceforge.net/inotify-tools/inotify-tools-3.13.tar.gz?modtime=1199213676&big_mirror=0//wget下載下傳檔案

#tar –xzvf inotify-tools-3.13.tar.gz -C /software //解壓tar包到指定目錄

#cd /usr/local/src/software/inotify-tools-3.13.tar.gz//切換到解壓目錄

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

#vim /usr/local/inotify/rsync.sh

#!/bin/sh

/usr/local/inotify/bin/inotifywait -mrq -e create,move,delete,modify /www | while read file ; do

/usr/bin/rsync -avH --delete --password-file=/etc/rsyncd.pas /www/ 

[email protected]::www

done

#chmod +x rsync.sh

# vim /etc/rsyncd.pas

123456

設定開機啟動

# echo "/usr/local/inotify/rsync.sh" >> /etc/rc.local

測試檔案實時同步

運作rsync.sh腳本

#./rsync.sh

我們在源伺服器上touch 幾個檔案,自動執行同步,資訊如下:

welcome to rsync

building file list ... done

./

1

2

sent 208 bytes  received 66 bytes  548.00 bytes/sec

total size is 0  speedup is 0.00

到目标伺服器/www上已經多了兩個檔案,到此同步結束

注意事項:inotify 的預設核心參數值太小:

16384 /proc/sys/fs/inotify/max_queued_events

//該檔案中的值為調用inotify_init時配置設定給inotify instance中可排隊的event的數目的最大值,超出這個值得事件被丢棄,但會觸發IN_Q_OVERFLOW事件

8192  /proc/sys/fs/inotify/max_user_watches

//指定了每個inotify instance相關聯的watches的上限

128  /proc/sys/fs/inotify/max_user_instances

//指定了每一個real user ID可建立的inotify instatnces的數量上限

max_user_watches"的大小取決于要備份的這部分檔案系統包含多少目錄,可以用:find $path -type d | wc -l

來統計一下,并保證這個值大于統計結果。

max_queued_events"意味着 inotify 管理的隊列的最大長度,檔案系統變化越

頻繁,這個值就應該越大。如果你在日志中看到""** Event Queue Overflow **"

這樣的消息,這就意味着"max_queued_events"太小,并且自此之後對于檔案系統的監控都是不準确的,你應該在調整參數後重新開機

三、附加功能:上傳檔案時隻rsync 上傳的檔案,删除檔案時rsync整個目錄

附上腳本檔案

/usr/local/inotify/bin/inotifywait -mrq -e create,move,delete,modify /www | while read file

do

www=`echo $file | awk '{print $1$3}'`

delfile=`echo $file | awk '{print $2}'`

mr=`echo $file | awk '{print $1}' |cut -b5-`

  if [ $delfile = 'DELETE' -o $delfile = 'DELETE,ISDIR' ]; then

     /usr/bin/rsync -avH --delete --password-file=/etc/rsyncd.pas /www/ [email protected]::www

    else

    /usr/bin/rsync -avH  --delete  --password-file=/etc/rsyncd.pas $www  [email protected]::www$mr

  fi

另推薦一條指令:watch -n 1 -d "ls /www" 每隔一秒監測ls指令,并輸出

經過測試watch -n 1 -d "ls /www",對于子目錄的變化,無法監測到

另外,它的輸出為ls 内容,無法定位變化的檔案

結論:此指令雖然挺有用處,但不能替代inotyfy

繼續閱讀