rsync+inotify组合的起源

通过rsync可以实现对远程服务器数据的增量备份同步,但rsync自身也有瓶颈,同步数据时,rsync采用核心算法对远程服务器的目标文件进行比对,只进行差异同步。我们可以想象一下,如果服务器的文件数量达到了百万甚至千万级,那么文件对比将是非常耗时的。而且发生变化的往往是其中很小的一部分,这是非常低效的方式,inotify的出现,可以缓解rsync不足之处,取长补短。

Inotify是建立在rsync上的,首先必须要保证客户端可以推送文件

[root@eric6 scripts]# rsync -avz /home/liuyalei/tools  rsync_backup@10.0.0.250::backup --password-file=/etc/rsyns.password
sending incremental file list
sent 2616 bytes  received 22 bytes  5276.00 bytes/sec
total size is 3618169  speedup is 1371.56

1)检查客户端系统是否支持inotify,显示这三个文件就是支持

[root@eric6 scripts]# ll /proc/sys/fs/inotify/
-rw-r--r-- 1 root root 0 9月  29 01:38 max_queued_events
-rw-r--r-- 1 root root 0 9月  29 01:38 max_user_instances
-rw-r--r-- 1 root root 0 9月  29 01:40 max_user_watches

2)下载inotify软件

[root@eric6 scripts]# cd /home/liuyalei/tools/
[root@eric6 tools]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

3)解压安装inotify软件

[root@eric6 tools]# tar -zxvf inotify-tools-3.14.tar.gz
[root@eric6 tools]# cd inotify-tools-3.14
[root@eric6 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14
[root@eric6 inotify-tools-3.14]# make&&make install

4)编写inotify实时监控脚本

[root@eric6 tools]# cd /server/scripts/
[root@eric6 scripts]# cat inotify.sh
#!/bin/bash
#para
host01=10.0.0.250   #服务端ip
src=/home/liuyalei/tools   #客户端同步目录
dst=backup   #模块
user=rsync_backup  #虚拟认证用户
rsync_passfile=/etc/rsync.password   #密码文件存放位置
inotify_home=/usr/local/inotify-tools-3.14/   #inotify软件安装位置
#judge
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
do
#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
cd $src && rsync -aruz -R --delete ./  --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0

5)执行inotify监控脚步(后台执行)

[root@eric6 scripts]# sh inotify.sh &

6)检查inotify是否启动

[root@eric6 scripts]# ps  -ef|grep inotify