文件双向同步的一点想法

研究了两天也没找到个很好的办法, 这里记录一下研究过的办法以及提出一个设想

 

1, inotify-tools + rsync

      使用inotify-watch监视文件夹, 有改动即执行rsync

      安装使用简单, 满足实时的需要, 但不能双向,性能也是瓶颈

 

2, sersync

      inotify + rsync, c++ 编写, 配置较多,能满足一些复杂的需求, 如过滤和plugin, 能满足实时的需求,性能也不错(经测试, 一次同步8000个文件没有问题, 而且不管原有多少文件,同步文件的时间比较固定),而且有出错重传机制, 唯一的遗憾是只能单向同步, 因为,它也是监控主服务器上的文件夹有改动即对修改的文件执行rsync。

 

3, openduckbill

      和sersync差不多,使用pyinotify + rsync

 

4, csync + inotify

     安装配置麻烦, 而且用了inotify的基本都只是单向

 

5,lsyncd

     和sersync一样的

 

6,unison

     可双向同步的工具, 但要做到实时好像不容易, 如果加上inotify-tools的话估计性能会有问题, 也不宜实现

 

看过这么多都不行,看来用现有工具是不行了,换个思路

 

1, 单纯用NFS, 建立一个共享的文件目录

      取决于网络,而且会有单点瓶颈

2, GFS

      好像是redhat专用? 没太调查

3, hadoop等分布式文件系统

     以现有使用hadoop的经验看来,读取文件的速度上达不到要求,而且hadoop也不适宜大量小文件的读写。 如果在每台机器上保持一个一直与存在于hadoop上的文件夹同步的文件夹,即每天机器对hadoop文件有个cache,这样可以部分解决同步问题,当然实时性不会是秒级了,应该是分钟级了。不过这是个思路。

 

我觉的更好的一个想法是用NFS+inotify+ vc(verison control) 

     比如有两台服务器,一台主一台从, 从服务器也会接受少量数据请求, 在从服务器上mount一个主服务器的目录, 对于从服务器来说,同步就变成本地两个目录的同步了, 分别对应本地目录和NFS目录构建一个树形结构的文件版本树, 用inotify监控这两个目录, 当发现有文件被修改时,将它的文件版本树上该文件版本加1, 并且将改动在版本树向上扩展到根目录, 一个线程不段比较两个版本树的根目录,如果版本不一样,则依次查找比较下面子目录的版本号,这样递归找到被修改的文件,然后将高版本的文件copy覆盖低版本的文件。

    我觉得这个想法是可行的, 利用inotify实时同步文件, verison control双向改动文件, 使用NFS是不想接触TCP那一层, 简化实现的复杂度, 而且整个系统跑在从服务器上,不会影响主服务器的应用, 但这也只是我一个简单的想法,还有很多细节需要完善的地方, 而且比较上面会有一定的工作量。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值