您的位置:首页 > 其它

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

2015-08-15 19:11 363 查看
【系统环境:CentOS-6.6-x86_64】

了解inotify

inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13版本起,加入对inotify的支持。通过inotify可以监控文件系统中添加、删除、修改、移动等各种细微的事件,利用这个内核接口,第三方软件可以监控文件系统下文件的各种变化情况,inotify-tools就是这样的一个第三方软件。

rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据与实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,会触发rsync同步,这样刚好解决了同步数据的实时性问题。

安装inotify工具inotify-tools

由于inotify的特性需要Linux内核的支持,在安装inotify-tools前需要先确认Linux系统内核是否是2.6.13版本以上,如果Linux内核版本低于2.6.13,就需要重新编译内核加入对inotify的支持,可以用如下方法判断内核是否支持inotify:



可以到notify-tools.sourceforge.net下载相应版本的inotify-tools,然后编译安装。

wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make;make install


安装完inotify-tools后,会生成inotifywait和inotifywatch两个指令。其中,inotifywait用于等待文件或文件集上的一个特定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;inotifywatch用于手机被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。



企业应用案例:利用rsync+inotify搭建实时同步系统

案例描述

一个CMS内容发布系统,内容发布节点负责将用户发布的数据生成静态页面,同时将静态页面传输给2个服务节点。

系统环境

Server服务器作为更新源服务器,作为rsync客户端向Web1、Web2传输数据;

Web1、Web2作为目的服务器,作为rsync服务端接收Server传输的数据;

节点名称用途IP地址网页数据路径
Web1服务节点1192.168.0.124/web1/www
Web2服务节点2192.168.0.125/web2/www
Server内容发布节点192.168.0.123/web/www

配置服务节点Web1、Web2——rsync服务端

1.安装rsync

CentOS-6.6默认安装rsync-3.0.6

具体安装请参照:rsync安装部署

2.定义rsync配置文件/etc/rsyncd.conf

Web1 192.168.0.124/24

vim /etc/rsyncd.conf


uid = nobody
gid = nobody
use chroot = no
max connections = 10
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[web1]
path = /web1/www/
ignore errors
read only = no
write only = no
hosts allow = 192.168.0.123
hosts deny = *
list = false
uid = root
gid = root
auth users = www1
secrets file = /etc/web1.pass


Web2 192.168.0.125/24

vim /etc/rsyncd.conf


uid = nobody
gid = nobody
use chroot = no
max connections = 10
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[web2]
path = /web2/www/
ignore errors
read only = no
write only = no
hosts allow = 192.168.0.123
hosts deny = *
list = false
uid = root
gid = root
auth users = www2
secrets file = /etc/web2.pass


3.建立认证文件

Web1:

echo "www1:123456" >> /etc/web1.pass


设置文件权限:

chmod 600 /etc/web1.pass


Web2:

echo "www2:123456" >> /etc/web2.pass


设置文件权限:

chmod 600 /etc/web2.pass


4.启动rsync

nohup /usr/bin/rsync --daemon


开机启动:

echo "/usr/bin/rsync --daemon" >> /etc/rc.local


5.配置iptables

vim /etc/sysconfig/iptables


增加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT


重启iptables

service iptables restart


配置内容分发节点(更新源)——rsync客户端

1.安装inotify-tools、rsync

参考文章开头

2.编写rsync监控脚本

vim /usr/local/bin/inotifyrsync.sh


#!/bin/bash
host1=192.168.0.124
host2=192.168.0.125
src=/web/www/
des1=web1
des2=web2
user1=www1
user2=www2

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f' -e modify,delete,create,attrib ${src} | while read  files
do
/usr/bin/rsync -vzrtopg --delete --progress ${src} ${user1}@${host1}::${des1} --password-file=/etc/web1.pass &&
/usr/bin/rsync -vzrtopg --delete --progress ${src} ${user2}@${host2}::${des2} --password-file=/etc/web2.pass &&
echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
echo "---------------------------------------------------------------------------"
done


参数说明:

-m, 即–monitor,表示始终保持事件监听状态。

-r, 即–recursive,表示递归查询目录。

-q, 即–quiet,表示打印出监控事件。

-e, 即–event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等

–timefmt:指定时间的输出格式

–format:指定变化文件的详细信息

注:有时向inotify监控的目录中写入一个很大的文件,当写入这个大文件需要一段时间时,inotify会持续不断地输出该文件被更新的信息,这样就会持续不断地触发rsync执行同步操作,占用大量系统资源。针对这种情况,最理想的做法是等待文件写完后再触发rsync同步。在这种情况下,可以修改inotify的监控事件,即”-e close_write,delete,create,attrib”。

3.建立认证文件

echo "123456" >> /etc/web1.pass
echo "123456" >> /etc/web2.pass
chmod 600 /etc/web1.pass
chmod 600 /etc/web2.pass


4.执行文件同步

chmod +x /usr/local/bin/inotifyrsync.sh
nohup  /usr/local/bin/inotifyrsync.sh &
echo "nohup  /usr/local/bin/inotifyrsync.sh &" >> /etc/rc.local


5.测试rsync+inotify实时同步功能

完成所有配置后。可以在内容发布节点的/web/www目录下添加、删除或修改某个文件,然后到两个服务节点对应的目录中查看文件是否随内容发布节点中/web/www目录下的文件变化而变化,如果看到2两个服务节点对应的目录文件与内容发布节点目录文件同步变化了,那么这个业务就配置成功了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: