首页 > 代码库 > 利用rsync+inotify搭建实时同步系统

利用rsync+inotify搭建实时同步系统

系统环境(本例只列举一个服务节点):

    内容发布节点server1:192.168.1.154

     服务节点    c1:192.168.1.148

C1:
#安装配置rsync
[root@C1 ~]# yum install rsync -y
[root@C1 ~]#vim /etc/rsyncd.conf
uid = nobody
gid = nobody
ignore errors
read only = no
write only = no
list = false
use chroot = no
max connections =10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
                                        #全局配置区域要和模块区域最好用空行分开
[C1]
path = /tongbu
comment = tongbu  file
hosts allow = 192.168.1.154
hosts deny = *
uid = root
gid = root
auth users = user1
secrets file = /etc/user1.pass
[root@C1 ~]#mkdir /tongbu
[root@C1 ~]#cat /etc/user1.pass 
user1:123456
[root@C1 ~]# rsync --daemon
[root@C1 ~]# lsof -i:873
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   1578 root    3u  IPv4  13354      0t0  TCP *:rsync (LISTEN)
rsync   1578 root    5u  IPv6  13355      0t0  TCP *:rsync (LISTEN)
[root@C1 ~]#echo "/usr/bin/rsync --daemon" >> /etc/rc.local

server1:
#安装inotify和rsync
[root@server1 ~]# uname -r   #内核版本 >=2.6.13                
2.6.32-358.el6.x86_64     
[root@server1 ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Aug 25 15:15 max_queued_events
-rw-r--r-- 1 root root 0 Aug 25 15:15 max_user_instances
-rw-r--r-- 1 root root 0 Aug 25 15:15 max_user_watches
[root@server1 ~]# tar -xf inotify-tools-3.14.tar.gz
[root@server1 ~]#cd inotify-tools-3.14
[root@server1 ~]#cd inotify-tools-3.14
[root@server1 inotify-tools-3.14]# ./configure &&make &&make install
[root@server1 ~]# inotifywa         #生成两个命令表示安装成功
inotifywait   inotifywatch
   inotifywait是一个监控等待事件,可以配合shell脚本使用,参数:
       -m,即“--monitor”,表示始终保持事件监听状态。
       -r,即“--recursive”,表示递归查询目录。
       -q,即“--quiet”,表示打印出监控事件。
       -e,即“--event”,通过此参数可以指定要监控的事件,常见的事件有modify,delete、
       create和attrib等。
[root@server1 ~]#yum install rsync -y
[root@server1 ~]# cat /etc/user1.pass 
123456
[root@server1 ~]#mkdir /tongbu11
[root@server1 shells]# vim inotifyrsync.sh 

#!/bin/bash
host=192.168.1.148
src=http://www.mamicode.com/tongbu11"/etc/user1.pass"
dst=C1
user=user1
inotifywait="/usr/local/bin/inotifywait"
$inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f%e‘ -e         modify,delete,create,attrib $src | while read files;do
                /usr/bin/rsync -vzrtopg --delete --progress --password-file=$passwordF $src $user@$host::$dst
                echo "${files} was rsynced" >> /tmp/rsyncd.log 2>&1
        done
脚本中相关参数:
    --timefmt:指定时间的输出格式。
    --format:指定变化文件的详细信息。
[root@server1 shells]#chmod +x inotifyrsync.sh
[root@server1 shells]#./inotifyrsync.sh &
[root@server1 shells]#echo "/shells/inotifyrsync.sh &" >> /etc/rc.local

      至此完成所有配置,可以再sever1的/tongbu11目录下添加、删除或修改某个文件,然后到C1中的/tongbu目录中查看文件是否随server1发布目录的文件变化而变化。如果发生同步,则说明配置成功。

本文出自 “技术小菜” 博客,请务必保留此出处http://390892467.blog.51cto.com/2006821/1544747

利用rsync+inotify搭建实时同步系统