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 �Cxzvf rsync-3.0.6.tar.gz �CC ../software/  //解压tar包到指定目录
#cd /usr/local/src/software/ rsync-3.0.6/  //切换到解压目录
#./configure �Cprefix=/usr/local/rsync �Cdisable-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
#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 �Cxzvf  inotify-tools-3.13.tar.gz -C /software / /解压tar包到指定目录
#cd /usr/local/src/software/ inotify-tools-3.13.tar.gz //切换到解压目录
#./configure �Cprefix=/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/  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整个目录
附上脚本文件
#!/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/ [email protected]::www
    else
    /usr/bin/rsync -avH  --delete  --password-file=/etc/rsyncd.pas $www  [email protected]::www$mr
  fi
done
 
另推荐一条命令:watch -n 1 -d "ls /www" 每隔一秒监测ls命令,并输出
经过测试watch -n 1 -d "ls /www",对于子目录的变化,无法监测到
另外,它的输出为ls 内容,无法定位变化的文件
结论:此命令虽然挺有用处,但不能替代inotyfy
 
 

你可能感兴趣的:(职场,rsync,inotify,实时,休闲)