rsync+inotify實現實時同步

源服務器          192.168. 50.218 
目標服務器           192.168. 50.219
目的:實現源服務器192.168. 50.218  / www 文件夾文件實時同步到目標服務器192.168. 50 . 219  的/ www 目錄下
1、 目標 服務器上安裝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服務  
2、 源服務器上安裝notity
#cd /usr/local/src/tarbag/  //切換下載目錄
#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   //配置
#make && make install  //編譯安裝
#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/ 
root@192.168.50.219::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"過小,而且自此以後對於文件系統的監控都是不許確的,你應該在調整參數後重啓
 
3、附加功能:上傳文件時只rsync 上傳的文件,刪除文件時rsync整個目錄
附上腳本文件
#!/bin/sh
/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/ root@192.168.50.219::www
    else
    /usr/bin/rsync -avH  --delete  --password-file=/etc/rsyncd.pas $www  root@192.168.50.219::www$mr
  fi
done
 
另推薦一條命令:watch -n 1 -d "ls /www" 每隔一秒監測ls命令,並輸出
通過測試watch -n 1 -d "ls /www",對於子目錄的變化,沒法監測到另外,它的輸出爲ls 內容,沒法定位變化的文件結論:此命令雖然挺有用處,但不能替代inotyfy
相關文章
相關標籤/搜索