1、rsync的优点和不足
1.1、rsync的优点
与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如,对文件服务器数据的定期备份,对本地磁盘定期进行数据镜像等。
1.2、rsync的不足
随着对数据安全性和可靠性要求的提高,rsync在高端业务系统中逐渐暴露出不足。
首先,rsync同步数据时,需要扫描所有文件后进行对比,然后再进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,而且发生变化的往往是其中很少的一部分,因此rsync在这方面是非常低效的。
其次,rsync不能实时监控、同步数据,虽然它可以通过Linux守护进程的方式触发同步,但是两次触发动作一定会有时间差,可能导致服务器和客户端数据出现不一致,无法在出现应用故障时完全恢复数据。
2、rsync+inotify组合
2.1、inotify介绍
inotify是一种强大的、细粒度的、异常的文件系统事件监控机制。Linux内核从2.6.13版本起,加入了对inotify的支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种细微事件,利用这个内核接口,第三方软件可以监控文件系统下文件的各种变化情况,inotify-tools就是这样的一个第三方软件。
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件系统有任何变化时,会触发rsync同步,这样刚好解决了同步数据的实时性问题。
3、rsync+inotify组合的使用
3.1、安装inotify工具inotify-tools
由于inotify的特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否是2.6.13版本以上。使用如下命令:
1 |
uname -r |
如果有三项输出,就表示系统默认支持inotify。这样就可以安装inotify-tools,下载、编译、安装步骤略。
3.2、利用rsync+inotify搭建实时同步系统
案例描述:
这是一个CMS内容发布系统,后端采用负载均衡集群部署方案,由一个负载调度节点、三个服务节点及一个内容发布节点构成。内容发布节点负责将用户发布的数据生成静态页面,同时将静态网页传输给三个服务节点,而负载调度节点负责将用户请求根据负载算法调度到相应的服务节点上,实现用户访问。用户要求在前端访问到的网页数据始终是最新的、一致的。
解决方案:
为了保证用户访问到的数据的一致性和实时性,必须保证三个服务节点上的数据与内容发布节点上的数据始终是一致的,这就需要通过文件同步工具来实现,这里采用rsync。同时又要保证数据是实时的,这就需要inotify,即利用inotify监视内容发布节点文件的变化,如果文件有变化,那么就触发rsync,将文件实时同步到三个服务节点上。
3.2.1、安装rsync与inotify-tools
inotify-tools是用来监控文件系统变化的工具,因此需要安装在内容发布节点上,服务节点上无需安装。另外需要在web1、web2、web3和server节点上安装rsync。
在这个案例中,内容发布节点充当了rsync客户端的角色,而三个服务节点充当了rsync服务器端的角色,整个数据同步的过程其实就是一个从客户端向服务器端发送数据的过程。
3.2.2、在三个服务节点上配置rsync
配置文件即rsyncd.conf
3.2.3、配置内容发布节点
配置内容发布节点的主要工作是将生成的静态网页实时同步到集群中三个服务节点上,这个过程可以通过一个shell脚本来完成。脚本内容找参考资料,然后相应修改。
这个脚本的作用就是通过inotify监控文件目录的变化,进而触发rsync进行同步操作。由于这个过程是一个主动触发操作,是通过系统内核完成的,所以比那些遍历整个目录的扫描方式效率要高很多。
3.2.4、测试rsync+inotify实时同步功能
验证是否配置成功,验证过程略。