点击登录
  • 欢迎访问无限星辰技术博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏无限星辰吧
  • 无限星辰的淘宝店铺已经开张了哦,传送门:http://

centos6.4下inotify结合rsync 实时同步文件

LINUX服务器 crx349 1782次浏览 0个评论 扫描二维码

rsync 是Linux 下的一个文件同步利器,以高效的增量传输而闻名,适用于同步,备份等多个场合。几乎所有的Linux 发行版都收录了该软件,安装非常容易,以CentOS 6.4为例:

1
yum install rsync

rsync 有个特别之处,既可以作为服务端在后台运行,也可以作为客户端去连接服务器,甚至可以抛弃服务端,直接在本地文件系统上进行同步。

本文讲述 inotify+rsync 打造文件实时同步系统,先讲讲它与传统的rsync 服务器之间的区别,这点非常重要,很少有人提及这个,以至于新手在配置inotify+rsync 产生疑惑。

通常而言,rsync 作为服务端监听在873端口,等待客户端来连接,对应的模式是一个服务端,多个客户端,比如

1
rsync -avz –delete 10.1.1.11::web/ /var/www/

上面的例子中,只要规则允许,任何一个可以连接到10.1.1.11的机器,都可以去同步它。这种场合下,服务端10.1.1.11 是一般是权威内容的发布器,因此其内容是只读的。

在 inotify+rsync 场合中,工作模式是一个客户端,多个服务端,客户端掌握了权威内容,主动向服务端推送内容(服务端必须是可写的),例子如下:

1
2
3
rsync -avz –delete /var/www/ 10.1.1.11::web/
rsync -avz –delete /var/www/ 10.1.1.12::web/
rsync -avz –delete /var/www/ 10.1.1.13::web/

上面的例子就是,客户端将/var/www里的网页内容,主动推向3个服务端。

inotify 是个内核工具,能够监视文件目录的变化,客户端通过inotify 得知变化后立即主动将内容写入服务端。

所谓的原理就这么多了,关于inotify 的东西,别人都讲清楚了,不详述。

 

配置服务端
1 、创建并编辑文件 /etc/rsyncd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uid = root
gid = root
address = 10.1.1.11
use chroot = no
read only = no
max connections = 512
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
[web]
path=/var/www/
list = yes
ignore errors = yes
hosts allow = 10.1.1.20
hosts deny = *

2、启动rsync 服务端

rsync –daemon -4

将上面一句命令加入/etc/rc.local ,可以让rsync 随系统启动。

3、配置防火墙,开启873端口

/sbin/iptables -A INPUT -s 10.1.1.20 -p tcp –dport 873 -j ACCEPT

4、服务端配置完成,如果有多个服务端,请依葫芦画瓢。

配置客户端
1、安装rsync

yum install rsync

2、安装inotify-tools

yum install inotify-tools –enablerepo=epel

3、写个脚本,一旦 inotify 发现变化,立即触发rsync 将变化推送到服务端。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env bash
set -e
src=/var/www/
web01=10.1.1.11
web02=10.1.1.12
web03=10.1.1.13
/usr/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 -vzrtopg –delete –progress $src $web01::web/
        /usr/bin/rsync -vzrtopg –delete –progress $src $web01::web/
        /usr/bin/rsync -vzrtopg –delete –progress $src $web01::web/
        echo $files have been pushed to all web servers.
    done

4、启动脚本,并在后台运行,或者让它开机启动

1
2
3
chmod 755 /opt/inotify-rsync.sh
/opt/inotify-rsync.sh&
echo “/opt/inotify-rsync.sh&” >>/etc/rc.local

至此,inotify + rsync 全部搞定。


无限星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明centos6.4下inotify结合rsync 实时同步文件
喜欢 (0)
[]
分享 (0)

您必须 登录 才能发表评论!