Introduction to Amazon Elastic File System (EFS)

什么是EFS

Amazon Elastic File System (Amazon EFS) 提供简单、可扩展的文件存储,可与 AWS 云中的 Amazon EC2 实例配合使用。Amazon EFS 易于使用,并提供简单的界面,让您可以快速轻松地创建和配置文件系统。

实验室概述

本实验向您介绍使用 AWS 管理控制台的 Amazon Elastic File System (Amazon EFS)。

目标

在本实验结束时,您应该能够执行以下操作:

  • 登录 AWS 管理控制台。

  • 创建 Amazon EFS 文件系统。

  • 登录 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例。

  • 将文件系统挂载到实例。

  • 检查和监控文件系统的性能。

任务 1:创建安全组以访问 Amazon EFS 文件系统

1.在 AWS Management Console 顶部的搜索栏中,搜索并选择EC2.

2.在左侧导航窗格的 Network & Security 部分中,选择 Security Groups。

3.在页面右上角,选择创建安全组.

4.在 Create security group (创建安全组) 页面的 Basic details (基本详细信息) 部分中:

  • 对于 Security group name (安全组名称),输入EFS 挂载目标.

  • 对于 Description (描述),输入来自 EFS 客户端的入站 NFS 访问.

  • 对于 VPC,清除默认条目,然后选择 Lab VPC。

5.在 Inbound rules (入站规则) 部分中,选择添加规则然后:

  • 对于 Type (类型),选择 NFS (NFS)。

  • 注意 协议 (TCP) 和端口范围 (2049) 是自动输入的。

  • 对于 Source (源),选择 Custom (自定义),然后将这些说明左侧列出的 SecurityGroupId 值复制并粘贴到搜索框中。

SecurityGroupId 值是 EFSClient 安全组的 ID,该安全组与您在未来任务中连接到 EFS 文件系统的 EC2 实例相关联。

SecurityGroupId 值是sg-04767da21702d88f3

保留其余的默认值。 alt text alt text alt text

6.在页面底部,选择创建安全组.

任务 2:创建 Amazon EFS 文件系统

1.在 AWS Management Console 顶部的搜索栏中,搜索并选择EFS (英文).

2.在 Amazon Elastic File System 页面的右上角,选择创建文件系统.

3.在 Create file system (创建文件系统) 弹出窗口中,选择自定义.

4.在 File system settings (文件系统设置) 页面的 General (常规) 部分中:

  • 对于 Name - optional (名称 - 可选),输入我的第一个 EFS 文件系统.

  • 保留其余的默认值,但请花点时间查看各种可用的选项。

5.在页面底部,选择下一个.

6.在 Network access (网络访问) 页面的 Network (网络) 部分中:

  • 对于 Virtual Private Cloud (VPC) (Virtual Private Cloud (VPC)),选择 Lab VPC (实验室 VPC)。

7.在 Mount targets (挂载目标) 下,请注意创建了两个目标,每个目标位于不同的可用区中。

  • 对于每个挂载目标:

  • 对于 Security groups (安全组),选择 X 以删除默认安全组。

alt text

8.在 Security groups (安全组) 下拉菜单中,选择您之前创建的 EFS 挂载目标安全组。

9.在页面底部,选择下一个.

10.在 File system policy - optional (文件系统策略 - 可选) 页面上,保留默认值,然后选择下一个.

11.在 Review and create (查看并创建) 页面的底部,选择创造.

12.在 File systems (文件系统) 页面上,等待大约 1-2 分钟,让 File system (文件系统) 状态更改为 Available (可用)。

13.选择 My First EFS File System(我的第一个 EFS 文件系统)旁边的单选按钮,然后选择查看详情.

14.在 My First EFS File System (我的第一个 EFS 文件系统) 详细信息页面上,选择 Network (网络) 选项卡。

15.Network (网络) 选项卡列出了 EFS 文件系统的挂载目标。

16.在页面右上角,选择附加.

alt text

任务 3:连接到您的 Amazon EC2 实例

1.将 Ec2InstanceSessionUrl 值从列表中复制到这些说明的左侧,然后将其粘贴到新的 Web 浏览器选项卡中。

此时将打开一个新的 Web 浏览器选项卡,其中包含与实例的控制台连接。当您连接到实例时,会自动运行一组命令,这些命令将更改为用户的主目录并显示工作目录的路径,如下所示:

预期输出:

************************
**** EXAMPLE OUTPUT ****
************************

cd $HOME; pwd; bash
sh-4.2$ cd $HOME; pwd; bash
/home/ec2-user
[ec2-user@ip-XX-X-X-XXX ~]$

alt text

任务 4:创建新目录并挂载 Amazon EFS 文件系统

1.命令:要安装 amazon-efs-utils 软件包,请在实例终端会话中运行以下命令

sudo yum install -y amazon-efs-utils

预期输出:

************************
**** EXAMPLE OUTPUT ****
************************

....
Installed:
 amazon-efs-utils.x86_64 0:2.0.4-1.amzn2

Dependency Installed:
 stunnel5.x86_64 0:5.58-1.amzn2.0.1

Complete!

amazon-efs-utils 软件包(也称为 Amazon EFS 客户端)是 Amazon EFS 工具的开源集合。Amazon EFS 客户端包括 EFS 挂载帮助程序,以便更轻松地挂载 EFS 文件系统。它还可以使用 Amazon CloudWatch 监控 EFS 文件系统的挂载状态。

2.命令:要创建名为 efs 的新目录,请运行以下命令:

sudo mkdir efs

3.命令:要安装 botocore,请运行以下命令:

pip3 install botocore

预期输出:

************************
**** EXAMPLE OUTPUT ****
************************

Defaulting to user installation because normal site-packages is not writeable
Collecting botocore
 Downloading botocore-1.33.13-py3-none-any.whl (11.8 MB)
    |████████████████████████████████| 11.8 MB 27.0 MB/s
Collecting jmespath<2.0.0,>=0.7.1
 Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)
Collecting urllib3<1.27,>=1.25.4; python_version < "3.10"
 Downloading urllib3-1.26.19-py2.py3-none-any.whl (143 kB)
    |████████████████████████████████| 143 kB 69.0 MB/s
Collecting python-dateutil<3.0.0,>=2.1
 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
    |████████████████████████████████| 229 kB 71.0 MB/s
Collecting six>=1.5
 Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: jmespath, urllib3, six, python-dateutil, botocore
Successfully installed botocore-1.33.13 jmespath-1.0.1 python-dateutil-2.9.0.post0 six-1.16.0 urllib3-1.26.19

alt text

4.保持终端连接选项卡打开,并使用 Amazon EFS 控制台返回到 Web 浏览器选项卡。

5.在之前打开的 Attach 弹出窗口中,选择 Mount via DNS (如果尚未选择)。

6.在 Using the EFS mount helper (使用 EFS 挂载帮助程序) 下,复制列出的命令,该命令应类似于以下内容:

sudo mount -t efs -o TLS FS-01234567e2669d1e7:/ efs

7.返回到包含终端会话的 Web 浏览器选项卡,粘贴您刚刚复制的命令,然后按 Enter 键运行它。

8.命令:要获取可用磁盘空间和已用磁盘空间的完整摘要,请运行以下命令:

sudo df -hT

预期输出:输出显示所有挂载的文件系统,类似于:

************************
**** EXAMPLE OUTPUT ****
************************

Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  471M     0  471M   0% /dev
tmpfs          tmpfs     479M     0  479M   0% /dev/shm
tmpfs          tmpfs     479M  496K  478M   1% /run
tmpfs          tmpfs     479M     0  479M   0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs       8.0G  2.2G  5.9G  27% /
tmpfs          tmpfs      96M     0   96M   0% /run/user/0
127.0.0.1:/    nfs4      8.0E     0  8.0E   0% /home/ec2-user/efs

9.找到挂载在 /home/ec2-user/efs 上的文件 EFS 文件系统。

任务 5:检查新 Amazon EFS 文件系统的性能行为

Flexible IO (fio) 是适用于 Linux 的综合 IO 基准实用程序,用来对 Linux IO 子系统进行基准测试。

1.命令:要使用 fio 检查 EFS 文件系统的写入性能特征,请运行以下命令:

sudo fio --name=fio-efs --filesize=2G --filename=./efs/fio-efs-test.img --bs=1M --nrfiles=1 --direct=1 --sync=0 --rw=write --iodepth=200 --ioengine=libaio

预期输出:fio 命令大约需要 2-3 分钟才能完成。输出应类似于:

************************
**** EXAMPLE OUTPUT ****
************************

fio-efs: (g=0): rw=write, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=200
fio-2.14
Starting 1 process
fio-efs: Laying out IO file(s) (1 file(s) / 2048MB)
Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/573.0MB/0KB /s] [0/573/0 iops] [eta 00m:00s]
fio-efs: (groupid=0, jobs=1): err= 0: pid=3154: Tue Jul 30 19:54:46 2024
  write: io=2048.0MB, bw=567258KB/s, iops=553, runt=  3697msec
    slat (usec): min=85, max=6490, avg=206.42, stdev=273.14
    clat (msec): min=124, max=815, avg=357.75, stdev=105.00
     lat (msec): min=125, max=815, avg=357.95, stdev=105.01
    clat percentiles (msec):
     |  1.00th=[  141],  5.00th=[  269], 10.00th=[  277], 20.00th=[  285],
     | 30.00th=[  293], 40.00th=[  306], 50.00th=[  318], 60.00th=[  334],
     | 70.00th=[  371], 80.00th=[  482], 90.00th=[  519], 95.00th=[  553],
     | 99.00th=[  660], 99.50th=[  734], 99.90th=[  807], 99.95th=[  807],
     | 99.99th=[  816]
    lat (msec) : 250=4.00%, 500=83.15%, 750=12.40%, 1000=0.44%
  cpu          : usr=4.17%, sys=6.74%, ctx=2117, majf=0, minf=11
  IO depths    : 1=0.1%, 2=0.1%, 4=0.2%, 8=0.4%, 16=0.8%, 32=1.6%, >=64=96.9%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=99.9%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
     issued    : total=r=0/w=2048/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=200

Run status group 0 (all jobs):
  WRITE: io=2048.0MB, aggrb=567257KB/s, minb=567257KB/s, maxb=567257KB/s, mint=3697msec, maxt=3697msec
  • “fio”命令输出中的 “io” 参数是指测试期间执行的 I/O (输入/输出) 操作的总量。这里的关键部分是 ,它表示测试期间写入的数据总量为 2048 MB(或 2 GB)。

  • “aggrb”值表示在 WRITE 测试期间实现的聚合带宽。它显示执行的所有 I/O 操作的总吞吐量或数据传输速率。

  • “minb”该值表示最小带宽,即测试期间观察到的最低吞吐率。

  • “maxb”这表示在写入测试期间实现的最大带宽或吞吐量。

  • “mint”在 'fio' 命令输出中进行 WRITE 测试所花费的最短时间。

  • “maxt”代表 “maximum time”,表示测试期间任何 I/O 操作记录的最长延迟(响应时间)。

2.检查 fio 命令的输出,特别是此 WRITE 测试的摘要状态信息

使用 Amazon CloudWatch 监控性能

1.使用 Amazon EFS 控制台返回到 Web 浏览器选项卡。

2.如果 Attach 弹出窗口仍处于打开状态,请将其关闭。

3.在 AWS Management Console 顶部的搜索栏中,搜索并选择CloudWatch.

4.在左侧导航窗格的 Metrics (指标) 部分中,选择 All metrics (所有指标)。

5.在 Metrics (指标) 页面的 Browse (浏览) 选项卡上,选择 EFS (EFS)。

6.选择 File system metrics (文件系统指标)。

7.在 Metric name (指标名称) 为 PermittedThroughput 的行中,选中 FileSystemId 左侧的复选框。

8.将指针悬停在图表中的数据线上。该值应约为 105M。

alt text

实验结论

您已成功完成以下操作:

  • 登录到 AWS 管理控制台。

  • 已创建 EFS 文件系统。

  • 登录到 EC2 实例。

  • 将文件系统挂载到实例。

  • 检查并监控文件系统的性能行为。