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


138

当前,我们使用多个Web服务器访问一个mysql服务器和文件服务器。在考虑迁移到云时,我可以使用相同的设置并将EBS附加到多个计算机实例上吗,或者还有什么解决方案?


给出的答案是否定的。但是引用的原因困扰着我。每个人都像“就像将同一个硬盘驱动器安装到多台计算机上一样”,而我去了“那又如何呢?” 使用SCSI或FibreChannel SAN,我们始终可以做到这一点,这是很有意义的。例如,将多个服务器进行只读安装在同一只读数据上。Oracle和其他大型RDBM设计为以群集模式运行,在该模式下,多台服务器使用相同的物理存储。它可以更快。EBS / NFS运行缓慢,不是一种选择。但是请注意,即使您可以连接到多个EC2,您的IOPS仍然会受到限制。
Gunther Schadow

由于2020年2月,你可以将某些类型的EBS的多个EC2实例- aws.amazon.com/blogs/aws/...
Koshur

Answers:


135

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

在下面,您将找到有关为什么无法在多个计算机上安全安装原始块设备的原始解释。


原文(2011):

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

为什么这是个坏主意? ...无法将卷附加到多个实例的原因是EBS提供了一种“块存储”抽象,客户可以在该抽象上运行诸如ext2 / ext3 / etc之类的文件系统。这些文件系统(例如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
NFS(和类似的SMB方法)的问题在于,一台计算机将充当服务器(物理安装文件系统)。该机器故障将导致EBS卷(或磁盘也下降)。是否有像S3这样的文件系统?
sheki 2011年

1
只是澄清一下-如果将EBS卷附加到实例,并且该实例灾难性地死亡,则EBS卷就可以了。从访问意义上讲,它仅会“关闭”,您需要将其与关闭的实例分离,然后将其重新连接到新实例。
戴夫·多普森

“ ...几乎肯定会以眼泪和数据损坏而告终。” 经典。@DaveDopson
海滩小屋

5
对于任何其他看到此答案的人,知道亚马逊刚刚发布了EFS,该EFS允许共享的自动扩展驱动器,该驱动器可以通过NFS挂载到多个实例上。
JoshStrange 2015年

@JoshStrange-感谢您的注意。更新的帖子。
Dave Dopson

78

更新(2020)现在有可能!

现在,可以在同一可用区中的AWS Nitro中运行最新实例类型。有一些警告,但这对于某些需要EBS速度且EFS不可行的用例来说非常有用。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html


原帖(2009)

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

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

迁移到云中后,您可以进行完全相同的设置,但是可以将文件服务器替换为S3,或者将所有实例都连接到文件服务器。

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


14

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

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


2
这是该报价的链接: aws.amazon.com/articles/1667。请参阅文章底部的常见问题解答。让我想知道为什么aws ec2 describe-volumes返回一个附件数组
Mark Berry

4

我相当确定您不能,但是您可以克隆EBS并将其附加到另一个实例。

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


4

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

要点1)EC2上的MySQL可以在AWS的异步/半同步模式下设置为主从。对于高性能数据库,建议使用RAID 0中的EBS-OPT + PIOPS

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

要点3)EBS卷不能同时连接到多个EC2。您可以使用EBS在Amazon EC2上基于GlusterFS创建文件服务器。多个Web服务器可以在AWS基础设施上同时与单个GlusterFS对话。

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



2

在IT世界中,有一些东西叫做集群文件系统,Redhat GFS,Oracle OCFS2,Veritas CFS ...


检查对ddopson的答案的评论
sheki 2011年

1
@sheki我认为您对ddopson的回答的评论与群集文件系统完全无关。群集文件系统旨在由多个服务器同时安装。clusteredfs的全部要点是避免单点故障。
瑞安

2

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

那些说“是”的人没有回答这个问题,而是一个不同的问题。如果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上,也没有可用的网络启动。


1

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


0

您为什么不创建一个具有卷的实例,而在其他实例中却将sshfs创建到该卷?


-3

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

我需要将单个驱动器连接到多台服务器的原因是要有一个地方放置所有备份,然后再将它们拉到本地。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.