一、rsync实现两台服务器数据同步的原理:
Rsync 是基于rsync算法校验源(SRC)与目标(DEST)之间的差异实现数据同步的。也就是说,当使用rsync工具同步数据时候,只复制源(SRC)发生改变的文件,到目标(DEST),这类似于增量备份。所以rsync同步数据的速度是很快的。但是rsync的传输性能有点差,在海量小文件需要同步时,表现很差劲。因为rsync是基于文件同步的(不是块级别的),在传输之前还要进行校验。
Rsync的工作模式有多中,使用rsync的服务模式来构建:主/从服务器的数据同步。此时rsync工作为守护进程监听在:TCP/873, 能接收客户端的数据同步请求。
客户端发出的数据同步请求方式有两种:
1、 从远程rsync服务器拉取数据到本地
例:
从远程rsync服务器拉取数据(把rsync导出的存储空间中的所有文件镜像到本地)到本地的/web目录
2、往远程服务器推送数据
例:
往远程rsyn服务器导出的存储空间(web)推送数据(文件fstab)
使用rsync协议向远程rsync服务器导出的存储空间(web)推送数据(镜像目录/etc)
二、那么如何实现:实现两台服务器的数据同步呢?
要点:只要当数据改变时,rsync客户端往rsync服务器推送数据或从主服务器拉取数据,就可以实现两台服务器数据同步了。
1、选择rsync客户端的工作模式:
因为:rsync客户端向服务端发出的数据同步请求命令的方式有两种(推送数据/拉取数据):那么,Rsync客户端是从rsync服务器拉取数据(镜像数据)还是rsync客户端推送(上传)数据,这要视,同步数据源放在rsync服务器端还是放在rsync客户端?
说明:本实验的同步数据源存放在rsync客户端192.168.60.40所在文件系统的:/web目录中,所以
使用“推送模式”。
2、选择触发rsyc客户端从rsync服务器端拉取数据或推送数据的方式?
说明:
第1种方式,不能保证两台服务器的数据是实时同步的,因为数据发生改变与rsync客户端发出同步请求命令不能联运起来。如果,我们的数据更新频度很快的话,往往会造成某台服务器的数据落后很多另一台服务器的。而第2种解决方案,只要数据发生改变就会发生数据同步请求,它是实时的。
Rsync + inotify 机制实现的两台服务器数据同步如下图如示:
三、在192.168.60.99主机搭建rsync服务器
Rsync工作于服务模式,要为其提供配置文件,配置文件如下:
四、在192.168.60.40安装inotifywatch工具;
要使用inotifywatch工具定义inotify监控的对象和监控事件。Inotify工作在内核空间。
Inotifywatch会把inotify监控到的事件输出到标准输出来。
安装步骤:
五、在客户端192.168.60.40设置inotify 与 rsync联动;
联动原理:
可以通过管道,把innotify监控到的事件送到while循环,由read读取到有监控事件发生,就执行while循环体内的rsync同步数据请求命令。这样就实现了inotify与rsync的联运。代码如下:
六、测试;
1、启用服务
说明:这里选择rsync由超级守护进行xinetd管理。所以,要启用xinetd服务。
启动 xinetd服务
开启rsync服务
2、在rsync服务端运行inotify.sh脚本
说明:在后台运行。
注意:rsync服务器监听的端口为:TCP/873
3、查看rsync服务器192.168.60.99输出的存储空间的数据文件
4、在rsync客户端192.168.60.40,复制一些文件到被inotify监控的目录/web中
5、查看rsync服务器输出的存储空间/web是否有对应的文件
OK!!!