10

我有大量数据要在全球 4 或 5 个站点上保持同步,每个站点大约 0.5 TB。这种变化(添加或更改)每天大约 1.4 GB,并且数据可以在四个站点中的任何一个站点发生变化。

很大一部分(30%)的数据是重复的包(可能是打包的 JDK),所以解决方案必须包括一种方法来识别本地机器上存在这样的东西并取而代之从另一个站点下载。

版本控制不是问题,这不是代码库本身。

我只是感兴趣是否有任何解决方案(最好是开源的)接近这样的事情?

我的使用 rsync 的婴儿脚本不再那么简单了,我想做更复杂、更智能的同步。

谢谢

编辑:这应该是基于 UNIX 的 :)

4

7 回答 7

12

你试过Unison吗?

我用它取得了很好的效果。它基本上是一个更智能的 rsync,这可能是你想要的。这里有一个比较文件同步工具的列表。

于 2008-10-24T15:19:44.927 回答
5

听起来像是 BitTorrent 的工作。

对于每个站点的每个新文件,创建一个 bittorrent 种子文件并将其放入集中的 Web 可访问目录中。

然后每个站点下载(通过 bittorrent)所有文件。这将为您生成带宽共享和自动本地副本重用。

实际配方将取决于您的需要。例如,您可以为每个主机上的每个文件创建1个bittorrent种子,并将种子文件的修改时间设置为与文件本身的修改时间相同。由于您每天(每小时?)都会这样做,因此最好使用“make”之类的东西来(重新)为新文件或更新文件创建种子文件。

然后,您将所有主机中的所有种子文件复制到集中位置(“tracker dir”),并使用“仅在较新时覆盖”选项。这将为您提供所有文件的所有最新副本的一组种子。

然后每个主机下载所有种子文件(同样,使用“如果更新设置覆盖”)并开始对所有种子文件进行 bittorrent 下载。这将下载/重新下载所有新的/更新的文件。

每天重复一遍。

顺便说一句,正如您在评论中所说,不会有“从自身下载”。如果本地主机上已经存在文件,则将验证其校验和,并且不会进行下载。

于 2008-10-24T15:19:47.593 回答
2

像 Red Hat 的Global Filesystem那样的东西怎么样,这样整个结构就可以在每个站点上拆分到多个设备上,而不是在每个位置都进行复制?

或者可能是商业网络存储系统,例如来自LeftHand Networks的(免责声明 - 我不知道成本,也没有使用它们)。

于 2008-10-24T15:49:28.267 回答
1

你有很多选择:

  • 您可以尝试设置复制数据库来存储数据。
  • 使用rsynclftp和自定义脚本的组合,但这不适合您。
  • 使用具有最大压缩率的git repos 并使用一些脚本在它们之间进行同步
  • 由于数据量相当大,而且可能很重要,因此请在聘请专家时进行一些自定义开发;)
于 2008-10-24T15:19:03.710 回答
1

Check out super flexible.... it's pretty cool, haven't used it in a large scale environment, but on a 3-node system it seemed to work perfectly.

于 2009-06-30T08:31:18.860 回答
0

听起来像是Foldershare的工作

于 2008-10-24T15:26:21.450 回答
0

您是否尝试过detect-renamedrsync 的补丁(http://samba.anu.edu.au/ftp/rsync/dev/patches/detect-renamed.diff)?我自己没有尝试过,但我想知道它是否不仅会检测到重命名的文件,还会检测到重复的文件。如果它不会检测到重复的文件,那么,我猜,有可能修改补丁来做到这一点。

于 2008-10-25T11:41:41.503 回答