阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

利用 EFS 快速搭建 NFS 文件系统

  • 2020-02-27
  • 本文字数:4193 字

    阅读完需:约 14 分钟

利用 EFS 快速搭建 NFS 文件系统

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 挂载程序:


Bash


sudo yum -y install amazon-efs-utils
复制代码


接着创建挂载点目录:


Bash


sudo mkdir /mnt/efs
复制代码


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


Bash


sudo mount -t efs fs-c4f11721:/ /mnt/efs
复制代码


注意:


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


Bash


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.
复制代码


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


Bash


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 的文件


Bash


sudo time dd if=/dev/zero of=/mnt/efs/20G-dd-$(date +%Y%m%d%H%M%S.%3N) bs=1M count=20480 conv=fsync
20480+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 官方文档。


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

参考资料


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


本文转载自 AWS 技术博客。


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


2020-02-27 16:22829

评论

发布
暂无评论
发现更多内容

第 8 周 系统架构作业

心在那片海

Architecture Phase1 Week12:HomeWork

phylony-lu

第3周学习总结

Binary

极客大学架构师训练营

第八周作业总结

hunk

极客大学架构师训练营

架构师训练营第 1 期 -- 第十二周作业

发酵的死神

极客大学架构师训练营

生产环境全链路压测建设历程之八 生产全链路压测和传统压测的差异点

数列科技杨德华

单词匹配算法,算法常见的模数1000000007 模数10 ^ 9 + 7,swift mock URLSession,John 易筋 ARTS 打卡 Week 30

John(易筋)

ARTS 打卡计划 单词匹配算法 swift mock数据 算法中的模数

第十二周 作业2

Yangjing

极客大学架构师训练营

Java内存模型

懒AI患者

常量池 Java内存模型 元数据区

第12周总结

睡觉表演者

极客时间架构师一期

架构师训练营第2期 第8周命题作业

月下独酌

极客大学架构师训练营

第8周作业

hunk

极客大学架构师训练营

架构师训练营第十二周作业

吴传禹

极客大学架构师训练营

第八周作业

Geek_9527

架构师训练营第二期 第 8 周总结

月下独酌

极客大学架构师训练营

数据应用 课后练习

ABS

第 8 周 系统架构总结

心在那片海

架构设计:企业总体架构要如何做?小白也能快速领悟的设计思想

互联网应用架构

架构设计

架构师训练营第十二周总结

吴传禹

极客大学架构师训练营

架构训练营第八周

xiaomao

架构训练营第八周总结

xiaomao

Week 8 性能优化

evildracula

学习 架构

大数据概述

garlic

极客大学架构师训练营

Architecture Phase1 Week12:Summarize

phylony-lu

极客大学架构师训练营

架构师第三周作业

胡益

架构师训练营第 1 期 -- 第十二周学习总结

发酵的死神

极客大学架构师训练营

数据应用(一)

wing

极客大学架构师训练营

第七周作业

Geek_9527

架构师训练营第十二周命题作业

一马行千里

第3周作业提交

Binary

极客大学架构师训练营

架构师训练营第 1 期 - week12 - 作业

lucian

极客大学架构师训练营

利用 EFS 快速搭建 NFS 文件系统_文化 & 方法_AWS_InfoQ精选文章