NFS 在 EC2 实例间挂载作为 EFS 的替代方案

NFS 在 EC2 实例间挂载作为 EFS 的替代方案

我正在配置一个应用程序,使其在 AWS 中以“全框架”部署方式运行。此部署的一个方面要求每台服务器都能够看到一个公共存储位置。他们建议使用 WebDAV 服务器,但我们更喜欢使用某种共享安装驱动器。

EFS 是这里的完美解决方案......但它在我所在的地区不可用。

或者,我们考虑设置 NFS 挂载。是否可以在 EBS 卷上挂载 NFS 以类似于 EFS 的方式运行?这样做有什么优点/缺点吗?

答案1

我会谨慎对待 S3fs 的建议。S3 并非设计为文件系统,当应用程序期望它成为文件系统时,它会受到一些限制。S3 最终是一致的,这意味着更新可能会也可能不会及时反映出来。S3 没有部分更改的概念,因此以日志文件为例,如果您要附加或以其他方式更改,则每次更改时都会重新上传整个文件。这可能会很昂贵。S3FS 尝试利用本地缓存来避免过度传输,如果该节点上发生某些事情,这会增加另一层潜在的不一致性。

虽然在 EC2 实例上设置 NFS 相当简单,但您在设计中创建了单点故障 (SPOF)(如果实例或 EBS 消失,您的应用程序就会受到影响)。此外,从其他实例到您的 NFS 实例的跨可用区流量将产生带宽费用。

如果您正在寻找企业级 NFS 并且不能使用 EFS,那么可以使用 Marketplace 产品(aws.amazon.com/marketplace),但您也可以使用开源并使用 GlusterFS 作为 NFS 安装,并使用多个 EC2 实例来避免 SPOF 并将流量保持在 AZ 内:https://docs.gluster.org/en/latest/Install-Guide/Setup_aws/(但是,Gluster 本身就很难管理)

答案2

您有很多选择,但最好的选择取决于您的要求,但您没有提供足够的细节来推荐一个选项而不是另一个选项。我可能没有涵盖所有选项。

NFS 服务器

你可以设置 NFS 服务器在 EC2 实例上。这将使用 EBS 卷并通过 NFS 共享。网上有很多教程可以做到这一点()。

本地使用 S3

根据您的需求,您可能能够本地使用 S3,调用 S3 API,甚至使用aws s3 同步通过 cron。

RSync

您可以考虑从主服务器进行 rsync,一点点 t2.nano 可能就足够了。

S3FS

另一个选择是使用S3FS,这使得 S3 存储桶看起来像一个文件系统。您可以使用S3 端点以防止数据通过公共互联网。

在执行此操作之前,您需要阅读一些内容以了解可靠性并进行一些仔细的测试。我的理解是,如果您的 S3 存储桶与您的 EC2 实例位于同一区域,则您无需支付流量费,但我可能错了,而且这种情况随时可能发生变化。S3 定价页面说“S3 存储桶之间或从 S3 到同一区域内的任何服务的传输都是免费的” - 我假设 EC2 被视为一种服务。

我读到的信息表明这可能是一个相当可靠的选择,但您需要仔细测试 S3FS 版本。

答案3

您可以尝试 NetApp 的 CVO/CVShttps://cloud.netapp.com/cloud-volumes-service-for-aws它们提供 CIFS 和 NFS

相关内容