Rsync+Inotify-tools实现数据实时同步
inotify是一种强大的,细粒度的,异步文件系统时间监控机制,它可以替代crond实现与rsync的触发式文件同步,从而监控文件系统中添加,删除,修改,移动等细粒事件,从LINUX 2.6.13起,就已加入了对inotify的支持,所以我们只需要安装一个第三方软件inotify-tools即可管理此服务.之前利用的rsync+crond来触发实现同步的瓶颈在于,rsync在同步数据时,需要先扫描所有文件后进行比对,而后进行差异传输,如果文件数量级别很大而且变化会很快,扫描所有文件会非常耗时,而且会存在漏同步的问题,造成效率低下.而rsync+inotify则会弥补前者先扫描后同步的效率问题,采用系统级别监控各种变化,当文件发生任何变化,就会触发rsync同步,解决效率与实时性问题。
Linux操作系统: CentOS6.5 32bit
rsync: 系统自带
data(rsync server):192.168.1.200
test(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/
------------------
总用量 0
0 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_watches
0 -rw-r--r-- 1 root root 0 12月 4 11:35 max_user_instances
0 -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:873
COMMAND 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比较适用于轻量级文件即时同步,如果量大建议还是使用共享存储方法解决。
Rsync+Inotify-tools实现数据实时同步的更多相关文章
- 烂泥:rsync与inotify集成实现数据实时同步更新
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要 ...
- rsync+inotify百万级文件实时同步
实验环境:Centos7.4 目的:将源服务器的文件实时同步至目标服务器 源服务器:10.11.1.107 目标服务器:10.11.1.106 分别在两个节点安装rsync yum -y instal ...
- 使用rsync+inotify实现/www目录实时同步
一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...
- nfs+rsync+inotify实现文件的实时同步
准备三台服务器进行测试: nfs_server:192.168.12.110 web_server:192.168.12.111 rsync_server:192.168.12.112 网络规划图: ...
- Linux系统之网络文件共享与数据实时同步实践
1.实现基于MYSQL验证的vsftpd虚拟用户访问 首先环境说明,数据库服务器是192.168.0.10,vsftpd服务器是192.168.0.30 1)安装vsftpd [root@test-c ...
- CentOS 6.5 rsync+inotify实现数据实时同步备份
CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...
- sersync基于rsync+inotify实现数据实时同步
一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192. ...
- rsync+inotify实现多台服务器之间数据实时同步
配置环境 1.操作系统:CentOS6.5-X86_64 2.rsync客户端(rsync+inotify):192.168.200.82 3.rsync服务端:192.168.200.80,192. ...
- centos 配置rsync+inotify数据实时同步2
一.Rsync服务简介 1. 什么是Rsync 它是一个远程数据同步工具,它在同步文件的同时,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“rsync算法”来使本地和远程两个主机 ...
- Rsync+sersync(inotify)实现数据实时双向同步
目录 Rsync+Sersync数据实时同步(双向) 服务介绍 节点声明 编译环境配置 安装Rsync 编辑Rsync配置文件 配置文件解析 配置密码文件 启动rsync验证 安装sersync服务 ...
随机推荐
- javascript调试 console
Console命令详解,让调试js代码变得更简单 Firebug是网页开发的利器,能够极大地提升工作效率. 但是,它不太容易上手.我曾经翻译过一篇<Firebug入门指南>,介绍了一些 ...
- Setting up a database adapter
Setting up a database adapter zend-db provides a general purpose database abstraction layer. At its ...
- SVN 之 去掉SVN管理标记
当项目不需要SVN标志的时候, 方式一:很多人设置Windows显示隐藏文件,然后将项目中的所有.svn文件删除,这种方法是最笨的方法. 方式二:通过注册表方式 [1]新建一个文本文件.文本的内容为: ...
- Http抓包工具Charlse使用教程
[原文]http://blog.csdn.net/wildfireli/article/details/19829479 Charles是目前最强大的http调试工具,在界面和功能上远强于Fiddle ...
- JS精确到小数点两位
1.会四色五入 var num =2.446242342; num = num.toFixed(2); // 输出结果为 2.452.正则Number(15.7784514000.toString() ...
- JUC全景图
JUC 并发编程全景图如下:
- Ubuntu 安装php_intl 扩展
PHP Intl 类在I18n的网站中真的很方便,允许你依赖在终端用户区域,很容易的输出正确的日期格式. 在使用 yii2-app-ecom , 初始化之后,访问首页出现了: The default ...
- 仿百度自动补全jquery
新建index.html文件,直接复制下面代码到新建的文件index.html里面,用浏览器访问,仅用于参考: <!doctype html><html><meta ch ...
- h2database源码浅析:SQL语句的执行
最近想好好了解一下数据库的原理,下载了h2database的源码,准备好好看看.此过程的一些想法,暂且记下来,权当做读码笔记吧! 为了调试准备的测试用例: @Test public void test ...
- Java多线程并发
http://wangjianwei866.blog.163.com/blog/static/9295823201231665319314/ 基于以上网文,调整了一下格式,修改了一些标点和拼写错误. ...