保持 ubuntu 中两个远程目录实时同步

保持 ubuntu 中两个远程目录实时同步

我的目的是保持两个远程目录(例如 dir1 和 dir2)同步。这样,每当 dir1 的内容发生变化时(可能是添加或删除新文件或目录,或者修改目录中文件的内容),该变化就会传播到 dir2,反之亦然。

我能想到的最简单方法是在两台机器上通过 cron 定期运行 rsync。但这种方法存在缺陷:

  1. 可能发生的情况是,前一个 rsysnc 尚未完成,而前一个 rysnc 仍在进行中,cron 再次执行了 rsync。
  2. 在 dir1 中添加了一个新文件,在 dir2 上运行 rsync 之前,dir1 上的 rsync 运行后,新添加的文件可能会从 dir1 中删除,因为 dir2 中不存在该文件
  3. 这也不是实时的。

有人能建议一些更好的方法吗?我正在寻找更容易设置和启动的开源软件。

答案1

在没有竞争窗口的情况下提供“硬实时”保证的唯一方法是确保写入操作仅在双方都命中后才被确认。实现此目的的常用方法是使用共享块设备上的集群文件系统(例如 OCFS2 或 GFS2)。可以使用 DRBD 轻松且廉价地构建此类共享块设备。

与任何同步机制一样,您的集群内网络必须能够以可接受的延迟承载变化率。

这份小抄大致是这样的

  • 在两侧预留块设备(磁盘、分区、LV 等)
  • 安装和配置 DRBD(apt-get install drbd-utils),使用以下优秀文档他们的网站
  • 安装您选择的集群堆栈:功能齐全的 Red Hat(如果您需要的不仅仅是一个共享文件系统)或简约但非常简单的 O2DLM(包含在 OCFS2 中)。
  • 使用 GFS2(仅限 Red Hat 堆栈)或 OCFS2(两种堆栈均可)格式化 DRBD 设备,并将其挂载在两侧

您现在没有一对同步目录:您有一个在两个节点上都可用的目录。这在功能上是相同的,但没有竞争窗口。

答案2

如果在同一台机器上,请考虑使用文件系统链接。这意味着 dir2“指向”dir1 或反之亦然,同时它是透明的。为了做到这一点,请使用ln例如ln -s /path/to/dir1 /path/to/dir2或替代地使用相对路径。这-s意味着它是一个符号链接,因此它只是引用路径而不是的 inode dir1

编辑:抱歉,错过了“两台机器”部分。

也许可以考虑使用网络共享,因为(接近)实时同步两个位置总是很困难。

相关内容