什么是全球同步大量数据的最佳方式?
我有大量的数据在世界各地的4个或5个站点上保持同步,每个站点大约有半个TB。这种变化(增加或改变)大约每天1.4千兆字节,并且数据可能在四个站点中的任何一个上发生变化。什么是全球同步大量数据的最佳方式?
很大一部分(30%)的数据是重复的包(可能是打包的JDK),所以解决方案必须包含一种方法来获取这样的事实:在本地机器上存在这样的事情并抓住他们,而不是从另一个网站下载。
版本控制不是问题,这不是一个代码本身。
我只是有兴趣,如果有任何解决方案(最好是开源),接近这样的事情?
我的宝贝脚本使用rsync不会削减芥末了,我想做更复杂的智能同步。
感谢
编辑:这应该是基于UNIX :)
你有很多的选择:
- 您可以尝试建立复制DB来存储数据。
- 使用组合rsync或lftp和自定义脚本,但不适合你。
- 使用混帐回购与他们之间最大压缩和同步使用一些脚本
- 由于数据量是相当大的,而且很可能重要的是,这样做无论是在聘请专家的一些定制开发;)
听起来像是一个BitTorrent的工作。
对于每个站点的每个新文件,创建一个bittorrent种子文件并将其放入集中式web可访问目录中。
每个站点然后下载(通过bittorrent)所有文件。这将产生带宽共享和自动本地副本重用。
实际配方取决于您的需要。 例如,您可以为每个主机上的每个文件创建一个bittorrent种子,并将种子文件的修改时间设置为与文件本身的修改时间相同。既然你每天都会这样做(小时?),最好使用诸如“make”之类的东西来为(重新)创建仅用于新文件或更新文件的种子文件。
然后,您可以将所有主机的所有种子文件复制到集中位置(“tracker dir”),并带有“只在更新时覆盖”选项。这会为您提供一组种子文件,供所有文件的所有最新副本使用。
然后每个主机下载所有的种子文件(再次,“覆盖如果更新的设置”),并启动bittorrent全部下载。这将下载/重新下载所有新的/更新的文件。
Rince重复,每天。
顺便说一下,不会有“从本身下载”,就像你在评论中说的那样。如果文件已经存在于本地主机上,它的校验和将被验证,并且不会进行下载。
工作如何沿着红帽Global Filesystem线的东西,使整个结构跨越每个站点拆分到多个设备,而不是它的所有在每个位置复制吗?
或者也许是一个商业网络存储系统,如LeftHand Networks(免责声明 - 我不知道费用,并没有使用它们)。
您是否尝试过rsync的detect-renamed
补丁(http://samba.anu.edu.au/ftp/rsync/dev/patches/detect-renamed.diff)?我还没有自己尝试过,但我想知道它是否会检测到不仅仅是重命名,而且还有重复的文件。如果它不会检测到重复的文件,那么我想可能会修改该修补程序来执行此操作。
检查出超级灵活....它很酷,没有在大规模环境中使用它,但在3节点系统上它似乎完美工作。
这*几乎*正确,我特别喜欢链接到网站。有了Unison,它不会先看解决方案的本地文件系统,比如在父目录或姐妹目录(我甚至想定义这个目录)。如果大小,名称,模式时间和校验和是相同的,那么就抓住它... – Spedge 2008-10-24 16:09:34
为什么不使用链接代替这些链接,而是复制这些JDK和什么?担心复制那些肯定不需要重复的东西似乎不太合适。 Unison将会同步链接......这样就可以工作,并且减轻一些空间需求和一些令人头痛的问题 – 2008-10-24 17:40:37