写点什么

利用 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:221112

评论

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

TypeScript 前端工程最佳实践

京东科技开发者

typescript 前端 前端开发 编程语言】

数据中台选型前必读(七):解读数据服务的四大关键技术

雨果

数据中台 DaaS数据即服务

阿里云助力抖音,为2022世界杯护航

云布道师

阿里云

RabbitMQ、RocketMQ、Kafka延迟队列实现

艾小仙

Java kafka RocketMQ RabbitMQ 延迟队列

带你读AI论文丨针对文字识别的多模态半监督方法

华为云开发者联盟

人工智能 华为云 文字识别 12 月 PK 榜

数据人PK也无人,为什么业务部门的数据需求都是急活?

雨果

数据开发 数据工程师 数据服务

探索科创服务升级之路,星创科服“贴身陪伴”硬科技冠军企业成长

硬科技星球

学习大数据技术后的就业前景怎么样

小谷哥

创元集团的数智化实践 这次选择了和火山引擎VeDI搭档

字节跳动数据平台

大数据 数据治理 12 月 PK 榜

启科 QuSaaS 真随机数解决方案与 Amazon Braket 结合实践

亚马逊云科技 (Amazon Web Services)

亚马逊云科技 Hero 专栏

前端培训机构学习前端开发难度大吗

小谷哥

这个团队敢闯、会创,北京交通大学团队结合昇思MindSpore技术助力打造“智慧安全交通”

Geek_2d6073

云上安全办公,就用华为云桌面

科技说

图算法、图数据库在风控场景的应用

NebulaGraph

图数据库 风控

schema设计与管理

刺猬

四大领先优势加持,华为云会议服务更省心可靠!

路过的憨憨

校招面试真题 | 你的期望薪资是多少?为什么?

霍格沃兹测试开发学社

远程灵活办公,就用华为云桌面

科技说

大道至简,自治为王 | 2022年12月《中国数据库行业分析报告》精彩抢先看

墨天轮

数据库 Serverless 云数据库 国产数据库 polarDB

女生参加前端培训学习有前途吗?

小谷哥

【kafka运维】Leader重新选举运维脚本

石臻臻的杂货铺

kafka 运维

什么是数据管理?看完这篇你一定有收获

雨果

数据管理

教你用JavaScript实现大转盘

小院里的霍大侠

JavaScript 初学者 入门实战

百度工程师带你体验引擎中的nodejs

百度Geek说

JavaScript 前端 nodejs 12 月 PK 榜

技术分享 | 测试的本质是什么?

霍格沃兹测试开发学社

头像类NFT的未来,实际价值在哪里?

博文视点Broadview

线上线下大数据培训机构应该怎么选

小谷哥

企业大数据价值最大化的关键因素

元年技术洞察

大数据 数据中台 数字化转型

武汉java培训后可以选择那些就业方向

小谷哥

【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康!

码界西柚

Java JVM Alibaba Arthas 12 月 PK 榜

【基础知识】PCB板上的字母数字是什么意思,代表哪些元器件?

华秋PCB

元器件 PCB PCB设计

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