您的位置:首页 > 其它

Rsync+Inotify-tools实现数据实时同步

2014-12-22 12:34 681 查看
inotify是一种强大的,细粒度的,异步文件系统时间监控机制,它可以替代crond实现与rsync的触发式文件同步,从而监控文件系统中添加,删除,修改,移动等细粒事件,从LINUX 2.6.13起,就已加入了对inotify的支持,所以我们只需要安装一个第三方软件inotify-tools即可管理此服务.之前利用的rsync+crond来触发实现同步的瓶颈在于,rsync在同步数据时,需要先扫描所有文件后进行比对,而后进行差异传输,如果文件数量级别很大而且变化会很快,扫描所有文件会非常耗时,而且会存在漏同步的问题,造成效率低下.而rsync+inotify则会弥补前者先扫描后同步的效率问题,采用系统级别监控各种变化,当文件发生任何变化,就会触发rsync同步,解决效率与实时性问题。
Linux操作系统: CentOS6.5 32bitrsync: 系统自带data(rsync server):192.168.1.200test(rsync client):192.168.1.201
(server)表示仅服务端配置(client)表示仅客户端配置(server,client)表示客户端与服务端都需配置 环境搭建:(server,client) 1.关闭iptables和SELINUX# service iptables stop# service ip6tables stop#chkconfig iptables off#chkconfig ip6tables off# setenforce 0# vi /etc/sysconfig/selinux---------------SELINUX=disabled--------------- 判断Linux系统内核是否达到2.6.13以上:# uname -a-------------Linux localhost.localdomain 2.6.32-431.el6.i686 #1 SMP Dec 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux------------- 查看inotify目录是否存在:# ls -l /proc/sys/fs/inotify/------------------总用量 00 dr-xr-xr-x 0 root root 0 12月 4 14:04 ..0 dr-xr-xr-x 0 root root 0 12月 4 11:35 .0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_user_watches0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_user_instances0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_queued_events------------------若返回以上内容,则系统支持inotify. 一.安装rsync:(server)
配置:(server)# vi /etc/rsync.conf--------------------uid = nobody
gid = nobody
use chroot = no
max connections = 10
auth user = webuser
secrets file = /root/rsync.passwd
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[data]
path = /data/
comment = web file
ignore errors
read only = no
write only = no
hosts allow = 192.168.1.0/24
hosts deny = *
list = no

--------------------创建rsync同步账户密码验证文件:vi /root/rsync.passwd输入:webuser:rsync-pwd后保存退出给rsync同步账户密码验证文件赋予可读可写权限:chmod 764 /root/rsync.passwd
启动rsync# rsync --daemon --config=/etc/rsync.conf查看rsync是否启动正常lsof -i:873COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 1091 root 4u IPv4 10692 0t0 TCP *:rsync (LISTEN)
rsync 1091 root 5u IPv6 10693 0t0 TCP *:rsync (LISTEN)
一切正常,如上所示

二.安装inotify-tools:(client)可以到https://github.com/rvoicilas/inotify-tools/下载zip包,然后传到系统进行编译安装:# unzip inotify-tools-master.zip# cd inotify-tools-master# ./autogen.sh# ./configure --prefix=/usr/local/inotify# make && make install

配置client端的rsync_inotify.sh:(client)
# vi /root/rsync_inotify.sh该脚本在做客户端目录下文件若发生变化,则向服务端做同步上传操作,也就是保持客户端目录文件发生变化,服务端也相应改变。------------------#!/bin/bash

host=192.168.1.200

src=/test

des=data

user=webuser

/usr/local/inotify/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 $user@$host::$des --password-file=/root/rsync.passwd

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

done
------------------ 赋予执行权限# chmod 764 /root/rsync_inotify.sh创建rsync同步账户密码验证文件:vi /root/rsync.passwd输入 rsync-pwd后保存退出给rsync同步账户密码验证文件赋予可读可写权限:chmod 764 /root/rsync.passwd
执行脚本并做开机启动:# /root/rsync_inotify.sh# echo "/root/rsync_inotify.sh" >> /etc/rc.local注:这个脚本的作用是通过inotify监控文件目录的变化,进而触发rsync进行同步操作,由于这是通过内核完成的主动式触发操作,所以比rsync遍历整个目录的扫描方式效率要高很多。
验证:在客户端创建5个文件,到服务端查看文件是否实时同步?(client)# cd /test# touch 1 2 3 4 5(server)# cd /data/test# ls-------------1 2 3 4 5-------------验证成功,client端的目录发生变化会实时同步到server端
总结:rsync+inotify比较适用于轻量级文件即时同步,如果量大建议还是使用共享存储方法解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: