我们目前使用多个 Web 服务器访问一个 mysql 服务器和文件服务器。考虑到迁移到云,我是否可以使用相同的设置并将 EBS 附加到多个机器实例,或者其他解决方案是什么?
我相当肯定您不能,但是您可以克隆一个 EBS 并将其附加到另一个实例。
这对于固定数据集或对“真实”数据进行测试非常有用,但是不允许在单个块存储上操作多个实例
这是可能的,现在与最新的实例类型运行在 AWS 硝基在相同的可用性区域。有一些警告,但是对于需要 EBS 速度和 EFS 不可行的某些用例来说,这是非常好的。
Https://docs.aws.amazon.com/awsec2/latest/userguide/ebs-volumes-multi.html
不,这就像在两台电脑上使用一个硬盘驱动器。
如果需要共享数据,可以设置所有实例都可以访问的服务器。如果您希望为所有实例提供一个简单的存储区域,那么可以使用 Amazon 的 S3存储服务来存储分布式和可伸缩的数据。
移动到云,您可以有完全相同的设置,但是您可以用 S3替换文件服务器,或者让您的所有实例连接到您的文件服务器。
您有很多选择,但是在实例之间共享硬盘驱动器可能不是最好的选择。
不,根据 EBS 文档: “一个卷一次只能连接到一个实例”。
当前如何使用共享存储?如果只是为了从文件服务器服务文件,您是否考虑过设置一个系统,以便您可以代理某些请求到文件服务器上的进程,而不是让 Web 服务器服务这些文件?
更新(2015年4月) : 对于这个用例,您应该开始查看新的 亚马逊弹性文件系统(EFS),它被设计成以您想要的方式进行乘法连接。EFS 和 EBS 之间的关键区别在于它们提供不同的抽象: EFS 公开 NFSv4协议,而 EBS 提供原始块 IO 访问。
下面你会发现我最初的解释,为什么不可能安全地安装一个原始块设备在多台机器上。
原帖(2011) :
即使你能够得到一个 EBS 卷连接到多个实例,它也会是一个真正的 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的一个 GREAT 特性附加组件。我长期以来一直支持亚马逊建立类似的东西。
在 IT 世界中有一些东西被称为集群文件系统,Redhat GFS,Oracle OCFS2,Veritas CFS..。
为什么不在其他实例中创建一个包含该卷和 sshfs 的实例呢?
在 AWS 中,多个 Web 服务器访问 MySQLServer 和文件服务器是正常的。上述架构应遵循的一些最佳做法是:
第一点: 在 AWS 中,EC2上的 MySQL 可以设置为异步/半同步模式下的主从。对于高性能数据库,推荐使用 RAID0中的 EBS-OPT + PIOPS
第二点)你也可以使用 Amazon RDS + Multi-AZ 模式。为了扩展读取范围,可以将多个 RDS 读取副本附加到 MySQLRDS。
第三点) EBS 音量不能同时连接到多个 EC2。您可以使用 EBS 在 AmazonEC2上基于 GlusterFS 创建文件服务器。多个 Web 服务器可以在 AWS 下同时与单个 GlusterFS 通信。
第4点)如果您的应用程序可以集成到 S3作为文件存储,那么它是首选的,因为它为体系结构带来了稳定性。您还可以使用诸如 S3Fusion 之类的工具从应用程序访问 S3。
您完全可以在 AWS 中的多个服务器上使用一个驱动器。 我使用 sshfs 挂载一个外部驱动器并与 EC2中的多个服务器共享它。
我需要将一个驱动器连接到多个服务器的原因是,在将备份放到本地之前,需要有一个放置备份的单一位置。
简短的回答是一个绝对的“不”。其他人在上面已经说过了。
那些回答“是”的人没有回答这个问题,而是回答了一个不同的问题。如果 EFS 仅仅是一个 NFS 服务,那么它就不是最初声明的问题的答案。EFS 是否“在所有区域推出”并不重要,因为您可以完全执行自己的 NFS 实例,并让多个服务器挂载 NFS。这不是什么新鲜事,我们在1992年已经做过了。SMB 和 sshfs,所有这些都只是将驱动器挂载为远程文件系统的方法。
那些说“你为什么要这么做”或者“这一切都将以眼泪收场”的人是错误的。几十年来,我们一直在多台服务器上安装多个磁盘。如果您曾经使用过 SAN (存储区域网络) ,那么通常通过 FibreChannel SAN 将同一设备连接到多个节点的能力是完全正常的。因此,在虚拟化/云服务器变得无处不在之前10年前运行过服务器的任何人都有过这种经历。
很快就出现了集群文件系统,其中两个系统可以对完全相同的卷进行读写操作。我相信 VAX 和 Alpha VMS 的历史已经开始了。集群文件系统使用分布式互斥锁机制,可以直接操作块。
将同一磁盘安装到多个节点的优点是速度快,并减少单点故障。
现在,集群文件系统在“消费者”托管业务中并没有变得非常流行,这是事实。它们很复杂,也有一些陷阱。但是你甚至不需要一个集群文件系统来使用一个连接到多个计算节点的磁盘。如果你想要一个只读驱动器呢?你甚至不需要集群文件系统!您只需将与只读(ro)相同的物理设备放入/etc/fstab 中。然后挂载到2个或10个 EC2服务器,所有这些服务器都可以从该设备直接读取!
在构建快速扩展的农场时,这在云服务器世界中有一个明显的用例。您可以准备好您的主系统磁盘,并为每个服务器使用一个非常小的引导和配置磁盘。您甚至可以让它们都从同一个引导磁盘引导,并且在重新挂载/在读写模式之前,您可以插入一个具有3层的 Union-FS:
所以,是的,这个问题很有意义,不幸的是,答案仍然是“不”。没有 NFS 不能很好地替代该用例,因为它会惩罚来自系统磁盘的所有读活动。但是,从 NFS 系统磁盘进行网络引导是实现上述用例的唯一选择。不幸的是,由于设置网络引导代理和 NFS 比仅仅访问相同的物理块设备要复杂得多。
PS: 我本想提交一个简短的版本作为评论,但我不能,因为愚蠢的51个学分的门槛,所以我必须写一个答案,同样必要的“不”,但包括我的观点,为什么这是一个相关的问题,没有得到应有的答案。
附言: 我刚在 StackExchange 找到一个提到 iSCSI 的人。ISCSI 有点像 NFS,但在逻辑上类似于 FibreChannel SAN。您可以访问(并共享)物理块设备。这将使引导磁盘共享更加容易,所以您不需要设置引导网络引导,这可能是吹毛求疵的。但是在 AWS 上,也没有可用的网络引导。
尽管 EBS 以前只允许将单个 EC2实例连接到给定的卷,但现在可以实现多重连接,至少对 io1卷是这样。有关更多信息,请参见 这篇 AWS 博客文章。
EBS 刚刚宣布这是可能的: https://aws.amazon.com/about-aws/whats-new/2020/02/ebs-multi-attach-available-provisioned-iops-ssd-volumes/