弹性文件系统(EFS)安装在AWS外部


23

我有一台不在AWS之外的服务器。我希望能够在其上挂载EFS卷,但是我不确定是否可行。

也许如果您创建了VPC,并通过VPN创建了隧道?

有人知道这是否可能吗?


绝对有可能...我已经在AWS外部通过TLS隧道使用EFS已有一段时间了...但是我相信您需要实施一些“技巧”才能使其实现工作。我将确认我的操作方式实际上是必要的(自设置以来已经有一段时间了),或者是否有可能做到这一点,我将在确认后发布答案。
Michael-sqlbot

EFS旨在成为多个EC2实例的共享文件系统。在外部,您应该考虑使用S3(类似于文件系统,它实际上是一个对象存储)或一个带有EBS实例的小型EC2实例。两者都可能比EFS便宜-SSD上的EBS的价格是EFS的1/3,磁性EBS的价格是EFS的1/6,S3则是EFS的1/10。您到底想实现什么使EFS成为最佳选择?
蒂姆(Tim)

我以为,由于它被称为ELASTIC文件系统,因此很容易将其连接到AWS外部。另外-如果我想将文件备份到AWS外部,那么即使不是不可能,也很难从S3执行。从EFS,我可以将其安装到EC2实例并执行备份。但是,如果他们俩都需要VPN,我想这几乎没有什么区别……
亚当

通过设计,可以从AWS外部轻松访问S3,非常容易进行集成/备份/真正的任何操作-超级灵活。EFS被设计为EC2实例之间的共享文件系统,因此在AWS之外使用它可能会更加困难,可能需要使用EC2实例作为代理。两者都不需要VPN。建议您需要与有资格/有经验的人讨论您的用例,而不要作假设并
Tim

Answers:


40

重要更新:

在2018年10月,AWS扩展了支持EFS的网络技术功能,使其现在可以跨托管VPN连接和跨区域VPC对等本地运行,而无需采用下面详述的代理解决方法。

https://aws.amazon.com/about-aws/whats-new/2018/10/amazon-efs-now-supports-aws-vpn-and-inter-region-vpc-peering/

EFS在2016年末增加了对通过AWS Direct Connect电路进行连接的支持。

https://aws.amazon.com/blogs/aws/amazon-efs-update-on-premises-access-via-direct-connect-vpc/


评论引发了一些有趣的问题,因为在我初读该问题时,我可能假设您比对EFS更为熟悉。

因此,首先,有一些背景知识:

弹性文件系统中的“弹性”主要是指存储空间和吞吐量的自动扩展,而不是外部访问的灵活性。

EFS似乎对您可以存储的数据量没有任何有意义的限制。EFS卷上记录的任何单个文件的最大大小为52,673,613,135,872字节(52 TiB)。同样,大多数其他限制也很宽泛。

EFS的计费方式特别具有“弹性”。与EBS卷上的文件系统不同,空间不会在EFS上预先分配,并且您仅按小时平均付费。您的费用根据您存储的数量而增加和减少(它们是“弹性的”)。删除文件时,您无需再支付一个小时内占用的空间。如果您将1 GB存储750个小时(≅1个月),然后将其删除,或者,如果将375 GB存储2个小时,然后将其删除,则每月的账单将是相同的……$ 0.30。当然,这与EBS完全不同,EBS会很高兴地向您收取$ 37.50的费用,以存储0x00该月剩余小时的375 GB数据。

S3的存储定价模型与EFS大致相同,因为删除对象后立即停止存储计费,费用约为EFS的1/10,但是正如我和其他人多次提到的那样,S3不是文件系统。诸如s3fs-fuse之类的实用程序试图提供一个“阻抗桥”,但是在试图将并非真正属于文件系统的某些东西视为真实存在时,存在固有的困难(最终的覆盖一致性并不是其中的最低要求)。因此,如果您需要一个真正的“文件系统”,并且该应用程序用于需要共享访问权限的应用程序,或者难以确定所需的存储空间,或者您希望按需扩展它,那么EFS可能会有用。

而且,当您有8.0 EiB的可用空间时,它看起来很酷。

$ df -h | egrep '^Filesystem|efs'
Filesystem                                            Size  Used Avail Use% Mounted on
us-west-2a.fs-5ca1ab1e.efs.us-west-2.amazonaws.com:/  8.0E  121G  8.0E   1% /srv/efs/fs-5ca1ab1e
us-west-2a.fs-acce55ed.efs.us-west-2.amazonaws.com:/  8.0E  7.2G  8.0E   1% /srv/efs/fs-acce55ed

但是,当然,使用最适合您的应用程序的存储服务很重要。每个选项都有其有效的用例。EFS可能是AWS提供的最专业的存储解决方案,其用例集比EBS或S3窄。


但是您可以从VPC外部使用它吗?

官方回答是

不支持通过VPC专用连接机制(例如VPN连接,VPC对等和AWS Direct Connect)挂载文件系统。

http://docs.aws.amazon.com/efs/latest/ug/limits.html

EFS当前仅限于仅EC2 Linux访问。在VPC中也是如此。更多功能将很快添加。您可以留意AWS宣布的新功能公告。

https://forums.aws.amazon.com/thread.jspa?messageID=732749

但是,实际的答案是肯定的,即使这不是官方支持的配置。为了使其工作,需要一些特殊的步骤。

使用弹性网络接口(ENI)在VPC中为每个EFS文件系统分配了终结点IP地址,通常每个可用区分配一个IP地址,并且您要确保将其安装在与实例匹配的可用区中,这不仅出于性能原因,而且还因为跨可用区边界传输数据时会收取带宽费用。

这些ENI有趣的是,它们似乎并未将路由表用于它们所连接的子网。无论安全组设置如何,它们似乎只能响应VPC内部的实例(每个EFS文件系统都有其自己的安全组来控制访问)。

由于无法访问任何外部路由,因此我无法直接通过硬件VPN访问EFS端点...因此,我转向了我的老朋友HAProxy,这确实是实现此工作所必需的(如@Tim所预测)。这是一个简单的配置,因为EFS仅使用TCP端口2049。

我在t2.nano上使用HAProxy(HAProxy非常有效),其配置如下所示:

listen fs-8d06f00d-us-east-1
    bind :2049
    mode tcp
    option tcplog
    timeout tunnel 300000 
    server fs-8d06f00d-us-east-1b us-east-1b.fs-8d06f00d.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000
    server fs-8d06f00d-us-east-1c us-east-1c.fs-8d06f00d.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000 backup
    server fs-8d06f00d-us-east-1d us-east-1d.fs-8d06f00d.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000 backup

该服务器位于us-east-1b中,因此如果1b中的端点通过运行状况检查失败,则它将us-east-1b端点用作主要端点,另两个用作备份端点。

如果你有一个VPN到您的VPC,你再使用此代理实例的IP地址作为目标(而不是使用EFS直接终点)安装的卷,你已经安装了EFS从VPC外部的文件系统。

我已经成功地将其安装在外部Ubuntu计算机和Solaris¹服务器上(事实证明,EFS通过使其更易于从其迁移服务来加速退役)。

对于某些情况,例如在迁移期间将数据移至AWS或在特定数据上并行运行旧系统和云系统,EFS似乎是赢家。

当然,具有较高往返时间的传统系统的性能将不如EC2实例,但这是可以预期的-物理定律也不例外。尽管如此,EFS和HAProxy网关似乎是使其在外部运行的稳定解决方案。

如果您没有VPN,那么一对HAProxy机器(AWS中的一台,数据中心中的一台)也可以在TLS上建立EFS隧道,从而使用封装在TLS中的有效负载建立单独的TCP连接,以传输每个单独的EFS互联网上的连接。从技术上讲不是VPN,而是连接的加密隧道。这似乎也表现不错。


¹默认情况下,Solaris 10已被破坏(不足为奇)-最初,root似乎没有特殊特权-由root创建的EFS卷上的文件归root拥有,但不能chown从Solaris机器(Operation not permitted),即使一切都可以从Ubuntu客户端正常运行。在这种情况下,解决方案是使用取消Solaris计算机上的NFS ID映射守护程序svcadm disable svc:/network/nfs/mapid:default。停止此服务将使一切正常工作。另外,/usr/sbin/quota需要在中禁用对每个登录名的调用/etc/profile。可能有更好或更正确的解决方案,但是它是Solaris,所以我不足为调查。


2
这是一个很好的答案,但我相信您提出的问题是错误的。我可以用叉子砍掉一棵树,但是有更好的工具可以完成这项工作。
蒂姆(Tim)

有时我想知道是否有人发现了我在此答案中包含的三个有趣的小复活节彩蛋中的任何一个。
Michael-sqlbot

4
5ca1ab1e(可伸缩)和acce55ed(访问)和8d06f00d(dogfood)?
runamok '16

2
这是“吃狗粮” ...但是足够接近,@runamok :)
Michael-sqlbot

3
我希望看到有人用叉子砍倒一棵树
Jam Risser 17/09/10

0

自2016年12月20日起,亚马逊宣布推出AWS Direct Connect,可用于在本地服务器上挂载EFS文件系统。因此,基本上,有一个本机功能允许您在VPC之外使用AWS EFS。

作为前提条件,您将必须启用并建立AWS Direct Connect连接,然后使用nfs-utils(如在EC2实例中装入EFS时应使用的那样)。

可以在以下URL中找到更多信息。我刚刚发布了此内容,因为我也在寻找这个未来,所以其他人知道在VPC之外存在针对EFS连接的本机解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.