多个 EC2 实例(扩展)如何在一个 EBS 上进行数据存储?
Posted
技术标签:
【中文标题】多个 EC2 实例(扩展)如何在一个 EBS 上进行数据存储?【英文标题】:how does multiple EC2 instances (scaling) works on one EBS for data storage? 【发布时间】:2011-06-16 06:12:46 【问题描述】:因此,在一个简单的情况下,如果只有一个实例,那么我可以将数据存储到安装在该实例上的 EBS 卷中。例如/mnt/db
但是,如果我扩展并拥有多个实例(静态或动态扩展),它是如何工作的?
因为一个 EBS 只能附加到一个实例,如果我有多个实例,是否意味着我必须为每个实例附加一个 EBS 卷?如果是这样的话,每个Instance的EBS卷上的数据就会不一样。
很明显,我希望所有实例都访问(R&W)单个卷(作为数据存储)。并且卷中的数据会不断增长,并且没有停机时间。
解决办法是什么?有没有办法不挂载设备(EBS),只调用它来访问数据?
这是我能想到的: 1)如果每个实例都有自己的 EBS 卷,那么每个时间间隔(例如 1 小时),所有实例都会卸载和分离 EBS 卷,并附加一个新卷。然后是一个强大的实例,它可以挂载所有刚刚分离的 EBS 卷,并聚合所有数据。 2) 或类似于 1),而不是分离和附加,我只是为所有实例的所有卷拍摄快照。然后强大的实例聚合来自快照的数据。并将结果保存到另一个 EBS 或 S3。
这两种方法似乎有效.. 但需要大量工作。有没有更聪明的方法来解决这个问题?谢谢。
顺便说一下,由于性能问题,我不能让实例将数据写入 S3。 :)哦,这个怎么样 3)首先,所有实例都有自己的EBS,并将数据写入EBS。然后每个小时,数据将被发送到 S3。然后另一个实例将聚合它们。
【问题讨论】:
这是一个非常好的问题,也是 AWS Auto Scaling 的一部分,我不明白,希望得到答案。当数据库位于 EBS 卷上时,自动缩放如何工作?也就是说,新的 EC2 实例如何访问它? 【参考方案1】:拥有一个可以挂载到其他实例的 NFS 实例怎么样?
【讨论】:
是的,您可以在 Linux 中设置 NFS。对于性能方面,显然比直接临时存储慢。要么使用临时驱动器,然后在指定时间使用 cron 任务将其同步到 NFS。【参考方案2】:您似乎需要为最新的 EC2 实例创建 EBS 快照。这将创建一个 EBS 支持的 AMI。然后,您需要终止所有不是最新的 EC2 实例,并从新创建的 AMI 启动新的实例堆栈。如果您有一个负载均衡器正在运行,那么您还必须将这些新实例附加到您的负载均衡器。 这似乎有点冗长,但都可以通过编程方式完成。至少这就是我认为使用 Amazon 在云中进行扩展的方式以及跨多个实例传播更改的方式。其他有更多经验的人验证了这一点。我打算稍后自己测试一下。
【讨论】:
以上是关于多个 EC2 实例(扩展)如何在一个 EBS 上进行数据存储?的主要内容,如果未能解决你的问题,请参考以下文章
如何扩展 EC2 节点为 Cassandra 提供更多存储空间