Rsync && Sersync

Rsync

基于SSH协议的一种文件传输应用。

它引入了分片比较传输的方式,因此对于相似文件传输效率很高。 简单说就是,它的算法会高效的分片计算源文件中和目标文件特征码,然后进r行比较,最后仅发送不一致的部分。 rsync会根据文件大小自动判断数据块大小,也可以用命令手动指定,官方建议大小在500-1000字节之间。

对于我们的应用场景,OSS文件同步,文件都是也不可修改,都是全量传输,所以并不用担心效率问题;同时rsync这种方式也非常利于断点续传。

Sersync

Sersync是金山的工程师基于inotify开发的。

而inotify 是linux的内核的一个用来监控文件系统的变化的模块,它可以监控相应的目录,并把其变化通知到用户空间的应用。但是它的记录只包含了目录发生了变化,并没有把具体是哪个文件或者哪个目录发生了变化记录下来。

Sersync则可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,而且是持久化的记录,所以可以实现与历史数据的对比。例如开启sersync,然后关闭sersync,修改目录中的文件,再启动sersync。sersync是可以比较出当前目录和历史目录的区别的。

sersync内置了rsync命令调用,从而实现自动同步发生变化的文件或者目录。

不同服务器上目录的双向同步

A服务器监控目标目录变化,并将变化通过rsync client命令发到服务器B的rsync server;

B服务器监控目标目录变化,并将变化通过rsync client命令发到服务器A的rsync server;

以下未完全验证:

A同步变化到B后,B会检查新变化的文件,发送特征到A。A服务器发现特征码完全一致,也就知道B服务器收到了刚才的同步请求。循环的链条就断掉了。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享