我有一个在AWS之外的服务器。 我希望能够挂载一个EFS卷,但我不知道这是可能的。
也许如果你创build一个VPC,并通过VPN创build一个隧道?
有人知道这是可能的吗?
评论提出了一些有趣的问题,因为在我最初的阅读中,我可能比EFS更熟悉EFS。
所以,首先是一点背景:
弹性文件系统中的“弹性”主要指存储空间和吞吐量的自动缩放 – 而不是外部访问的灵活性。
EFS似乎对您可以存储的数据量没有任何有意义的限制。 EFS卷上任何单个文件的最大文档大小为52,673,613,135,872字节(52 TiB) 。 大部分的其他限制同样慷慨。
EFS在计费方式上特别“有弹性”。 与EBS卷上的文件系统不同,EFS上不会预分配空间,您只需按小时平均价格购买。 您的费用根据您的存储量增长和缩减(“弹性”)。 当你删除文件,你停止支付一小时内占用的空间。 如果您存储1 GB 750小时(≅1个月)然后删除它,或者如果您存储375 GB 2小时然后删除它,您的每月帐单将是相同的… $ 0.30。 这当然与EBS完全不同,EBS很高兴为您在本月的剩余时间内储存375 GB的0x00
收取$ 37.50的费用。
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提供的最专业的存储解决scheme,与EBS或S3相比,使用情况更为狭窄。
但是你可以在VPC之外使用它吗?
官方回答是否 :
不支持通过VPC专用连接机制(如VPN连接,VPC对等和AWS Direct Connect)挂载文件系统。
– http://docs.aws.amazon.com/efs/latest/ug/limits.html
目前EFS仅限于EC2 Linux访问。 这在VPC内也是如此。 更多的function将很快添加。 您可以关注AWS新闻发布的新function。
– https://forums.aws.amazon.com/thread.jspa?messageID=732749
但是,实际答案是肯定的 ,尽pipe这不是官方支持的configuration。 为了使其工作,一些特殊的步骤是必需的。
每个EFS文件系统都使用弹性networking接口(ENI)在您的VPC中分配端点IP地址,通常每个可用区域一个,并且您要确保将其安装在与实例匹配的可用区中,不仅出于性能原因,还因为在跨可用性区域边界传输数据时应用了带宽收费。
关于这些ENI的一个有趣的事情是它们似乎没有为它们所连接的子网使用路由表。 他们似乎只能响应VPC内部的实例,而不pipe安全组的设置(每个EFS文件系统都有自己的安全组来控制访问)。
由于没有外部路由可访问,我不能直接通过我的硬件VPN访问EFS端点…所以我转向我的老朋友HAProxy,这确实(正如@Tim预测的那样)是完成这项工作所必需的。 这是一个简单的configuration,因为EFS只使用TCP端口2049。
我在t2.nano上使用HAProxy(HAProxy非常高效),configuration看起来像这样:
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,所以它使用us-east-1b端点作为主要的,另外两个作为备份,如果1b中的端点未能通过健康检查。
如果您的VPC中有一个VPN,则使用此代理实例的IP地址作为目标(而不是直接使用EFS端点)来挂载卷,并且您已经从VPC外挂载了EFS文件系统。
我已经成功地将它安装在外部Ubuntu机器以及Solaris¹服务器上(EFS已经被certificate非常方便,通过更容易地将服务从它们迁移出去而加快了它们的退役)。
在某些情况下,例如在迁移过程中将数据移动到AWS或者在特定数据上并行运行传统和云系统,EFS看起来像是赢家。
当然,具有较高往返时间的传统系统的性能不如EC2实例,但这是可以预料的 – 物理定律也不例外。 尽pipe如此,EFS和HAProxy网关似乎是一个稳定的解决scheme,使其在外部工作。
如果您没有VPN,那么一对HAProxy机器,一个在AWS,另一个在您的数据中心,也可以通过TLS隧道传输EFS,与TLS中包装的有效载荷build立单独的TCP连接,以传输每个EFS通过互联网连接。 不是技术上的VPN,而是encryption的连接隧道。 这也似乎performance相当好。
¹Solaris10(默认情况下)在默认情况下有点破坏 – 一开始,root似乎没有特殊的权限 – 由root创build的EFS卷上的文件由root拥有,但不能被chown
给另一个用户Solaris机器( Operation not permitted
),即使所有的一切都按照Ubuntu客户端的预期运行。 在这种情况下,解决scheme是使用svcadm disable svc:/network/nfs/mapid:default
打败Solaris计算机上的NFS ID映射后台驻留程序。 停止这项服务,一切都按预期工作。 另外,每个login名的/usr/sbin/quota
的调用都需要在/etc/profile
禁用。 可能有更好或更正确的解决scheme,但它是Solaris,所以我没有足够的好奇来进行调查。