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