两台远程linux服务器之间大文件树的双向实时同步


21

大文件树的意思是大约20万个文件,并且一直在增长。不过,在任何给定的小时内,文件更改的数量相对较少。

双向是指更改可能在任一服务器上发生并且需要推送到另一服务器,因此rsync似乎不合适。

所谓远程,是指服务器都位于数据中心内,但在地理位置上却彼此远离。当前只有2台服务器,但是随着时间的推移可能会扩展。

实时而言,同步之间有一点延迟是可以的,但是似乎每1-2分钟运行一次cron似乎并不正确,因为在给定的小时内可能有很小一部分文件发生更改,更不用说分钟了。

编辑:这是在VPS上运行的,所以我可能只能在可以执行的内核级工作上受限制。另外,VPS的资源也不丰富,因此我回避需要大量内存的解决方案(例如Gluster?)。

什么是完成这项工作的最佳/最“公认”的方法?这似乎很常见,但是我还没有找到一种普遍接受的方法,这令人惊讶。(我正在寻求群众的安全。:)

我遇到过lsyncd来触发文件系统更改级别的同步。这似乎很聪明,尽管不是超级常见,而且我对各种lsyncd方法有些困惑。只是将lsyncd与rsync一起使用,但是由于rsync没有内存的概念,这似乎对于双向来说可能是脆弱的(例如-知道是否应该在B上删除A上的已删除文件还是在B上是新文件)应该复制到A)。 唇形看起来只是一个lsyncd + rsync的实施,对不对?

然后将lsyncd与csync2一起使用,就像这样:https : //icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ...我倾向于这种方法,但是csync2有点古怪,尽管我确实对其进行了成功的测试。我最担心的是,我无法找到很多社区对此方法的确认。

这里的人们似乎非常喜欢Unison,但是似乎它不再处于活跃的开发中,并且不清楚它具有像lsyncd这样的自动触发器。

我已经看到Gluster提到过,但是对于我所需要的东西可能会过分杀了?

更新: fyi-我最终使用了我提到的原始解决方案:lsyncd + csync2。它似乎运行得很好,并且我喜欢将服务器非常松散地连接在一起的体系结构方法,这样每台服务器都可以无限期地独立运行,而不管它们之间的链接质量如何。


您需要处理哪种更改?EG的创建,删除,修改。
sciurus

另外,您期望发生冲突吗?是否可以在两台服务器上修改相同的文件?
sciurus

所有更改:创建,删除,修改。有潜在的冲突,但冲突应很少发生。我不介意我是否仅收到有关冲突的警报,然后必须手动解决。
2011年

Answers:


5

DRBD双主用模式代理是一种选择。


代理似乎既不是开源也不是免费的,对吗?我不确定我是否理解没有在异步模式下使用代理的后果:在延长的停机时间内,如果没有代理,则[small?]输出缓冲区可能会填满,并且我们会丢失同步?从中很难恢复吗?
2011年

请参阅上面的答案。我认为代理不是您所需要的。即使在很小的停机时间内,drbd-meta设备也将标记为“脏”块,并在连接重新建立后进行传输。我认为代理和异步模式之间的主要区别在于异步模式使用一些MB的最大缓冲区。之后,它将再次同步,以再次填充缓冲区。代理可能会提供更大的缓冲区(如果您有较大的延迟,或者在本地写入的速度比远程写入速度快,则需要使用该缓冲区)。
Nils

2

为什么不通过NFS共享同一文件系统而不是同步?


2
NFS太糟糕了,太糟糕了。任何事情都比NFS更好
AliGibbs 2011年

2
多服务器设置的要点之一是故障转移/冗余。因此,一台服务器必须能够在没有其他服务器的情况下继续运行。
dlo 2011年

那您应该在问题中提到-无需对一个完全合理的答案投反对票!
Bart B

仅供参考,我没有拒绝投票-有人这样做。但是,是的,我应该首先提到这一点。
2011年

@Bart:好吧-他确实提到两个遥远的站点上存在并发访问。因此,即使您设置了HA-NFS也是一个糟糕的解决方案,因为在NFS访问期间,一侧会遭受延迟。而且我也没有投票。但是我已经担任NFS管理员足够长的时间来支持AliGibbs。:-/
Nils

2

实施分布式文件系统可能比将其与工具和脚本一起黑客入侵更好,特别是如果服务器群集将增长的话。您还将能够更好地处理崩溃的节点。

我认为Gluster(或AFS)一点也不为过。


Gluster需要1GB内存吗?gluster.com/community/documentation/index.php / ... ...我也在使用VPS,所以我不确定是否要更改AFS可能需要的内核级别。但是我开始看到适当的分布式fs是更好的方法。
dlo 2011年

是的,很抱歉,我没有早一点意识到您正在使用VPS主机。服务器和客户端的Gluster内存占用量都不小,并且可以大幅增长。DRBD听起来更合适。

AFS是必经之路。
Anthony Giorgio

2

在您的情况下,我建议将双主模式下的DRBD与gfs或ocfs结合使用。

双主数据库中DRBD的缺点是它将以同步模式运行。但是,这里的写入速度似乎并不重要,对吧?

DRBD的替代方法可能是使用许多(2+)iSCSI Target的Soft-Raid1-但我希望DRBD具有两个节点。


1
同步模式会很糟糕-我不需要它,而且我不想破坏性能,因为服务器是通过跨大洲的WAN连接的。但是您不能在异步模式下使用双主数据库吗?
2011年

我当前使用的是DRBD 8.3.5-您必须处于同步模式(“ C”)才能进入双主模式。我没有DRBD代理的个人经验,但是它似乎与Veritas Volume Replicator相似-但这可能不适合,因为您希望双方都可以进行写访问。块级别的同步模式可能没有您想象的那么糟糕-也许gfs和/或ocfs可以缓冲写操作。
尼尔斯

我刚刚查看了一篇比较GFS2和OCFS2 的德语文章。因此,至少OCFS2似乎支持缓冲的文件系统访问。该文章建议使用GFS2,因为它较旧。有关GFS2的详细信息,请参阅GFS2上的RedHat文档 -它也使用缓冲-但您应该对并发写入使用不同的目录以获得最佳性能。
尼尔斯

0

如上所述,有许多解决方案可用,每种解决方案都有其优点和缺点。

我想我应该考虑将整个树置于版本控制下(例如Subversion),并定期在cron作业中从这两个服务器进行检入/更新。


0

刚刚结束了对同一件事的探索,我将继续学习gluster。但是,我尚未完成或未找到任何性能测试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.