因此,我一直在尝试创建一个类似 Dropbox 的系统,以允许多个 EC2 实例使用相同的文件。我正在编写实际修改文件的程序,我并不担心并发修改错误的问题,因为我已经设计好了解决方法。现在,我能找到的最接近这样做的方法就是使用 NFS,这似乎是天堂的一缕阳光。(而且它看起来也没有那么复杂!)现在,我几乎已经完成了所有设置,然后我一头撞上了砖墙。我一直在遵循以下教程:http://hunterford.me/amazon-ec2-and-nfs/
我唯一做的不同的事情是替换此行:
/var/www/test ec2-180-71-131-129.compute-1.amazonaws.com(rw,async)
用这一行:
/home/ec2-user/Players *(rw,async)
我修改了第一部分,因为我想把要共享的文件放在那里。我修改了第二部分,因为我不知道应该把什么放在那里,他说我可以放一个通配符。(我知道你们现在都很尴尬,我也是)我没有收到错误,所以我就这样做了。其他一切都很顺利,我确实设置了安全组,并打开了列出的所有端口。
当我去另一台机器上安装该文件时:
mount -t nfs {MY_FIRST_MACHINES_DNS_HERE}:/home/ec2-user/Players /home-ec2-user/Players
现在,一开始它在那里闪了一会儿。最后它超时了。有人看到我做错了什么吗?坦率地说,这可能是任何事情,因为我不知道在 NFS 方面我在做什么。我一直在 t1.micro 实例上使用标准(免费套餐)Amazon Linux AMI,带有 16GB 通用 SSD 存储。
答案1
截至 2017 年,最简单的方法是AWS 弹性文件系统 (EFS),它与 NFS v4.1 兼容。您支付每 GB 存储费用为 0.30 至 0.36 美元,无需预先分配磁盘,因此如果您删除文件,则立即支付的费用会减少。并非所有地区都提供此功能。
延迟显然高于 EBS,足以在某些用例(例如 Web 托管)中增加可测量的延迟。吞吐量应该非常好。我预计 AWS 正在努力改进。建议进行性能测试以确保它满足您的需求。
答案2
尝试将 mount 命令中的 nfs 更改为 nfs4。NFS v3 及更早版本依赖许多守护进程和端口映射才能正常工作。NFSv4 只需要 nfsd 和端口 2049/tcp。
关于 *,只需将其替换为客户端实例的 IP 地址即可。如果您有多个,只需添加它们,如下所示:
/mount/point ip1 (选项1) ip2 (选项2) ...
答案3
请记住,如果您确实使用 EFS,则吞吐量取决于 EFS 卷的总体大小,并具有突发信用分配。可以将其视为您在这些t1
或t2
EC2 实例中使用的相同资源分配模型 - 您为实例支付的费用更少,并且您将获得突发使用分配。如果您用完了这些信用,您的资源将获得较低的优先级。您的 t2 实例“感觉”更慢,您的 EFS 文件传输需要更长的时间才能开始和完成。
如果这种情况发生在 EC2 中,您可以将实例类型提升为基本上任何不以字母开头的实例t
。
在 EFS 中,截至撰写本文时,似乎您唯一的选择就是增加文件系统的大小。
如果性能对您来说不如可用性和冗余那么重要,那么 EFS 可能仍然适合您。如果您有任何疑问,请进行一些测试。
截至撰写本文时,EFS 为每个文件系统每 TB(或部分)提供 50MB/秒的速度,只要您有积分,最高可达 100MB/秒。吞吐量由所有实例访问该 EFS 文件系统。十个实例访问 1TB 文件系统?每个实例每秒 5 到 10 MB。
参考:
Amazon EFS 常见问题(参见“每个文件系统可以支持多少吞吐量?”的问题): GitLab 关于在 EFS 上托管存储库的建议 (tl;dr – “不要。”)