从 OSX 安装 Amazon EFS

从 OSX 安装 Amazon EFS

先生们,我按照这篇优秀文章中的说明进行操作,但未能连接。 在 AWS 之外挂载弹性文件系统 (EFS)

我在 Mesos 集群中使用 CoreOS。我们有一个 EFS 连接到集群中的所有节点,以便它们可以共享数据、脚本等。我们有一个通向 AWS VPC 的 VPN 隧道,因此我们可以从办公室进行连接。

我的用户想上传一些脚本到 EFS 并获取计算结果,所以他们想在本地挂载 NFS。所以我按照上面文章的建议启动了一个 haproxy。

sudo docker run -d --net=host haproxy /bin/bash -c "echo -e 'listen fs-1e7bb658-us-east-1\n    bind :2049\n    mode tcp\n    option tcplog\n    timeout tunnel 300000\n    server fs-1e7bb658-us-east-1a us-east-1a.fs-1e7bb658.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000' > /haproxy.cfg && haproxy -f /haproxy.cfg"

如果不清楚的话,配置是这样的:

listen fs-1e7bb658-us-east-1
    bind :2049
    mode tcp
    option tcplog
    timeout tunnel 300000 
    server fs-1e7bb658-us-east-1a us-east-1a.fs-1e7bb658.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000

它将启动 haproxy 并使用隧道连接到 EFS,如上述主题中所述。我知道它正在工作,因为我可以使用 Haproxy IP 将 EFS 安装到集群节点中的第二个文件夹(即 /testing),当我将文件写入 /testing 时,我可以在 /shared 文件夹中的所有节点中看到它。例如:

sudo mount 100.100.100.68:/ /testing           # Mount using haproxy
echo "testing123!" > /testing/testing.txt    # write to a file
cat /shared/testing.txt                      # get from any node in the cluster
>>> testing123!

所以问题是,当我想从 OSX 安装时,我得到了:

grodriguez:/ Guimo$ sudo mount 100.100.100.68:/ /sharedfiles
mount_nfs: can't mount / from 100.100.100.68 onto /sharedfiles: RPC prog. not avail

我知道 HaProxy 正在监听,因为我可以从 OSX 执行以下任务:

grodriguez:/ Guimo$ telnet 100.100.100.68 2049
Trying 100.100.100.68...
Connected to 100.100.100.68.
Escape character is '^]'.

因此它使用 telnet 连接到服务,但不会使用 nfs 连接。

安全组非常宽松,而且如果 telnet 不起作用,我也不会使用 telnet 连接。所以该服务正在该端口上运行。

我读到我可以尝试寻找 mountd 和 nfs 服务,但一无所获。也许 EFS 隐藏了它们。也许这就是 OSX 抱怨缺少服务的原因。

grodriguez:/ Guimo$ rpcinfo -p 100.100.100.68
program vers proto   port
100000    4   tcp    111  portmapper
100000    3   tcp    111  portmapper
100000    2   tcp    111  portmapper
100000    4   udp    111  portmapper
100000    3   udp    111  portmapper
100000    2   udp    111  portmapper
100024    1   udp  45358  status
100024    1   tcp  60755  status
100021    1   udp  43439  nlockmgr
100021    3   udp  43439  nlockmgr
100021    4   udp  43439  nlockmgr
100021    1   tcp  34893  nlockmgr
100021    3   tcp  34893  nlockmgr
100021    4   tcp  34893  nlockmgr

但是如果隧道仍然不起作用,代理为什么能够成功连接?

顺便说一句。我也尝试了 AWS 方式连接,但 OSX 也存在问题。

grodriguez:/ Guimo$ mount -t nfs4 -o nfsvers=4.1 100.100.100.68:/ /sharedfiles
mount: exec /System/Library/Filesystems/nfs4.fs/Contents/Resources/mount_nfs4 for /sharedfiles: No such file or directory

任何帮助均感激不尽。

问候,Guimo

编辑:如果下面的注释中没有说明清楚的话。我使用 docker for mac 启动了 debian,然后在容器中安装了 nfs4 支持,然后连接到 HaProxy 隧道。一切顺利,我可以看到我的 testing.txt 文件。

所以我猜测这是一个 OSX 特有的问题,与上面的解决方案无关,这很棒。

答案1

对于任何正在寻找此类问题答案的人来说,迈克尔的评论解决了我的问题。

我们直接连接到 AWS,并在向安全组添加正确的入站规则(TCP 2049 办公室子网)后,我就能够将 EFS 安装到我的本地 MacBook 上。

sudo mount -t nfs -o vers=4 -o tcp -w x.x.x.x:/ efs

相关内容