备份存储在Amazon S3上的数据


16

我有一个运行Web服务器的EC2实例,该服务器将用户上传的文件存储到S3。这些文件只写入一次,并且永不更改,但偶尔会被用户检索。我们每年可能会积累大约200-500GB的数据。我们希望确保此数据是安全的,尤其是防止意外删除,并且希望能够恢复被删除的文件,无论其原因如何。

我已经阅读了有关S3存储桶的版本控制功能,但是似乎无法找到没有修改历史记录的文件是否可以恢复。有关版本控制,请参见此处的AWS文档:

http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html

在这些示例中,它们没有显示上传数据但从未修改然后删除数据的场景。在这种情况下删除的文件是否可以恢复?

然后,我们认为可以使用对象生命周期管理将S3文件备份到Glacier:

http://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html

但是,这似乎对我们不起作用,因为文件对象没有复制到Glacier而是移到了Glacier(更准确地说,这似乎是一个已更改的对象属性,但无论如何...)。

因此,似乎没有直接的方法来备份S3数据,并且将数据从S3传输到本地服务器可能很耗时,并且随着时间的流逝会产生大量的传输成本。

最后,我们认为我们将每月创建一个新存储桶以用作每月的完整备份,并在第1天将原始存储桶的数据复制到新存储桶。然后使用类似duplicity(http://duplicity.nongnu.org/),我们每晚都会同步备份存储桶。月底,我们将备份存储桶中的内容放入Glacier存储中,并使用原始存储桶的最新副本创建一个新的备份存储桶...并重复此过程。这似乎可行,并且可以最大程度地降低存储/传输成本,但是我不确定双重性是否允许直接进行存储区到存储区传输,而无需先将数据传输到控制客户端。

所以,我想这里有几个问题。首先,S3版本控制是否允许恢复从未修改过的文件?有什么方法可以将S3中的文件“复制”到我错过的Glacier吗?重复性或任何其他工具是否可以直接在S3存储桶之间传输文件以避免传输成本?最后,在备份S3数据的方法上我是否偏离了常规?

预先感谢您提供的任何见解!

更新资料

亚马逊最近宣布版本控制现在可以使用生命周期规则


aws.amazon.com/blogs/aws/archive-s3-to-glacier/…+ 底部有一段不错的YouTube短片,向冰川解释了S3
等效

Answers:


10

我已经阅读了有关S3存储桶的版本控制功能,但是我似乎无法发现对于没有修改历史记录的文件来说>恢复是否可行。请参阅此处的> versioning上的AWS文档:

我刚刚尝试过 是的,您可以从原始版本还原。当您删除文件时,它会创建一个删除标记,您可以在此之前恢复版本,即:单个修订。

然后,我们认为我们可以使用对象生命周期>管理将S3文件备份到Glacier:

但是,这似乎对我们不起作用,因为文件对象未复制到Glacier而是已移动到Glacier(更准确地说,这似乎是对象属性已更改,但无论如何...)。

Glacier实际上是用于长期存储的,很少访问。一口气检索大部分数据也很昂贵,因为这并不意味着及时还原大量数据(按百分比计算)。

最后,我们认为我们将每月创建一个新存储桶以用作每月的完整备份,然后在第1天将原始存储桶的数据复制到新的存储桶中。然后使用类似duplicityhttp://duplicity.nongnu。 org /),我们将在每>晚上同步备份存储桶。

不这样做,每个帐户只能有100个存储桶,因此3年之内,仅备份就占了存储桶配额的三分之一。

所以,我想这里有几个问题。首先,S3版本控制是否允许恢复从未修改过的文件?

有什么方法可以将S3中的文件“复制”到我错过的Glacier吗?

从来没听说过


感谢Sirex,有一个澄清:我们打算一次只保留一个备份桶(当月),并将上个月的备份存档到Glacier,然后根据某些常规保留策略删除Glacier副本(每个月三个月,然后每季度一年)。您是否认为这是可能的,还是有其他一些AWS限制阻止了该策略?
Fiver

嗯,我想这是合理的。不过,我没有在生气中尝试过(或就冰川而言,我们使用悉尼,但当我们研究悉尼时它并不可用)
Sirex

3

我不喜欢安装s3,因为它速度慢并且可以像老派nfs一样挂起和执行。最好根据需要向上/向下移动。

http://s3tools.org/s3cmd

它很容易编写脚本...不要忘记您的〜/ .s3cfg文件


哇,这看起来很棒!
JakeGould

@nandoP +1我曾想过使用s3cmd并滚动自己的文件
Fiver

1

听起来您可能需要S3FS,它基本上可以将S3存储桶安装为本地文件系统,就像它们是本地文件系统一样:

http://code.google.com/p/s3fs/wiki/FuseOverAmazon

我更喜欢使用此分叉版本,因为它保留了与在Web控制面板中为Amazon S3创建的文件夹结构相同的文件夹结构:

https://github.com/tongwang/s3fs-c

然后,我准备了一些Shell脚本,这些脚本基本上用于rsync将数据同步到本地设置。

总的来说,我发现S3FS最适合读取放置在Amazon S3存储桶中的内容。写作不是那么一致。但是出于备份S3存储桶的目的,S3FS的Tony Wang分支效果很好。


1
听起来很有用。是否可以在存储桶之间直接传输而不下载到客户端?
Fiver

可能是的。我主要使用它来安装在本地服务器上并备份到我们的本地计算机。但是,由于它确实具有写功能,因此我不排除使用它作为在存储桶之间随机播放数据的“中间选择”。基本上在中间计算机上,将一个存储桶安装在一个安装点上。然后将另一个存储桶安装为另一个安装点。然后执行一个rsync。但是正如我所说,Amazon S3的修改时间/日期可能很奇怪,因为它实际上不是文件系统。但是实验。
JakeGould
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.