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

Sim*_*gro 7 amazon-ec2 amazon-web-services

我有几个在 Amazon EC2 上运行的 Windows 服务器实例,并希望通过运行带有负载均衡器的重复实例来提高它们的容错性。

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

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

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

在此处输入图片说明

阅读不可能将相同的 EBS 卷附加到多个实例。我相信 AWS 也不是 NFS 友好的,以防我想跨 NFS 挂载它们。

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

任何人都可以帮助我指出正确的方向吗?

小智 12

这是一个在 AWS 中被追捧了很长时间的用例。如该线程中所述,实现此目的的两种常用方法是使用 S3 或 NFS 在实例之间共享数据访问。

20154 月 9 日,Amazon 宣布了Amazon Elastic File System (Amazon EFS),它提供了您在图表中要求的内容。

  • 截至 2016 年 6 月 28 日,EFS 已准备好投入生产。https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-production-ready-in-three-regions/。请注意,它不适用于 Windows 服务器。 (3认同)

Mat*_*ser 4

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

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

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

  1. 网络服务器,以及
  2. 视觉SVN服务器

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

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