rsync+Inotify实现数据的实时同步更新
2011-12-30 17:10
471 查看
2.7.4 rsync+Inotify实现数据的实时同步更新(1)
《构建高可用Linux服务器》第2章FreeBSD8.1在企业中的部署应用,本章将会详细讲解FreeBSD8.1的安装、最小化安装后的优化、jail虚拟机的部署,以及FreeBSD8.1下的应用部署。希望大家通过本章的学习,能够很好地掌握FreeBSD8.1的基础知识,并且可以快速地搭建自己的开发环境和测试环境。本节为rsync+Inotify实现数据的实时同步更新。2.7.4 rsync+Inotify实现数据的实时同步更新(1)
1.rsync的优点与不足
大家通过上面的描述和实验应该已经了解rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期地备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出了更好的要求,rsync在高端业务系统中也逐渐暴露出了很多的不足之处:首先,rsync同步数据时,需要扫描所有文件后进行比对,然后进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时地去监测、同步数据,虽然它可以通过Linux守护进程的方式触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致的情况,无法在应用故障时完全恢复数据。
基于以上原因,考虑采用rsync+inotify,这样就可以解决这些问题了。
2.初识Inotify
Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13起,加入了对Inotify的支持,通过Inotify可以监控文件系统中的添加、删除、修改、移动等各种细微事件。利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而Inotify-tools就是这样一个第三方软件。
在上面章节中,我们讲到,rsync可以实现触发式的文件同步,但是通过Crontab守护进程方式触发,同步的数据和实际数据会有差异,而Inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这就刚好解决了同步数据的实时性问题。
3.安装inotify工具inotify-tools
由于inotify特性需要Linux内核的支持,在安装inotify-tools前先要确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入对inotify的支持,也可以用如下方法来判断内核是否支持inotify(服务器系统为Centos5.5 x86_64):
uname -r 2.6.18-194.el5
然后我们通过ls来查看是否存在/proc/sys/fs/inotify目录,如下所示:
ls -lsart /proc/sys/fs/inotify/ 总计 0 0 dr-xr-xr-x 7 root root 0 06-16 00:02 .. 0 -rw-r--r-- 1 root root 0 06-21 11:15 max_user_watches 0 -rw-r--r-- 1 root root 0 06-21 11:15 max_user_instances 0 -rw-r--r-- 1 root root 0 06-21 11:15 max_queued_events 0 dr-xr-xr-x 2 root root 0 06-21 11:15 .
通过以上显示我们明白,Centos5.5 x86_64是支持inotify的。
4.inotify可以监控的文件系统事件
Inotify是文件系统事件监控机制,是dnotify的有效替代品(dnotify是较早内核支持的文件监控机制)。Inotify是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。
Inotify可以监视的文件系统事件包括:
IN_ACCESS:
即文件被访问。
IN_MODIFY:
文件被write。
IN_ATTRIB:
文件属性被修改,如chmod、chown、touch等。
IN_CLOSE_WRITE:
可写文件被close。
IN_CLOSE_NOWRITE:
不可写文件被close。
IN_OPEN:
文件被open。
IN_MOVED_FROM:
文件被移走,如mv。
IN_MOVED_TO:
文件被移来,如mv、cp。
IN_CREATE:
创建新文件。
IN_DELETE:
文件被删除,如rm。
IN_DELETE_SELF:
自删除,即一个可执行文件在执行时删除自己。
IN_MOVE_SELF:
自移动,即一个可执行文件在执行时移动自己。
IN_UNMOUNT:
宿主文件系统被umount。
IN_CLOSE:
文件被关闭,等同于(IN_CLOSE_WRITEIN_CLOSE_NOWRITE)。
IN_MOVE:
文件被移动,等同于(IN_MOVED_FROMIN_MOVED_TO)。
注意 上面所说的文件也包括目录。
2.7.4 rsync+Inotify实现数据的实时同步更新(2)
《构建高可用Linux服务器》第2章FreeBSD8.1在企业中的部署应用,本章将会详细讲解FreeBSD8.1的安装、最小化安装后的优化、jail虚拟机的部署,以及FreeBSD8.1下的应用部署。希望大家通过本章的学习,能够很好地掌握FreeBSD8.1的基础知识,并且可以快速地搭建自己的开发环境和测试环境。本节为rsync+Inotify实现数据的实时同步更新。2.7.4 rsync+Inotify实现数据的实时同步更新(2)
5.rsync+inotify企业应用案例
我们公司的后端Web是两台部署了Nginx的Web服务器(如下所示),由于没有共享存储,现在要实现的是对它们的根目录/data/htdocs/www实现即时同步更新。
WebServer1:192.168.1.5 Centos5.5 x86_64 WebServer2:192.168.1.6 Centos5.5 x86_64
根目录均为/data/htdocs/www,自动同步顺序为WebServer2→WebServer1。我们将WebServer1配置成rsync的服务器端即可。
(1)安装Inotify-tools,可以到http://inotify-tools.sourceforge.net/下载相应的inotify-tools版本,然后开始编译安装。
cd /usr/local/src tar zxvf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure &&make && make install
(2)WebServer1端(即192.168.1.5)的rsync配置详见2.7.2节的内容。下面是配置好/etc/rsyncd.conf文件,如下所示:
[root@server ~0m]# vim /etc/rsyncd.conf uid=nobody gid=nobody user chroot=no max connections=200 timeout=600 pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock log file=/var/log/rsyncd.log [www] path=/data/htdocs/www/ ignore errors read only=no list=no hosts allow=192.168.1.0/255.255.255.0 auth users=www secrets file=/etc/rsyncd.password
然后重启xinetd即可,如下所示:
/etc/init.d/xinetd restart
记得两台Web机器都要配置/etc/rsyncd.passwd文件。rsync的配置过程和原理请大家参考2.7.2节的内容,这里就不详细说明了。
注意 为了保证/data/htdocs/www的目录能够被自动同步,此目录建议分配777权限;/etc/rysncd.password分配600,不然实现不了自动同步,同步时会报如下错误:
password file must not be other-accessible continuing without password file Password:
(3)配置好WebServer2的Inotify后,写一个inotify的监控脚本/root/rsync.sh,脚本内容如下:
vim /root/rsync.sh #!/bin/bash src=/data/htdocs/www/ des=www ip=192.168.1.5 /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file do rsync -vzrtopg --delete --progress $src www@$ip::$des --password-file=/etc/rsyncd.password && echo "$src was rsynced"
done脚本相关解释如下:
--timefmt:
指定时间的输出格式。
--format:
指定变化文件的详细信息。
这个脚本的作用就是通过Inotify监控文件目录的变化,进而触发rsync进行同步操作。由于这个过程是一种主动触发操作,是通过系统内核完成的,所以,比起那些遍历整个目录的扫描方式来,效率要高很多。
然后我们将此脚本放入后台运行,输入如下命令即可:
nohup sh/root/rsync.sh&
(4)验证就很容易了,我们可以在192.168.1.6的机器的/data/htdocs/www目录下新建文件,更改文件内容,可以很欣慰地发现,192.168.1.5的机器上马上也会发生相应的改变,就像两台机器是网络RAID1一样,非常方便。
总体说来,rsync+Inofity比较适用于没有存储环境的小文件的即时同步更新,如果要更新的文件非常大则不建议用这种方式,如果需要同步的机器数量在10台以上时,我建议还是以共享存储的方法来解决。如果没有资金购置昂贵的存储,大家不妨考虑一下Heartbeat+DRBD+NFS的架构方案来作为我们的文件服务器。
参考文档如下所示:
http://ixdba.blog.51cto.com/2895551/580280 http://www.ibm.com/developerworks/cn/linux/l-ubuntu-inotify/index.html
另外,rsync在Linux/Unix下是一个比较重要和实用的服务,它不仅可以用于服务器之间的备份,还很适用做海量小文件(例如多级目录图片)的同步。另外,它同步数据的速度非常快,仅次于FTP速度,再加上自身可以配置成无人会话模式,所以许多系统管理员喜欢将其做成Crontab计划任务来自动化备份重要服务器资料。由于rsync的强大,现在有许多开源软件,都是针对于rsync的二次开发,大家可以在Google上面了解了一下。建议大家熟悉掌握rsync的用法,我们在工作中会经常用到它。
相关文章推荐
- 烂泥:rsync与inotify集成实现数据实时同步更新
- rsync+Inotify实现数据的实时同步更新
- rsync+Inotify实现数据的实时同步更新
- 安装布署rsync+Inotify实现数据的实时同步更新
- centos6 完全测试 rsync+Inotify实现数据的实时同步更新
- rsync+inotify实现数据的实时同步更新
- rsync+Inotify实现数据的实时同步更新
- rsync+inotify实现数据的实时同步更新
- 烂泥:rsync与inotify集成实现数据实时同步更新
- rsync+Inotify实现数据的实时同步更新
- rsync与inotify集成实现数据实时同步更新
- Linux下Rsync+Inotify-tools实现数据实时同步
- rsync+inotify实现Git数据实时同步备份 推荐
- rsync+inotify 实现数据实时同步
- CentOS 6.5 rsync+inotify实现数据实时同步备份
- 利用ssh+rsync+inotify实现数据的异地实时同步
- rsync+inotify实现数据实时同步备份
- rsync+inotifywait实现数据实时同步(下篇:编写脚本)
- rsync+inotify实现数据实时同步
- ssh-keygen+rsync+inotifywait实现数据实时动态同步