我有几个在 Amazon EC2 上运行的 Windows 服务器实例,并希望通过运行具有负载均衡器的重复实例来使它们更具容错性。
问题是特定数据,例如,如果文档根目录的内容即 C:/htdocs/ (Apache) 或 C:/Repositories (VisualSvn 服务器),则从一个 Web 服务器故障转移到另一个 Web 服务器是没有好处的不相同。
有没有办法在两个或更多实例之间共享一个卷?
我的想法是在 EC2 实例之间共享文件夹:
阅读不可能将相同的 EBS 卷附加到多个实例。如果我想跨 NFS 安装它们,我相信 AWS 也不是 NFS 友好的。
最后,我还检查了安装有 s3fs 的 S3 存储桶,但我发现这也不是一个好选择。
谁能帮我指出正确的方向?
这是一个在 AWS 中被追捧了一段时间的用例。如该线程中所述,实现此目的的两种常见方法是使用 S3 或 NFS 在实例之间共享数据访问。
2015年4 月 9 日,Amazon 发布了Amazon Elastic File System (Amazon EFS),它提供了您在图表中所要求的内容。
无法在多个 EC2 实例之间共享单个 EBS 卷。
您的图表正在将数据卸载到共享服务器。然而,这个共享服务器只是另一个单点故障。因此,您不会为自己节省任何东西:如果该服务器的 AZ 出现故障,那么您就丢失了数据,即使另一个 AZ 中的 Web 服务器/VisualSVN 服务器仍在运行。
您应该将服务器的两个独立功能拆分为两个独立的服务器/集群,以便可以相互独立地处理它们:
对于 Web 服务器,您真的需要在多实例场景中镜像卷,还是可以让您的实例随时终止而不会丢失数据?理想情况下,您不会将任何数据本地保存到实例中。相反,您会将所有数据在服务器外保存到数据库或 Amazon S3。这样,数据始终可供所有实例使用。如果服务器丢失,则没有数据。制作您的“主”AMI 并从该主 AMI 创建自动扩展组中的所有实例。当您的 Web 服务器代码更改时,部署新的 AMI,终止旧实例并从新 AMI 创建新实例。
对于 VisualSVN 服务器,要问的问题是 VisualSVN 是否可以在运行进程不关心的情况下处理其上的卷数据变化。例如,如果正在运行的进程在 RAM 中缓存了一些数据,如果某个硬盘驱动器同步进程出现在它后面并更改了它上面的硬盘驱动器,会发生什么?可能是 VisualSVN 服务器根本无法处理多实例场景。根据答案,您可能无法集群 VisualSVN 服务器。VisualSVN 服务器可能有它自己的集群功能。如果是这样,那么您应该对此进行调查。
我相信解决架构问题的标准 Windows Server 方法是使用集群的 Windows 共享存储空间实现图表中的“共享文件系统”块,将节点分布在至少两个可用区域中。
从理论上讲,这为您提供了一些看起来像标准文件共享但没有单点故障的应用程序。对于您的情况,这可能有点矫枉过正,但如果您要进行容错,这将有助于防止出现其他故障情况。
虽然不是针对您的问题,但这篇关于 Windows Server 故障转移群集的文章可能有助于了解工作的范围:http: //aws.amazon.com/microsoft/whitepapers/microsoft-wsfc-sql-alwayson/
这可以通过 Amazon EFS 实现,请通过链接。https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-shared-file-storage-for-amazon-ec2/