两个远程 Linux 服务器之间的大型文件树的双向实时同步

两个远程 Linux 服务器之间的大型文件树的双向实时同步

我说的大型文件树是指大约 20 万个文件,并且一直在增长。不过,在任何给定的小时内,只有相对较少的文件被更改。

双向的意思是,任一服务器上都可能发生更改,并需要将其推送到另一台服务器,因此 rsync 似乎并不合适。

我说的远程是指服务器都位于数据中心,但地理位置上彼此遥远。目前只有 2 台服务器,但随着时间的推移可能会增加。

就实时而言,同步之间有一点延迟是可以的,但每 1-2 分钟运行一次 cron 似乎不太合适,因为在任何给定的小时内,只有极小一部分文件可能会发生变化,更不用说一分钟了。

编辑:这是在 VPS 上运行的,因此我可能在内核级别上能做的事情有限。此外,VPS 的资源并不丰富,因此我会避开需要大量内存的解决方案(例如 Gluster?)。

完成此任务的最佳/最“可接受”方法是什么?这似乎是一种常见的需求,但我尚未找到一种普遍接受的方法,这令人惊讶。(我正在寻求大众的安全。:)

我遇到过同步在文件系统更改级别触发同步。这看起来很聪明,但并不常见,我对各种 lsyncd 方法有点困惑。只是将 lsyncd 与 rsync 一起使用,但这似乎对双向性来说很脆弱,因为 rsync 没有内存概念(例如,要知道 A 上已删除的文件是否应该在 B 上删除,或者 B 上是否有新文件应该复制到 A)。 唇型同步看起来只是一个 lsyncd+rsync 实现,对吗?

然后使用 lsyncdcsync2, 像这样:https://icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/... 我倾向于这种方法,但 csync2 有点奇怪,尽管我确实成功测试了它。我最担心的是,我还没有找到很多社区对这种方法的确认。

这里的人们似乎很喜欢 Unison,但似乎不再积极开发而且不清楚它是否具有像 lsyncd 那样的自动触发器。

我见过格鲁斯特提到过,但可能对我的需要来说有点过了?

更新:仅供参考 - 我最终选择了我提到的原始解决方案:lsyncd+csync2。它似乎运行得很好,我喜欢这种将服务器松散连接在一起的架构方法,这样无论服务器之间的链接质量如何,每个服务器都可以无限期地独立运行。

答案1

DRBD双主模式代理人是一个选项。

答案2

对于您来说,我建议使用双主模式的 DRBD 和 gfs 或 ocfs 组合。

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

DRBD 的替代方案可能是使用许多 (2+) iSCSI-Targets 的 Soft-Raid1 - 但我更喜欢具有两个节点的 DRBD。

答案3

除了同步,为什么不通过 NFS 共享同一个文件系统呢?

答案4

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

我想我会考虑将整个树置于版本控制之下(颠覆,例如),并在 cron 作业中定期从两个服务器检查/更新。

相关内容