标签 sersync 下的文章

前面的文章中,我介绍到 rsync + inotify 可以实现文件实时同步功能,rsync + inotify 有优点,也有一些弊端。

  • 需要编写脚本调用 inotifywait来实现,所有的逻辑控制都要编写脚本来实现,使用门槛高
  • 单线程同步,效率低
  • 使用 vi 编辑文件时,将会触发非常多的冗余事件
  • 删除目录时,会同时产生删除文件夹里的文件的事件,这些都是冗余事件
  • 使用脚本也是其优点,使得运维人员可以轻易地编写出满足条件的同步逻辑
  • 可以灵活控制同步选项

sersync 介绍

sersync 是由金山所开源的一款基于 rsync + inotify 的实现,它使用 C++ 语言进行编写,提供了比原生 rsync + inotify 更为强大的功能。

  • 过滤临时文件和不需要的事件,比如在write的时候只产生一个事件,这样就之需要rsync一次
  • 删除文件夹的时候,inotify就会同事产生删除文件夹里的文件与删除文件夹的事件,通过过滤队列,当删除文件夹时间产生的时候,会将之前加入队列的删除文件的事件全部过滤掉,这样只产生一条删除文件夹事件
  • 当rsync失败的时候,会进行稍后重新执行,如果仍旧失败,10小时候再次执行,确保服务器同步准确
  • 对于本地没有的文件,我也会对远程文件路径进行删除,同时不会比较其他文件,那些使用 rsync --include=/ --include=xxx.php$ --exclude= 的用户注意了,那种执行方式,效率很低,会递归比较所有目录
  • 支持主机到多个分机的同步,别且使用多线程同时执行,使文件在所有服务器上保持一致。并且同时同步inotiy产生的多个文件
  • 自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。无需再额外配置crontab功能
  • 多线程同步
  • 支持socket与http扩展插件

rsync.png

- 阅读剩余部分 -