多个 AWS EC2 实例之间的共享文件系统

多个 AWS EC2 实例之间的共享文件系统

我有几个在 Amazon EC2 上运行的 Windows 服务器实例,并且想通过使用负载均衡器运行重复实例来提高它们的容错能力。

问题在于具体的数据,例如,如果文档根目录(即 C:/htdocs/(Apache)或 C:/Repositories(VisualSvn Server))的内容不一样,那么从一个 Web 服务器故障转移到另一个 Web 服务器是没有用的。

有没有办法在两个或多个实例之间共享一个卷?

我的想法是在 EC2 实例之间共享文件夹:

在此处输入图片描述

读到无法将同一个 EBS 卷附加到多个实例。我相信如果我想通过 NFS 安装它们,AWS 也不是 NFS 友好的。

最后,我还检查了使用 s3fs 安装的 S3 存储桶,但我发现这也不是一个好选择。

有人能帮我指明正确的方向吗?

答案1

无法在多个 EC2 实例之间共享单个 EBS 卷。

您的图表正在将数据卸载到共享服务器。但是,这个共享服务器只是另一个单点故障。因此,您无法为自己节省任何东西:如果该服务器的可用区发生故障,那么您将丢失数据,即使另一个可用区中的 Web 服务器/VisualSVN 服务器仍在运行。

您应该将服务器的两个独立功能拆分为两个独立的服务器/集群,以便它们可以彼此独立地处理:

  1. 网络服务器,以及
  2. VisualSVN 服务器

对于 Web 服务器,您是否真的需要在多实例场景中镜像卷,或者您是否可以让实例随时终止而不会丢失数据?理想情况下,您不会将任何数据保存到实例本地。相反,您可以将所有数据保存到服务器外的数据库或 Amazon S3。这样,数据始终可供所有实例使用。如果服务器丢失,则所有数据都不可用。创建“主”AMI 并从该主 AMI 在自动扩展组中创建所有实例。当您的 Web 服务器代码发生变化时,部署新 AMI,终止旧实例并从新 AMI 创建新实例。

对于 VisualSVN 服务器,要问的问题是 VisualSVN 是否可以处理卷数据更改,而无需运行进程关心它。例如,如果运行进程在 RAM 中缓存一些数据,如果某个硬盘同步进程在它背后出现并更改硬盘,会发生什么?可能是 VisualSVN 服务器根本无法处理多实例场景。根据这个问题的答案,您可能无法集群 VisualSVN 服务器。VisualSVN 服务器可能有自己的集群功能。如果是这样,那么您应该调查一下。

答案2

这是 AWS 中备受追捧的一个用例。如此主题,实现此目的的两种常见方法是使用 S3 或 NFS 在实例之间共享数据访问。

2015 年 4 月 9 日亚马逊宣布Amazon Elastic File System (Amazon EFS),它提供了您在图表中所要求的内容。

答案3

我相信解决您的架构问题的标准 Windows Server 方法是使用集群的 Windows 共享存储空间实现图中的“共享文件系统”块,并将节点分布在至少两个可用区域。

从理论上讲,这会让你得到一个在应用程序看来像标准文件共享的东西,但它没有单点故障。这对你的情况来说可能有点过头了,但如果你追求容错能力,这将有助于防止额外的故障情况。

虽然这篇有关 Windows Server 故障转移群集的文章并非专门针对您的问题,但它可能有助于让您了解工作的范围:http://aws.amazon.com/microsoft/whitepapers/microsoft-wsfc-sql-alwayson/

答案4

使用 Amazon EFS 可以实现这一点,请通过链接查看。https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-shared-file-storage-for-amazon-ec2/

相关内容