请不要问我为什么(他们让我这么做),但我必须在 EC2 中启动每 200 个节点/实例时将 500GB 数据复制到本地驱动器。出于本帖以外的原因,这些数据必须放在本地驱动器上,而不是 EBS 驱动器上,因此我无法从快照中受益。
我能以最快的方式做到这一点吗?从 S3 复制到每个节点需要很长时间。我尝试将 EBS 卷附加到每个包含数据的节点,然后将数据从 EBS 复制到本地驱动器,但这也需要很长时间(几个小时_)
现在,我也在考虑使用 bit torrent,但不确定效果如何。将 500GB 静态数据复制到 200 个 ec2 实例的每个本地驱动器的最佳方法是什么?
500Gb的数据由数百个大小不等的文件组成,但最大的文件是20GB。
答案1
您不想使用 EBS 的原因是它很慢。您可能想要测试 EBS 优化实例以及预配置 IOPS EBS 卷(甚至可以进行 RAID 以获得更高的 IOPS)。这将简化向新实例提供数据的过程。
请注意,EBS 卷需要一段时间才能使所有数据以最高性能可用。也就是说,您在新 EBS 卷上获得的性能比在卷块填充后的性能要慢。
这是我写的一篇文章,讨论了这个过程,包括一种从快照识别 EBS 卷何时完成初始化的方法(尽管它基本上包括通过网络传输整个卷):
http://alestic.com/2010/03/ebs-volume-initialization-from-snapshot
如果您的应用程序希望立即启动,但需要访问之前未读取的数据时速度会稍微慢一些,那么我建议使用 EBS 优化实例加上预配置 IOPS EBS 卷,最好使用 RAID-0。一旦卷填充完毕,应用程序速度就会大幅提升。
否则,从 S3 加载数据时的游戏名称是并行化。只要您使用的实例类型具有足够高的 IO,您就可以拥有一百个并发连接从超级可扩展的 S3 服务下载数据。
然而,即使在 1Gbps 接口上,下载 500GB 仍需要一个多小时。
这里有一个小窍门可以考虑:使用 EBS 优化实例,您将获得一个专用于 EBS 子系统的网络接口,与标准网络接口分开。如果您从 S3 下载一半数据,从 EBS 卷下载另一半数据,那么您可能能够将数据加载时间缩短一半。
以防您没有考虑到这一点:确保您的数据在存储中被压缩以减少传输时间。
答案2
披露:我来自 Zadara Storage
我建议你看一下 Zadara Storage。使用 Zadara Storage,你可以在 NFS 安装中拥有中央存储库,所有 EC2 机器都可以访问该存储库。与 S3 相比,Zadara 具有非常高的带宽和低延迟,并且你每次都可以复制到本地驱动器。(甚至可以直接从 Zadara Storage 使用)如果你需要块设备,你可以通过简单的 NFS 或 iSCSI 从 EC2 安装 Zadara Storage。
您可以免费试用http://www.zadarastorage.com
答案3
这是一个非常老的问题,但对于那些有类似问题的人来说,完成此操作的最快方法是将其复制到一个 EBS 卷,对该卷进行快照,然后根据需要从该快照创建卷并将它们附加到您的实例。对于几乎没人使用的东西 - 放置组,这可能是一个很好的用例。放置组仅限于单个可用区,但会将您置于 10G 网络上,这意味着您的 500GB 文件副本将显著增加。
或者,您可以将其转储到 S3 并从那里复制。