利用rsync+inotify搭建实时同步系统
2015-08-15 19:11
363 查看
【系统环境:CentOS-6.6-x86_64】
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据与实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,会触发rsync同步,这样刚好解决了同步数据的实时性问题。
可以到notify-tools.sourceforge.net下载相应版本的inotify-tools,然后编译安装。
安装完inotify-tools后,会生成inotifywait和inotifywatch两个指令。其中,inotifywait用于等待文件或文件集上的一个特定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;inotifywatch用于手机被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。
Web1、Web2作为目的服务器,作为rsync服务端接收Server传输的数据;
具体安装请参照:rsync安装部署
Web2 192.168.0.125/24
设置文件权限:
Web2:
设置文件权限:
开机启动:
增加:
重启iptables
参数说明:
-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”。
了解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 | 服务节点1 | 192.168.0.124 | /web1/www |
Web2 | 服务节点2 | 192.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/24vim /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两个服务节点对应的目录文件与内容发布节点目录文件同步变化了,那么这个业务就配置成功了。相关文章推荐
- LeetCode(211) Add and Search Word - Data structure design
- STL 迭代器失效和运算符重载容易错误问题
- SPOOLing系统是虚拟设备最典型SORT的代表
- POJ 1503 Integer Inquiry 高精度
- 高效学习,战胜拖延症
- ssh bitbucket github
- Online Judge中基本的输入输出
- SpringMVC 基础教程 框架分析
- linux shell 25问
- 快速排序1.0
- JavaSE基础--(四)异常处理
- html5 说明
- VS2010中使用GDAL(一)
- 正确移除List中对象
- C# WebService URL重写
- 函数1
- android---adapter的刷新
- LinqPad使用教程
- 2014全球移动互联网大会召开
- 图片下载器类