Amazon Elastic File System (Amazon EFS) 是AWS云上一个全托管的弹性NFS文件系统服务。EFS具有简单易用并可扩展的特性,与AWS的其他云服务紧密集成,同时也可以被本地数据中心所使用。EFS设计为可根据文件存储变化而自动进行扩缩容,同时对应用不产生中断。用户无须手动去进行存储空间的管理。EFS托管服务会自动管理文件存储底层的基础架构,用户无须关心文件系统部署、补丁管理和配置维护的技术细节,相比以往自建NFS服务器的方式,运维效率得到提高,成本也相应下降。

目前EFS已在在西云数据运营的 AWS 中国(宁夏)区域和光环新网运营的 AWS 中国(北京)区域上线。

EFS架构与基本概念

在控制台实际操作前,我们可以先简单了解一下EFS的架构和基本概念

上图是一个AWS区域中EC2实例访问EFS的架构示例,几个常见的概念简述如下:

文件系统(Filesystem)
EFS是一个区域性的服务,即托管文件系统的数据和元数据会自动存储在AWS区域内的多个可用区,以实现跨可用区的数据保护。VPC内的EC2实例或用户数据中心内的服务器均可通过网络以Network File System version4(NFS v4.1和V4.0)协议对文件系统进行访问。

挂载目标(Mount Target)
VPC中的EC2实例通过挂载目标来访问文件系统。挂载目标提供了VPC内的一个IP地址,每个可用区可以配置一个挂载目标,以便作为该可用区内的NFS服务器端点。挂载目标虽然是一个静态IP,但本身是进行高可用设计的,后面对应的是冗余的资源。EC2实例挂载时,可以直接指定一个对与文件系统一一对应的DNS域名,该域名会自动解析到EC2实例所在子网所对应的挂载目标上,从而简化文件系统的挂载工作。如果通过挂载帮助程序,则可以直接指定文件系统ID。

权限控制
在网络层面,每个挂载目标可以设定一个或多个安全组,即类似于防火墙,可以设定哪些EC2实例有权限访问该挂载目标从而挂载文件系统。此外,用户可以使用文件系统策略(File System Policy)和访问点(Access Point)来进行更细粒度的权限控制。

接下来会以宁夏区为例介绍如何快速部署一个EFS文件系统并挂载至EC2实例上

1 创建文件系统

1.1 配置网络访问

指定EFS文件系统所对应的VPC,及在对应的子网创建挂载目标并设置安全组。

一个文件系统仅对应一个VPC,但其他VPC的EC2实例可以通过VPC Peering打通VPC间的通道后再进行EFS文件系统挂载。
每个可用区建议对应创建一个挂载目标,这样可以确保不同可用区的EC2实例均可挂载文件系统。如果该可用区中有多个子网,只需要选择其中一个即可,该可用区下所有子网均可以访问到对应的挂载目标。
如果后续文件系统需要更换VPC,可以先将挂载目标删除后再进行更换。
本次演示会使用向导所指定的VPC默认安全组,同时后续EC2实例也会挂载该安全组以便与挂载目标进行通信。

1.2 配置文件系统设置

指定EFS文件系统的标签、生命周期管理策略、与性能相关的模式设置和数据加密等

通过标签(Tag)可以为文件系统进行描述

通过生命周期管理策略, EFS可以自动将指定时间(如7或14天或至最长90天)未访问的数据自动从EFS Standard转换至EFS IA(Infrequent Access, 不常访问)。该功能可以简单的理解为数据自动的冷热分层。EFS IA对应的是冷存储层,相比EFS Standard来说单位存储成本更低,且不会牺牲可用性、持久性和弹性等EFS的存储特性。需要注意到除了存储成本,EFS IA会按照数据访问量进行收费。简单来说,对于不常访问的数据,迁移至IA可以看到明显的成本优化。通过生命周期管理策略可以自动进行不常访问的数据的迁移,从而自动进行成本优化而无须人工干预。在这个演示中我们暂时不启用生命周期管理策略。

吞吐量模式:分为突增(Bursting)和预置(Provisioned)两种。在突增模式下,文件系统的吞吐性能随着存储容量增加而增长。典型文件系统的负载通常会猛增,在短时间内吞吐量较高,而其余时间吞吐量较低。因此,突增模式下EFS可在一段时间内突增到高吞吐量。对于存储容量较小但又需要较高吞吐量的场景,则可以使用预置模式,直接设定EFS文件系统的吞吐量上限。在这个演示我们使用默认的突增模式
性能模式:分为通用(General Purpose)和最大I/O(Max I/O)两种。通用模式适合于绝多数的EFS文件系统使用场景,特别是对延时较为敏感的应用。如果希望有更高的吞吐量和IOPS要求,则可以考虑最大I/O模式,但该模式下元数据的操作延时会相对较高。在这个演示我们使用默认的通用模式。
加密:EFS可以与KMS结合,从而实现对存储在EFS文件系统内的数据进行加密。在这个演示中我们暂时不开启加密功能。

1.3 配置客户端访问

通过文件系统策略(File System Policies)可以指定NFS客户端对EFS文件系统所具有的权限, 包括读写权限,是否要求传输加密等。而访问点(Access Points)是 EFS文件系统中特定于应用程序的入口点,以管理应用程序对共享数据集的访问。通过访问点发出的所有文件系统请求可以被强制执行用户身份(包括用户组)。访问点还可以为文件系统强制执行不同的根目录,客户端只能访问指定目录或之下目录中的数据。

在这个演示中我们暂时不对文件系统权限和访问点进行配置,仅使用前面配置的安全组来做访问权限的控制。

1.4 审核与创建

最后我们检查一下配置是否正确 ,没问题的话就可以开始创建文件系统了

文件系统成功创建后,可以在控制台查看文件系统状态,挂载目标状态等信息。注意到此时文件系统还没有数据写入,目前的容量显示只有6KB(文件系统相关元数据的存储开销)

2. 挂载文件系统

2.1 部署EC2实例并配置安全组

接下来我们在刚才创建的文件系统对应的VPC中部署一台EC2实例,需要关联EFS文件系统挂载目标所对应的安全组,在这个演示中我们使用了VPC默认的安全组

可以看到这个默认安全组放通所有的流量,但是来源仅限于这个安全组。也就是说只要挂载了这个安全组的EC2实例,就可以与EFS挂载目标进行通信而不受限制。生产环境可以根据实际需要进一步缩小放通的端口范围等

2.2 安装EFS挂载帮助程序(Mount Helper)并挂载文件系统

EFS文件系统支持NFS协议,可以直接使用原有的NFS客户端来进行NFS文件系统挂载。另外EFS也提供了一个挂载帮助程序,以简化文件系统挂载,同时提供对EFS独特功能(如IAM认证,TLS传输加密和访问点等)。在文件系统状态页面,会有相应的链接和说明告诉用户如何来进行文件系统挂载:

这里我们以安装了Amazon Linux 2且类型为m5.large的EC2实例,演示如何从本地VPC用EFS挂载帮助程序来挂载文件系统:

首先登录EC2实例,安装EFS挂载程序:

sudo yum -y install amazon-efs-utils

接着创建挂载点目录:

sudo mkdir /mnt/efs

然后通过EFS挂载程序进行文件系统挂载

sudo mount -t efs fs-c4f11721:/ /mnt/efs

注意:
目前通过yum安装的EFS挂载程序对国内区域的文件系统域名处理有问题,会导致挂载文件系统时出现类似如下报错:

Failed to resolve "fs-c4f11721.efs.cn-northwest-1.amazonaws.com" - check that your file system ID is correct.
See https://docs.aws.amazon.com/console/efs/mount-dns-name for more detail.

目前解决方法是通过下面的命令修改配置文件:

echo -e '\n[mount.cn-north-1]\ndns_name_suffix =
amazonaws.com.cn\n\n[mount.cn-northwest-1]\ndns_name_suffix =
amazonaws.com.cn' | sudo tee -a /etc/amazon/efs/efs-utils.conf

再重新进行挂载即可。
该问题已经在最新的efs-utils版本上得到修复,很快新版本会更新至Amazon Linux RPM Repository中,目前用户也可以从Github上直接下载最新版本的EFS挂载程序以规避该问题,具体可查看参考资料中的相关链接

3. 检查文件系统

至此我们已经完成了文件系统的创建,接下来我们可以进行写入测试,并检查文件系统的状态。
通过dd往EFS文件系统写入一个20G的文件

sudo time dd if=/dev/zero of=/mnt/efs/20G-dd-$(date +%Y%m%d%H%M%S.%3N) bs=1M count=20480 conv=fsync20480+0 records in
20480+0 records out
21474836480 bytes (21 GB) copied, 203.763 s, 105 MB/s
0.06user 10.66system 3:23.81elapsed 5%CPU (0avgtext+0avgdata 3040maxresident)k
0inputs+41943040outputs (0major+340minor)pagefaults 0swaps

可以看到这里统计的吞吐量是105MB/s。根据EFS官方文档提到的突增吞吐量的说明,小于1TB的文件系统,均可突增到100MB/s;而对于超过1TB的文件系统,存储在EFS标准上每1TB数据则可以突增100MB/s。另外需要注意到的是,EFS文件系统的性能实际上与上文提到性能模式、EC2实例网络带宽、并发压力和IO类型等等许多因素都有关,如果需要进行压力测试,可以查看参考资料里关于性能的文档链接

此时检查文件系统状态,此时可以看到文件系统的实际大小已更新为20GB:

小结

从这个演示我们可以看到EFS是一个托管的NFS文件服务, 用户只需要进行简单的配置就可以快速部署出一个高可用并可无限扩展的NFS文件系统。结合EFS的生命周期管理策略,数据可以实现冷热分层,从而降低存储成本。通过文件系统策略和访问点,用户还可以实现更为细粒度的权限控制。相关的技术细节可以参考EFS官方文档。

现在就开始动手测试起来吧!

参考资料

EFS介绍:https://docs.amazonaws.cn/efs/latest/ug/whatisefs.html
EFS性能详细文档:https://docs.amazonaws.cn/efs/latest/ug/performance.html
EFS常见问答: https://aws.amazon.com/cn/efs/faq/
EFS挂载帮助程序Github链接:https://github.com/aws/efs-utils
EFS教程: https://github.com/aws-samples/amazon-efs-tutorial/
关于EFS性能测试的博客:https://aws.amazon.com/blogs/storage/how-to-test-drive-amazon-elastic-file-system/
关于EFS IAM认证与访问点的博客:https://aws.amazon.com/blogs/aws/new-for-amazon-efs-iam-authorization-and-access-points/
关于EFS IA的博客:https://aws.amazon.com/blogs/aws/optimize-storage-cost-with-reduced-pricing-for-amazon-efs-infrequent-access/
本篇作者

林俊
AWS解决方案架构师,主要负责企业客户的解决方案咨询与架构设计优化,同时致力于AWS云存储及IoT类服务的应用和推广。

原文链接:https://aws.amazon.com/cn/blogs/china/quickly-build-nfs-file-system-with-efs/

利用 EFS 快速搭建 NFS 文件系统相关推荐

  1. windows和Linux利用Python快速搭建一个网站

    windows和Linux利用Python快速搭建一个网站 一.windows 步骤1:安装Python3(自行百度) 步骤2:在cmd窗口输入ipconfig查看本机ip地址,IPV4那一行.如:1 ...

  2. 钉钉一行代码_利用Python快速搭建钉钉和邮件数据推送系统

    前面的文章我们写到了利用Python实现钉钉和邮件的数据推送,在数据处理这一块实现了对mysql和odps的数据获取和处理,可以满足常规业务大部分数据场景需求,在一家初创公司数据基础建设还不完善的时候 ...

  3. Unreal Engin_画廊制作笔记_001<设计草图,利用BSP快速搭建简单场景>

    001设计草图,利用BSP快速搭建简单场景 本笔记开始记录所学的知识点以及细节操作等,分享下自己学习UE4的经验,也为了巩固知识,便于复习. 接下来我会以模块化的方式,根据步骤来分享学习制作的经验,如 ...

  4. 利用Disqus快速搭建评论系统

    说实在的真正的代码就那么几行,为了凑字数,先抄一段百度百科上的简介,有兴趣的童鞋可以去Disqus官网上看一看 Disqus的主要目标是通过提供功能强大的第三评论系统,将当前不同网站的相对孤立.隔绝的 ...

  5. 铁威马NAS教程之利用docker快速搭建个人在线书库

    这是一个基于Calibre的简单的图书管理系统,支持在线阅读.主要特点是:美观的界面.支持多用户.支持在线阅读.支持邮件推送.支持OPDS.支持一键安装,网页版初始化配置,轻松启动网站等等. 那么,如 ...

  6. 利用阿里云搭建NFS服务器

    一.阿里云服务器(ECS) Linux是现在计算机运维的主流服务器,正好阿里云服务器也是目前非常主流的云服务器,我就简单地利用阿里云服务器和Linux配置的NFS服务器和客户端.功能非常简单,但这是第 ...

  7. 利用vagrant快速搭建rails开发环境

    为什么80%的码农都做不了架构师?>>>    Deprecated 前言 当我们学习一门新的语言或技术的时候,最麻烦或比较浪费时间的事情就是搭建开发环境.而搭建开发环境与我们将要学 ...

  8. python 播放视频 ftp_利用Python快速搭建HTTPFTP服务器

    用 Python 快速实现 FTP 服务器 有时当你想快速搭建一个 FTP 服务器来临时实现文件上传下载时,这是特别有用的.我们这里利用 Python 的Pyftpdlib 模块可以快速的实现一个 F ...

  9. centos7利用docker 快速搭建苹果CMS站点

    阿里云centos7服务器,利用docker,快速搭建苹果cms.效果如下: 1.centos7 系统安装docker. 可查看这篇博文: https://www.cnblogs.com/yufeng ...

  10. tflearn教程_利用 TFLearn 快速搭建经典深度学习模型

    使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<TensorFlow 增加自定义运算符>).由于运算符的 ...

最新文章

  1. 哪些数据可以放进缓存?记录生产环境一次缓存评估的过程
  2. RDKit | 基于RDKit描述三维分子形状(3D描述符)
  3. python大神教程_大神python教程415集全套,拿走不谢
  4. [云炬创业学笔记]第三章商业创意的发掘与评估测试1
  5. hdu 1075 map
  6. 9 月 19 日,腾讯云安全中心监测到  Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615
  7. Spring.NET 中的 ADO.NET 数据访问的示例
  8. php与mysqli,如何通过PHP与MySQLi保持联系
  9. Python(42)_文件操作
  10. 指南|七步搞定研控E总线驱动器与欧姆龙PLC主站连接
  11. coreseek(中文全文搜索)安装和使用(一)
  12. Depends工具(检查exe文件依赖的好朋友)
  13. 大学计算机基础贾宗璞答案,大学计算机应用基础C教学大纲
  14. 最简单的输出四位数的每个位上的数字
  15. 分享个免费的图文识别orc接口
  16. 「TShark学习」TShark抓包笔记
  17. 无障碍开发系列之准则及评级
  18. 正零和负零的原码,反码,补码
  19. 百度地图开发-检索功能
  20. 个人网站5-网站SEO优化推广和增加百度谷歌收录

热门文章

  1. Vue项目--仿大麦网移动端
  2. 蓝牙定位听说过的你,知道蓝牙定位信标的存在吗-新导智能
  3. 海洋角度分析全球气候变暖停滞原因
  4. Android基于环信实现聊天功能(一)——了解环信
  5. Android图片处理之Glide使用大全
  6. c语言中0x13,int 0x13 常用功能详解
  7. ffmpeg所有的解码器(decoders)
  8. HYSBZ - 5145 未来日记
  9. ARCGIS Pro试用申请教程以及登录页面脚本错误解决办法
  10. idea的工具栏显示