阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

评论

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

如何通过 Amazon Textract 改善新冠疫情期间的 PPP 贷款效率

亚马逊云科技 (Amazon Web Services)

效率 Amazon

亚马逊云科技 2022 年 3 月新服务新功能强势来袭

亚马逊云科技 (Amazon Web Services)

服务 亚马逊

如何评估服务是否内存泄漏了?

BUG侦探

缓存 容器 内存泄漏

Swin Transformer实战: timm使用、Mixup、Cutout和评分一网打尽,图像分类任务

AI浩

EfficientNet实战:tensorflow2.X版本,EfficientNetB0图像分类任务(小数据集)

AI浩

图像分类

一文看懂博睿数据AIOps场景、算法和能力

博睿数据

AIOPS 智能运维 博睿数据

MobileVIT实战:使用MobileVIT实现图像分类

AI浩

ResNet实战:单机多卡DDP方式、混合精度训练

AI浩

深度探索通过数据共享(data sharing)优化 Amazon Redshift 工作负载分解

亚马逊云科技 (Amazon Web Services)

数据 负载

面试突击50:单例模式有几种写法?

王磊

Java java面试

SWA实战:使用SWA进行微调,提高模型的泛化

AI浩

VIT实战总结:非常简单的VIT入门教程,一定不要错过

AI浩

Wallys-QCN9074 /802.11ax/4x4 MU-MIMO /6GHz wifi6E

wallys-wifi6

Wallys-Waterproof Enclosure Metal Outdoor

wallys-wifi6

IPQ4019 802.11ac

聊武侠、讲段子,为了帮小白入门Spring Boot,这书有多拼!

博文视点Broadview

STM32F103系列开发_点亮LED灯

DS小龙哥

5月月更

还在为模型加速推理发愁吗?不如看看这篇吧。手把手教你把pytorch模型转化为TensorRT,加速推理

AI浩

HashMap 源码分析-新增

zarmnosaj

5月月更

开源集结令!参与开源之夏 EMQ 项目开发,赢最高 12000 元奖金

EMQ映云科技

开源 物联网 emq 开源之夏 5月月更

ABAP Code Inspector 的一些高级功能分享

Jerry Wang

编程语言 代码扫描 SAP abap 5月月更

你想学Python爬虫?看看这篇关于开发者工具神器的博客吧

梦想橡皮擦

5月月更

Kafka 万亿级消息实践之资源组流量掉零故障排查分析

vivo互联网技术

大数据 kafka 监控

如何为服务网格做端到端测试

Flomesh

测试 Service Mesh 服务网格

数字化转型背景下,企业如何做好知识管理?

小炮

企业知识管理

数字孪生智慧物流之 Web GIS 地图应用

一只数据鲸鱼

GIS 数据可视化 智慧物流 数字孪生 三维仿真

OpenHarmony 3.1 Release版本特性解析——OpenHarmony硬件资源池化架构介绍

OpenHarmony开发者

OpenHarmony 多设备协同

BladeDISC 0.2.0更新发布

阿里云大数据AI技术

深度学习 存储 并行计算 异构计算 算法框架/工具

如何写好产品手册?

小炮

中国信通院发布“可信开源”全景观察 成立三大开源产业组织

中国IDC圈

开源 开源治理

图像分类实战:mobilenetv2从训练到TensorRT部署(pytorch)

AI浩

鸿蒙生态 | 从开发到运营,如何步步为“赢”?

最新动态

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