我正在尝试在 Linux 中设置相当小的数据集的 2 路文件同步。我想通过 WAN 复制数据,因此像 gluster 这样的分布式文件系统不符合我的兴趣 - 它们很慢(尤其是读取大量和小文件,如 php 应用程序)。这种存储的 Gluster 性能非常糟糕。我想将此复制用于网络应用程序托管解决方案)。
我知道一些机制,如 lsyncd、incron、inotify 和 ofcource rsync 或 unison,但很难将它们联系在一起。最困难的部分是当存在双向同步时,因为通知系统我在两个方向发送相同的文件:
A(新文件,通知) ---rsync---->乙(不是新文件,但 inotify 不知道,所以也会通知)
乙---rsync相同的文件----> A
我尝试使用 FIFO 方式组织主机之间的 rsync 进行同步,但它仍然不是最好的方法,因为 fifo 由于每个文件通知而变大(例如 1000 个新文件 = 1000 个通知),并且这些通知混合在来自 2 个主机的 FIFO 中,因此我实际上无法将它们批处理在一起。最干净的解决方案是尝试以某种方式深入 inotify/lsyncd 并让他们知道当监控文件系统从 rsync 或通过 ssh 协议接收数据时不应该发送通知,当 apache 或 proftpd 正在写入时,它应该发送通知。拥有一个简单的复制控制器,带有用于 rsync 的 FIFO 和一些锁定/负载分配系统,足以构建可靠的 2 路同步解决方案
有没有人尝试过制作这样的东西?