Ada*_*dam 27 amazon-web-services amazon-vpc amazon-efs
我有一台位于 AWS 之外的服务器。我希望能够将 EFS 卷挂载到它,但我不确定这是否可行。
也许如果您创建一个 VPC,并通过 VPN 创建隧道?
有谁知道这是否可能?
Mic*_*bot 44
重要更新:
2018 年 10 月,AWS 扩展了支持 EFS 的网络技术的功能,使其现在可以跨托管 VPN 连接和跨区域 VPC 对等本地工作,而无需求助于下文详述的代理解决方法。
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
Run Code Online (Sandbox Code Playgroud)
但是,使用最适合您的应用程序的存储服务当然很重要。每个选项都有其有效的用例。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
然而,实际的答案是 Yes,即使这不是官方支持的配置。为了使它工作,需要一些特殊的步骤。
使用弹性网络接口 (ENI) 在您的 VPC 中为每个 EFS 文件系统分配端点 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
Run Code Online (Sandbox Code Playgroud)
该服务器位于 us-east-1b 中,因此它使用 us-east-1b 端点作为主要端点,如果 1b 中的端点未通过健康检查,则使用另外两个端点作为备份。
如果您的 VPC 中有 VPN,那么您可以使用此代理实例的 IP 地址作为目标挂载卷(而不是直接使用 EFS 端点),瞧,您已经从 VPC 外部挂载了 EFS 文件系统。
我已经成功地将它安装在外部 Ubuntu 机器以及 Solaris¹ 服务器上(事实证明,EFS 可以更轻松地将服务从它们迁移出去,从而非常方便地加速它们的退役)。
对于某些情况,例如将数据移入 AWS 或在迁移期间针对特定数据并行运行旧系统和云系统,EFS 似乎是赢家。
当然,具有更高往返时间的遗留系统的性能将不如 EC2 实例,但这是意料之中的——物理定律没有例外。尽管如此,EFS 和 HAProxy 网关似乎是使其在外部工作的稳定解决方案。
如果您没有 VPN,那么一对 HAProxy 机器,一个在 AWS 中,一个在您的数据中心,也可以通过 TLS 建立 EFS 隧道,使用封装在 TLS 中的有效负载建立单独的 TCP 连接,以传输每个单独的 EFS通过 Internet 连接。技术上不是 VPN,而是加密的连接隧道。这似乎也表现得相当好。
¹Solaris 10 默认情况下(毫不奇怪)有些损坏——最初,root 似乎没有特殊权限——由 root 创建的 EFS 卷上的文件归 root 所有,但不能chown
从Solaris 机器 ( Operation not permitted
),即使一切都按 Ubuntu 客户端的预期工作。在这种情况下,解决方案是使用svcadm disable svc:/network/nfs/mapid:default
. 停止此服务会使一切按预期工作。此外,/usr/sbin/quota
需要在/etc/profile
. 可能有更好或更正确的解决方案,但它是 Solaris,所以我没有足够的好奇心去调查。
归档时间: |
|
查看次数: |
24030 次 |
最近记录: |