rsync+Inotify实现数据的实时同步更新

服务器地址分配:

Web1:192.168.1.103 (rsync  server)

Web2:192.168.1.104  (rsync client、inotify)

 

同步的目录是 /mnt ,自动同步顺序为 web2――web1。我们讲 web1 配置成 rsync 的服务器即可。

 

一、        配置 rsync 服务器端 (web1)

 

1.    先使用 rpm �Cqa 命令查看系统中是否已经安装了 rsync 软件包,如果有我们可以不用进行安装,如果没有我们可以挂载上 CentOS 的系统光盘进行安装(当然,我们也可以选择使用源码包编译安装)

 

[root@Web1 ~]# rpm -qa | grep rsync

rsync-3.0.6-4.el5_7.1

[root@Web1 ~]#

 

2.    Rsync 安装好之后没自己的配置文件,因此我们需要手动创建 rsync 的配置文件(配置文件的详解我会在文档的附录中给出)

 

[root@Web1 ~]#vi /etc/rsyncd.conf

uid = root

gid = root

use chroot = no

max connections = 20

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[web_log]

path = /data/web_log/

ignore errors

read only = false

list = false

hosts allow = 222.35.91.0/24

hosts deny = 0.0.0.0/32

auth users = backuser

secrets file = /etc/rsync.password

#_________________

 

3.    建立 rsync 用户名和密码文件

 

[root@Web1 ~]#  echo "backuser:123" >> /etc/rsync.password

/opt/tomcat_gw/webapps/

4.    为 /etc/rsync.password 授权为 600(这个文件的权限必须是 600)

 

[root@Web1 ~]# chmod -R 600 /etc/rsync.password

 

到此,服务器端配置完成

 

二、        客户端配置:

 

1.    设置 rsync 客户端的密码文件,客户端只需要设置 rsync 同步的密码即可,不用设置用户名

 

[root@Web2 ~]#echo "123" > /etc/rsync.password

 

2.    将密码文件的权限设置成 600(这个文件的权限必须是 600)

 

[root@Web2 ~]#chmod -R 600 /etc/rsync.password

 

三、配置 Inotify(在 web2上配置)

http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

1.       安装 inotify 软件包

 

[root@Web2 ~]#  tar zxf inotify-tools-3.14.tar.gz

    [root@Web2 ~]#  cd inotify-tools-3.14

    [root@Web2 ~]#  ./configure && make && make install && echo "Install OK"

 

2.       为了保证 .mnt 目录被自动同步,配置好web2 的 inotify 后,写一个 inotify 的监控脚本,内容如下:

 

#!/bin/bash

src=/mnt/

des=web_log

ip=192.168.1.103

 

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file

 

do

 

rsync -vzrtopg --delete --progress $src backuser@$ip::$des --password-file=/etc/rsync.password > /dev/null 2>&1 && echo "$src was rsynced"

 

done

 

脚本相关解释如下:

--timefmt:

指定时间的输出格式。

--format:

指定变化文件的详细信息。

这个脚本的作用就是通过Inotify监控文件目录的变化,进而触发rsync进行同步操作。由于这个过程是一种主动触发操作,是通过系统内核完成的,所以,比起那些遍历整个目录的扫描方式来,效率要高很多。

然后我们将此脚本放入后台运行,输入如下命令即可:

Sh /root/rsync.sh& 


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