如何为多个AWS EC2实例设置共享持久存储?

Cra*_*vid 6 amazon-ec2 amazon-web-services

我有一项托管在 Amazon Web Services 上的服务。我有多个 EC2 实例运行着完全相同的设置和数据,由弹性负载均衡器和扩展组管理。

这些实例是运行基于 PHP 的 Web 应用程序的 Web 服务器。因此,目前每个实例上都放置了完全相同的文件等。但是,当 ELB/扩展组根据负载规则等启动新实例时,文件可能不是最新的。此外,我宁愿使用共享文件系统进行 PHP 会话等,而不是粘性会话。

因此,我的问题是,出于这些原因以及将来可能会出现的更多原因,我希望有一个可以附加到我的 EC2 实例的共享文件系统实体。您建议用什么方法来解决这个问题?AWS 是否直接提供任何解决方案,以便我可以依赖他们的服务,而不是通过 DRBD 等自行完成?最简单的方法是什么?DRBD、NFS,...?S3 也能实现这些目的吗?

提前致谢。

小智 4

正如评论中提到的,AWS 宣布了 EFS ( http://aws.amazon.com/efs/ ) 一个共享网络文件系统。目前它的预览版非常有限,但基于之前的 AWS 服务,我希望在接下来的几个月内看到它普遍可用。

与此同时,AWS 有一些第三方共享文件系统解决方案,例如 SoftNAS https://aws.amazon.com/marketplace/pp/B00PJ9FGVU/ref=srh_res_product_title?ie=UTF8&sr=0-3&qid=1432203627313

S3 是可能的,但并不总是理想的,主要障碍是它本身不支持任何文件系统协议,相反,所有交互都需要通过 AWS API 或通过 http 调用。此外,当考虑将其用于会话存储时,“最终一致”模型可能会导致问题。

话虽这么说,如果您需要的只是更新资源,您可以创建一个简单的脚本作为 cron 运行或在启动时从 s3 下载文件。

最后,对于像 css/images 这样的静态资源,首先不要将它们存储在您的 Web 服务器上 - 有很多文章介绍了直接从 s3 存储和访问静态 Web 资源同时将动态内容保留在您的服务器上的好处。