rsync+inotify实现数据实时同步

   使用rsync实现触发式文件同步,使用inotify监控文件系统变化,当文件有变动时,触发rsync同步,解决数据同步的实时性问题。

   例为将分发服务器上的/wwwroot下的文件同步分发到rsync上的/var/www/html

A:192.168.24.137   rsync服务器     同步目录:/var/www/html

B:192.168.24.138   分发服务器                /wwwroot

  

A:

 

1.开启rsync

vim /etc/xinetd.d/rsync

# default: off

# description: The rsync server is a good addition to an ftp server, as it \

#       allows crc checksumming etc.

service rsync

{

        disable = no

        socket_type     = stream

        wait            = no

        user            = root

        server          = /usr/bin/rsync

        server_args     = --daemon

        log_on_failure  += USERID

}

2.手工建立rsync配置文件                     

vim /etc/rsyncd.conf

uid = nobody

gid = nobody

max connections = 30

syslog facility = local5

pid file = /var/run/rsyncd.pid

use chroot = no

[note] #指定模块信息

path = /var/www/html/

auth users = test1

secrets file = /etc/rsyncd.secrets

read only = no

write list = test1

cat /etc/rsyncd.secrets   #配置文件中指向的用户账户文件

test1:123

chmod 600 /etc/rsyncd.secrets    

setfacl -R -m u:nobody:rwx /var/www/html

service xinetd restart

netstat -anpt | grep 873

B:

[root@localhost ~]# uname -r

2.6.18-238.el5    #保证内核2.6以上

[root@localhost ~]# ll /proc/sys/fs/inotify/   #以下三项表示默认支持inotify

total 0

-rw-r--r-- 1 root root 0 Aug 21 21:22 max_queued_events

-rw-r--r-- 1 root root 0 Aug 21 21:22 max_user_instances

-rw-r--r-- 1 root root 0 Aug 21 21:22 max_user_watches

1.装inotify-tools

tar zxf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure && make && make install

[root@localhost ~]# ll /usr/local/bin/inotifywa*

-rwxr-xr-x 1 root root 37476 Aug 21 20:15 /usr/local/bin/inotifywait

-rwxr-xr-x 1 root root 35646 Aug 21 20:15 /usr/local/bin/inotifywatch

2.建与rsync服务器交互时所使用用户的密码文件

 vim /pass.txt

123

chmod 600 /pass.txt    #降权

vim inotify.sh

#!/bin/bash

host=192.168.24.137

src=/wwwroot/

dst=note

user=test1

/usr/local/bin/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 -av $src $user@$host::$dst --password-file=/pass.txt

        echo "${files} was rsynced" >> /tmp/rsync.log 2>&1

done

chmod +x inotify.sh

./inotify.sh

echo "source /root/inotify.sh &" >>/etc/rc.local

你可能感兴趣的:(rsync+inotify)