NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论

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

深度报告:异构时代,芯片需集成多个模板

Finovy Cloud

人工智能 云计算 gpu GPU服务器

区块链招聘会完美收官,行业大咖教你如何 Get Web3高薪职位

TinTinLand

区块链

CPU和GPU有什么区别?

InfoQ IT百科

基于 TiDB 的 Apache APISIX 高可用配置中心的最佳实践

API7.ai 技术团队

微服务网关 api 网关 APISIX TiDB

web前端培训React 泛型组件

@零度

前端开发 React

如何写出有价值的竞品分析报告?

基调听云

竞品分析 基调听云

手机摄像头越多拍照效果越好吗?

InfoQ IT百科

Docker Compose 部署Kibana和 Elasticsearch本地集群 8.1.3

ue4

elasticsearch

云融科技加入龙蜥社区,助力金融行业数字化转型

OpenAnolis小助手

数字化转型 龙蜥社区 CLA 云融科技

大数据培训Flink面试宝典

@零度

flink 大数据开发

Talent Plan 学习营初体验:交流+坚持 开源协作课程学习的不二路径

PingCAP

Dubbo 编程之夏报名启动了

阿里巴巴云原生

深入理解JMM-CPU多核硬件架构剖析及Java内存模型

janyxe

JVM cpu Java内存模型

Gartner调查研究:中国的数字化发展较之世界水平如何?高性能计算能否占据主导地位?

蓝海大脑GPU

GPU服务器 GPU算力

手机摄像头芯片主要有哪些?

InfoQ IT百科

手机运存与内存有什么区别?

InfoQ IT百科

人为什么看不到真相?

源字节1号

网站开发

开发者友好型公链Neo | 如何连接 Web2 开发者到 Web3 世界

TinTinLand

区块链

CrashSight 接入上报常见问题及解决方案

WeTest

“开源之夏”活动火热报名中,丰厚奖金等你来拿!

云智慧AIOps社区

开源 活动 开源软件

NFT、GameFi、SocialFi、云存储,DFINITY 生态上最热赛道详解

TinTinLand

区块链

射频芯片在手机上起到什么作用?

InfoQ IT百科

如何看待现阶段国内手机操作系统的竞争格局?

InfoQ IT百科

APISIX jwt-auth 插件存在错误响应中泄露信息的风险公告(CVE-2022-29266)

API7.ai 技术团队

api 网关 APISIX CVE

云原生虚拟化:基于 Kubevirt 构建边缘计算实例

火山引擎边缘云

容器 k8s 边缘计算 Kubevirt

nginx proxy_next_upstream 与openresty balancer.set_more_tries的使用

飞翔

nginx openresty

量化系统开发,量化交易系统APP搭建

Geek_56201b

量化交易系统开发 量化交易源码 量化APP搭建

友好型公链Neo,助力开发者轻松掌握区块链智能合约

TinTinLand

区块链

手机刷新率越高越好吗?

InfoQ IT百科

Kafka设计的基本原理

平凡人生

真正的量子计算机触手可及!英特尔宣布规模化生产硅量子比特

科技新消息

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