您可以将Amazon EBS附加到多个实例吗?

时间:2009-05-08 18:44:18

标签: linux file amazon-ec2 amazon-web-services

我们目前使用多个Web服务器访问一个mysql服务器和文件服务器。考虑迁移到云,我可以使用相同的设置并将EBS连接到多个机器实例或另一个解决方案是什么?

11 个答案:

答案 0 :(得分:128)

更新(2015年4月):对于此用例,您应该开始查看新的Amazon Elastic File System (EFS),它旨在以您想要的方式多次附加。 EFS和EBS之间的主要区别在于它们提供不同的抽象:EFS公开NFSv4协议,而EBS提供原始块IO访问。

下面你会找到我原来的解释,说明为什么无法在多台机器上安全地安装原始块设备。


原始邮寄(2011年):

即使您能够将EBS卷附加到多个实例,也可以是_REALLY_BAD_IDEA_。引用Kekoa的话说,“这就像在两台计算机上同时使用硬盘一样”

为什么这是个坏主意? ...... 您无法将卷附加到多个实例的原因是EBS提供了“块存储”抽象,客户在该抽象上运行ext2 / ext3 /等文件系统。大多数这些文件系统(例如,ext2 / 3,FAT,NTFS等)是在假设它们具有对块设备的独占访问权的情况下编写的。访问相同文件系统的两个实例几乎肯定会以撕裂和数据损坏的方式结束。

换句话说,只有在运行旨在在多台计算机之间共享块设备的集群文件系统时,才能双重安装EBS卷。此外,即使这样也是不够的。 EBS需要针对这种情况进行测试,并确保它提供与其他共享块设备解决方案相同的一致性保证...即,这些块不会缓存在中间非共享级别,如Dom0内核,Xen层,和DomU内核。然后是在多个客户端之间同步块的性能考虑因素 - 大多数集群文件系统设计用于高速专用SAN,而不是尽力而为的商用以太网。这听起来很简单,但你所要求的是一件非常重要的事情。

或者,查看您的数据共享方案是否可以是NFS,SMB / CIFS,SimpleDB或S3。这些解决方案都使用更高层协议,旨在共享文件而无需共享块设备子系统。很多时候,这样的解决方案实际上更有效率。

在您的情况下,您仍然可以拥有一个由多个Web前端访问的MySql实例/文件服务器。然后,该文件服务器可以将其数据存储在EBS卷上,允许您进行夜间快照备份。如果运行文件服务器的实例丢失,您可以分离EBS卷并将其重新连接到新的文件服务器实例,并在几分钟内备份并运行。

“有什么像S3作为文件系统吗?” - 是和否。是的,有像s3fs这样的第三方解决方案可以正常工作,但是在引擎盖下,他们仍然需要为每次读/写进行相对昂贵的Web服务调用。对于共享工具目录,效果很好。对于您在HPC世界中看到的群集FS使用情况,不是偶然的。为了做得更好,您需要一种新服务,它提供面向二进制连接的协议,如NFS。提供具有合理性能和行为的多安装文件系统将是EC2的一个很棒的功能附件。我长期以来一直是亚马逊的倡导者,以建立类似的东西。

答案 1 :(得分:75)

不,这就像在两台计算机上使用硬盘一样。

如果您需要共享数据,可以设置所有实例都可以访问的服务器。如果您想为所有实例创建一个简单的存储区域,可以使用Amazon的S3存储服务来存储分布式和可扩展的数据。

迁移到云端,您可以使用完全相同的设置,但您可以使用S3替换文件服务器,或者让所有实例连接到您的文件服务器。

您有很多选择,但在实例之间共享硬盘可能不是最佳选择。

答案 2 :(得分:14)

不,根据EBS文档:“一个卷一次只能附加到一个实例”。

您目前如何使用共享存储?如果它仅用于从文件服务器提供文件,您是否考虑过设置系统以便可以将某些请求代理到文件服务器上的进程而不是让Web服务器提供这些文件?

答案 3 :(得分:4)

我很确定你不能,但你可以克隆一个EBS并将它附加到另一个实例。

这对于固定数据集或测试“真实”数据非常有用,但不允许多个实例在单个块存储上运行

答案 4 :(得分:4)

多个Web服务器访问MySQL服务器&文件服务器在AWS中是正常的。上述架构要遵循的一些最佳实践是:

要点1)EC2上的MySQL可以在AWS中以异步/半同步模式设置为主从。对于高性能DB

,建议使用RAID 0中的EBS-OPT + PIOPS

第2点)或者,您可以使用Amazon RDS +多可用区模式。对于读取扩展,可以将多个RDS只读副本附加到MySQL RDS。

要点3)EBS Volume不能同时附加到多个EC2。您可以使用EBS在Amazon EC2上基于GlusterFS创建文件服务器。多个Web服务器可以在AWS基础设施上同时与单个GlusterFS通信。

要点4)如果您的应用程序可以与S3集成为文件存储,那么它是首选,因为它带来了体系结构的稳定性。您也可以使用S3fuse等工具从您的应用程序访问S3。

答案 5 :(得分:4)

答案 6 :(得分:1)

IT世界中有一些称为集群文件系统,Redhat GFS,Oracle OCFS2,Veritas CFS ......

答案 7 :(得分:1)

为什么不在其他实例中为该卷创建一个具有卷和sshfs的实例?

答案 8 :(得分:1)

尽管EBS以前只允许将单个EC2实例连接到给定的卷,但是现在至少在io1卷上可以进行多连接。有关更多信息,请参见this AWS blog post

答案 9 :(得分:0)

简短的回答是明确的“否”。其他人已经在上面说过了。

说“是”的人没有回答问题,而是一个不同的问题。如果EFS只是NFS服务,那么它并不是最初说明的问题的答案。而且,是否“在所有区域都推出” EFS都没有关系,因为您可以完全执行自己的NFS实例,并且有多个服务器安装NFS。这并不是什么新鲜事,我们已经在1992年做到了。 SMB和sshfs,所有这些都是将驱动器安装为远程文件系统的方式。

那些说“你为什么要那样做”或“一切都会以眼泪结束”的人是错误的。数十年来,我们一直在将多个磁盘安装到多个服务器。如果您曾经使用过SAN(存储区域网络),通常通过FibreChannel SAN将同一设备连接到多个节点的能力是完全正常的。因此,十年前在虚拟化/云服务器变得无处不在之前运行服务器的任何人都对此有所了解。

很快就有了集群文件系统,其中两个系统可以读取和写入完全相同的卷。我相信这始于历史上的VAX和Alpha VMS时间。群集文件系统使用分布式互斥方案来直接操作块。

将同一磁盘安装到多个节点的优势在于速度和减少单点故障。

现在,集群文件系统在“消费者”托管业务中尚未变得非常流行,这是事实。而且它们很复杂并且存在一些陷阱。但是,您甚至不需要群集文件系统来利用连接到多个计算节点的磁盘。如果您需要只读驱动器怎么办?您甚至不需要集群文件系统!您只需将与只读(ro)相同的物理设备放入/ etc / fstab。然后,您可以安装到2或10个EC2服务器,并且所有这些服务器都可以直接从该设备读取!

在构建快速扩展的服务器场时,在云服务器领域中有一个明显的用例。您可以准备好主系统磁盘,并为每台服务器仅使用很小的启动和配置磁盘。您甚至可以使它们全部从同一启动磁盘启动,并且在以读写模式重新挂载/之前,您可以插入具有3层的Union-FS:

  1. 主只读系统磁盘,具有引导,内核和用户态 安装
  2. 仅包含少量文件的配置文件系统 (通常在/ etc中)特定于单个服务器。这个 磁盘可以被另一台服务器写出以准备引导 新实例。此处的示例文件为/ etc / hostname,仅 很少有配置文件需要每个节点保持不同。
  3. 您可能根本不需要的可写磁盘可能只是 / tmp作为内存文件系统。

所以,是的,这个问题很有意义,不幸的是,答案仍然是“否”。而且,没有NFS不能很好地替代该用例,因为它会惩罚来自系统磁盘的所有读取活动。但是,从NFS系统磁盘启动网络是实现上述用例的唯一替代方法。不幸的是,由于设置网络启动代理和NFS比访问同一物理块设备要复杂得多。

PS:我希望提交一个简短的版本作为评论,但由于51个信用点的门槛很愚蠢,所以我不能,所以我必须写一个相同的基本回答“否”,但要包括我的观点为什么这是一个相关的问题,却没有得到应有的答案。

PPS:我刚刚在StackExchange上找到一个提到iSCSI的人。 iSCSI有点像NFS,但从逻辑上来说又像FibreChannel SAN。您可以访问(并共享)物理块设备。这将使引导磁盘共享更加容易,因此您无需设置引导网络引导,这可能很麻烦。但是在AWS上,也没有可用的网络启动。

答案 10 :(得分:-3)

您可以在AWS中的多个服务器上完全使用一个驱动器。 我使用sshfs挂载外部驱动器并与EC2中的多个服务器共享。

我需要将单个驱动器连接到多个服务器的原因是在将所有备份放到本地之前放置一个单独的位置。