Linux学习--rsync+inotify实现数据实时同步

来源:互联网 发布:mac颜色配置文件 编辑:程序博客网 时间:2024/04/20 10:19

紧接上一篇文件中rsync实现数据同步的配置,这次采用rsync+inotify的方式实现数据实时同步,具体的配置和上次保持一致。

事先的准备,2台Redhat 6.3虚拟机,主机名和IP地址如下:

mylinux     192.168.198.100   rsync服务器端

mylinux2   192.168.198.101   rsync客户端

首先查看服务器是否支持inotify(目前基本上大多数服务器都支持),使用如下命令进行查看:

<span style="font-family:Microsoft YaHei;font-size:12px;">ll /proc/sys/fs/inotify/</span>


如果执行上面的命令结果会列举上图中的三项,那么就表示支持inotify;反之,则不支持。

一、rsync服务端操作

rsync服务端的操作包括创建rsync配置文件和认证用户密码文件,最后启动rsync守护进程,因为在上一篇中已经详细说明过,所以这里也不再赘述。只是确认进程启动即可。


二、rsync客户端操作

rsync客户端的配置也不再重复,按照之前的操作,能正常在两台虚拟机之间同步数据即可。下面主要讲inotify的操作。

登录到mylinux2上,然后下载inotify的安装包,解压。


切换到解压缩后的目录中,使用编译命令安装,

<span style="font-family:Microsoft YaHei;font-size:12px;"># ./configure --prefix=/usr/local/inotify/# make && make install </span>

安装完成后,在/usr/local/inotify/bin/目录下会生成如下两个文件,这两个文件就是要执行inotify的主要文件了。


接着创建inotify执行脚本inotify.sh,脚本内容如下:

<span style="font-family:Microsoft YaHei;font-size:12px;">#bin/bash#host01=mylinuxsrc=/tmp/test/dst=backupuser=rsync_backuprsync_passfile=/etc/rsync.passwordinotify_home=/usr/local/inotify#judgeif [ ! -e "$src" ] \|| [ ! -e "${rsync_passfile}" ] \|| [ ! -e "${inotify_home}/bin/inotifywait" ] \|| [ ! -e "/usr/bin/rsync" ];then       echo "Check File and folder"     exit 9fi${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       cd $src && rsync -avz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1    doneexit 0</span>


相关注解如下:

      /usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${src}
              -m 
是保持一直监听
              -r 
是递归查看目录
             -q 
是打印出事件


      -e close_write,modify,delete,create,attrib 
是指 “监听 创建 移动 删除 写入 权限” 事件

       /usr/bin/rsync -avH --delete  --progress --password-file
             -a 
存档模式
             -H 
保存硬连接
             -delete 
删除于多余文件

             --password-file 密码文件

             今天参数可以man rsync

       要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync
       要排除某个目录的事件监听的处理时,为inotifywait添加--exclude--excludei参数,具体查看man inotifywait
       --exclude-from="/usr/local/inotify/logs/rules.txt" 
可以匹配过滤文件:

                 如排除包括 .svn的文件:

                        #cat /usr/local/inotify/logs/rules.txt

               - *.svn*


        inotifywait 
命令产生三个返回值,分别是日期,时间,文件” 3个返回值会做为参数传给read,因此脚本中的“while read file” 写法细化了返回值,对读取到的文件进行下面的循环操作。


启动该脚本,使用sh inotify.sh &使它后台运行,可以使用查看进程的方式查看inotify进程是否启动。


在mylinux2上批量创建几个文件,然后查看。


再到mylinux上查看/backup/目录下,已经同步到这几个文件了。


在mylinux2上删除刚才创建的这几个文件,然后再到mylinux上查看,


在mylinux上已经看不到刚才删除的文件了。下面在mylinux2上执行以下命令,批量创建100个目录和100个文件,

<span style="font-family:Microsoft YaHei;font-size:12px;">for id in `echo {0..100}`;do mkdir -p /tmp/test/$id && touch /tmp/test/$id/$id.txt;done</span>


然后到mylinux上查看/backup/目录,


通过上图已经看到,在mylinux2上批量创建的100个目录和100个文件已经同步到mylinux上了,这也说明rsync结合inotify实现了数据实时同步。

0 0
原创粉丝点击