多个 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 提供更多存储空间

如何从我的 EBS 支持的 EC2 实例创建 AMI?

如何减少 EC2 实例的根 EBS 卷大小?

如何使用 Boto 启动 EC2 实例,指定 EBS 的大小?

如何从备份中排除附加到 EC2 实例的某些 EBS 卷?

Laravel AWS EBS 自动扩展