备份存储在 Amazon S3 上的数据

备份存储在 Amazon S3 上的数据

我有一个 EC2 实例运行一个 Web 服务器,它将用户上传的文件存储到 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 传输到本地服务器可能很耗时,并且随着时间的推移可能会产生大量的传输成本。

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

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

提前感谢您提供的任何见解!

更新

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

答案1

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

我刚刚试过。是的,你可以从原始版本恢复。当你删除文件时,它会留下一个删除标记,你可以恢复之前的版本,即:单一、唯一的修​​订版。

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

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

Glacier 实际上是用于长期存储的,这种存储很少被访问。一次性检索大量数据的成本也非常高,因为它不适用于按时间点恢复大量数据(按百分比计算)。

最后,我们决定每月创建一个新的 bucket,作为每月的完整备份,并在第一天将原始 bucket 的数据复制到新的 bucket 中。然后使用类似 duplicity 的东西(http://duplicity.nongnu.org/)我们会每晚同步备份存储桶。

不要这样做,每个帐户只能拥有 100 个存储桶,因此 3 年后,仅备份就会占用存储桶限额的三分之一。

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

是的

有没有什么方法可以将文件从 S3 复制至 Glacier 呢?我错过了吗?

从来没听说过

答案2

我不喜欢安装 s3,因为它很慢,容易挂起,性能就像老式的 nfs。最好根据需要向上/向下移动。

http://s3tools.org/s3cmd

编写脚本很容易...不要忘记你的~/.s3cfg 文件

答案3

听起来你可能需要 S3FS,它基本上可以把你的 S3 存储桶安装得像本地文件系统一样:

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

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

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

然后我编写了一些 shell 脚本,主要用于rsync将数据同步到我的本地设置。

总体而言,我发现 S3FS 最适合读取放置在 Amazon S3 存储桶中的内容。写入不太一致。但对于备份 S3 存储桶而言,Tony Wang 的 S3FS 分支非常适用。

相关内容