140

我们目前使用多个网络服务器访问一个 mysql 服务器和文件服务器。考虑迁移到云端,我是否可以使用相同的设置并将 EBS 附加到多个机器实例,或者其他解决方案是什么?

4

11 回答 11

137

更新(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这样的 3rd 方解决方案可以“正常”工作,但在幕后,他们仍然必须为每次读取/写入进行相对昂贵的 Web 服务调用。对于共享工具目录,效果很好。对于您在 HPC 世界中看到的那种集群 FS 使用,这不是一个机会。为了做得更好,您需要一个提供二进制面向连接协议的新服务,例如 NFS。提供这样一个具有合理性能和行为的多挂载文件系统将是 EC2 的一个很棒的功能插件。长期以来,我一直倡导亚马逊构建类似的东西。

于 2010-10-13T00:04:59.637 回答
85

更新 (2020) 现在可以了!

现在可以使用在同一可用区内的 AWS Nitro 中运行的最新实例类型。有一些注意事项,但这对于某些需要 EBS 速度以及 EFS 不可行的用例非常有用。

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


原帖 (2009)

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

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

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

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

于 2009-05-08T19:13:30.973 回答
14

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

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

于 2009-05-26T20:40:54.087 回答
5

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

第 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 通信。

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

于 2013-04-12T14:56:22.047 回答
5

EBS 刚刚宣布这是可能的:https ://aws.amazon.com/about-aws/whats-new/2020/02/ebs-multi-attach-available-provisioned-iops-ssd-volumes/

于 2020-02-16T05:40:32.083 回答
4

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

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

于 2009-05-08T18:52:08.450 回答
2

IT 界有一些东西被称为集群文件系统、Redhat GFS、Oracle OCFS2、Veritas CFS ......

于 2011-02-10T22:33:55.377 回答
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。您可以访问(和共享)物理块设备。这将使启动磁盘共享更容易,因此您无需设置可能很挑剔的 bootd 网络启动。但是在 AWS 上,也没有可用的网络启动。

于 2019-01-03T18:23:54.520 回答
1

Although EBS has previously only allowed a single EC2 instance to be attached to a given volume, multi-attach is now possible, at least for io1 volumes. For more information, see this AWS blog post.

于 2020-02-15T09:25:11.223 回答
0

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

于 2012-10-19T18:34:35.387 回答
-3

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

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

于 2014-08-21T01:21:17.620 回答