为 Linux 配置 NVMe - FSx for ONTAP
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 Linux 配置 NVMe

适用于 ONTAP 的 FSx 支持基于 TCP 的非易失性内存 Express (NVMe/TCP) 块存储协议。使用 NVMe/TCP,您可以使用 CL ONTAP I 配置命名空间和子系统,然后将命名空间映射到子系统,这与配置 LUN 并将其映射到 iSCSI 的启动器组 (igroup) 的方式类似。NVMe/TCP 协议适用于具有 6 个或更少的高可用性 (HA) 对的第二代文件系统。 。

这些步骤中提供的示例演示了如何在 FSx 上为 ONTAP 文件系统和 Linux 客户端设置 NVMe/TCP 块存储,以及如何使用以下设置:

  1. 在 Linux 主机上安装和配置 NVMe 客户端。

  2. 在文件系统的 SVM 上配置 NVMe。

    • 创建 NVMe 命名空间。

    • 创建 NVMe 子系统。

    • 将命名空间映射到子系统。

    • 将客户端 NQN 添加到子系统。

  3. 在 Linux 客户端上挂载 NVMe 设备。

  • 您已经为 ONTAP 文件系统创建了 FSx。有关更多信息,请参阅 创建 iSCSI LUN

  • 创建运行红帽企业 Linux (RHEL) 9.3 的 EC2 实例,该实例将成为您要在其上配置 NVMe 的 Linux 主机。

  • Linux 主机配置了 VPC 安全组,允许入站和出站流量,如中所述使用 Amazon VPC 进行文件系统访问控制

  • 您知道具有访问 ONTAP CLI 的fsxadmin权限的ONTAP用户的凭证。

  • 您将为 NVMe 配置并用于访问 FSx for ONTAP 文件系统的 Linux 主机位于同一 VPC 和。 Amazon Web Services 账户

    如果主机位于其他 VPC 中,则除了本主题所示示例的范围之外,您还可以使用 VPC 对等互连或 Amazon Transit Gateway 授予其他 VPC 访问该卷的 iSCSI 终端节点的权限。有关更多信息,请参阅 从部署 VPC 外部访问数据

    如果您使用的 EC2 实例运行的 Linux AMI 与这些过程和示例中使用的不同,则主机上安装的某些实用程序可能已经安装完毕,您可能使用不同的命令来安装所需的软件包。除了安装软件包外,本节中使用的命令还适用于其他 EC2 Linux AMI。

  • 我们建议 EC2 实例与您的文件系统的首选子网位于同一个可用区。

在 Linux 主机上安装和配置 NVMe

安装 NVMe 客户端
  1. 使用 SSH 客户端连接到 Linux 实例。有关更多信息,请参阅使用 SSH 从 Linux 或 macOS 连接到你的 Linux 实例

  2. 使用以下命令安装 nvme-cli

    ~$ sudo yum install -y nvme-cli
  3. nvme-tcp模块加载到主机上:

    $ sudo modprobe nvme-tcp
  4. 使用以下命令获取 Linux 主机的 NVMe 限定名称 (NQN):

    $ cat /etc/nvme/hostnqn nqn.2014-08.org.nvmexpress:uuid:9ed5b327-b9fc-4cf5-97b3-1b5d986345d1

    记录响应,以便在以后的步骤中使用。

在 FSx 上为 ONTAP 文件系统配置 NVMe

在文件系统上配置 NVMe

在计划创建 NVMe 设备的 FSx for ONTAP 文件系统上连接到 ONTAP CLI。 NetApp

  1. 要访问 NetApp ONTAP CLI,请运行以下命令在 NetApp 适用于 ONTAP 的 Amazon FSx 文件系统的管理端口上建立 SSH 会话。将 management_endpoint_ip 替换为文件系统管理端口的 IP 地址。

    [~]$ ssh fsxadmin@management_endpoint_ip

    有关更多信息,请参阅 使用 ONTAP CLI 管理文件系统

  2. 在 SVM 上创建一个用于访问 NVMe 接口的新卷。

    ::> vol create -vserver fsx -volume nvme_vol1 -aggregate aggr1 -size 1t [Job 597] Job succeeded: Successful
  3. rhel使用 vserver nvme namespace create NetApp ONTAP CLI 命令创建 NVMe 命名空间。命名空间映射到启动器(客户端),并控制哪些启动器(客户端)可以访问 NVMe 设备。

    ::> vserver nvme namespace create -vserver fsx -path /vol/nvme_vol1/rhel -size 100g -ostype linux Created a namespace of size 100GB (107374182400).
  4. 使用 vserver nvme subsystem create NetApp ONTAP CLI 命令创建 NVMe 子系统...

    ~$ vserver nvme subsystem create -vserver fsx -subsystem rhel -ostype linux
  5. 将命名空间映射到您刚刚创建的子系统。

    ::> vserver nvme subsystem map add -vserver fsx -subsystem rhel -path /vol/nvme_vol1/ns_1
  6. 使用您之前检索到的 NQN 将客户端添加到子系统。

    ::> vserver nvme subsystem host add -subsystem rhel -host-nqn nqn.2014-08.org.nvmexpress:uuid:ec21b083-1860-d690-1f29-44528e4f4e0e -vserver fsx

    如果要使映射到此子系统的设备可供多台主机使用,则可以指定多个启动器名称,用逗号分隔。有关更多信息,请参阅 ONTAP 文档中的虚拟服务器 nvme 子系统主机添加。 NetApp

  7. 使用 vserver nvme 命名空间 show 命令确认命名空间是否存在:

    ::> vserver nvme namespace show -vserver fsx -instance Vserver Name: fsx Namespace Path: /vol/nvme_vol1/ns_1 Size: 100GB Size Used: 90.59GB OS Type: linux Comment: Block Size: 4KB State: online Space Reservation: false Space Reservations Honored: false Is Read Only: false Creation Time: 5/20/2024 17:03:08 Namespace UUID: c51793c0-8840-4a77-903a-c869186e74e3 Vdisk ID: 80d42c6f00000000187cca9 Restore Inaccessible: false Inconsistent Filesystem: false Inconsistent Blocks: false NVFail: false Node Hosting the Namespace: FsxId062e9bb6e05143fcb-01 Volume Name: nvme_vol1 Qtree Name: Mapped Subsystem: rhel Subsystem UUID: db526ec7-16ca-11ef-a612-d320bd5b74a9 Namespace ID: 00000001h ANA Group ID: 00000001h Vserver UUID: 656d410a-1460-11ef-a612-d320bd5b74a9 Vserver ID: 3 Volume MSID: 2161388655 Volume DSID: 1029 Aggregate: aggr1 Aggregate UUID: cfa8e6ee-145f-11ef-a612-d320bd5b74a9 Namespace Container State: online Autodelete Enabled: false Application UUID: - Application: - Has Metadata Provisioned: true 1 entries were displayed.
  8. 使用 network interface show -vserver命令检索您在其中创建 NVMe 设备的 SVM 的块存储接口的地址。

    ::> network interface show -vserver svm_name -data-protocol nvme Logical Status Network Current Current Is Vserver Interface Admin/Oper Address/Mask Node Port Home ----------- ---------- ---------- ------------------ ------------- ------- ---- svm_name iscsi_1 up/up 172.31.16.19/20 FSxId0123456789abcdef8-01 e0e true iscsi_2 up/up 172.31.26.134/20 FSxId0123456789abcdef8-02 e0e true 2 entries were displayed.

    请注意,iscsi_1 LIF 同时用于 iSCSI 和 NVMe/TCP。在此示例中,iscsi_1 的 IP 地址为 172.31.16.19,iscsi_2 的 IP 地址为 172.31.26.134。

在你的 Linux 客户端上安装 NVMe 设备

发现目标 iSCSI 节点
  1. 在您的 Linux 客户机上,使用以下命令来发现目标 iSCSI 节点,使用iscsi_1的 IP 地址iscsi_1_IP和客户机的 IP 地址client_IP。请注意,iscsi_1iscsi_2 LIF 同时用于 iSCSI 和 NVMe 存储。

    ~$ sudo nvme discover -t tcp -w client_IP -a iscsi_1_IP
    Discovery Log Number of Records 4, Generation counter 11 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 0 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.656d410a146011efa612d320bd5b74a9:discovery traddr: 172.31.26.134 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 1====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 1 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.656d410a146011efa612d320bd5b74a9:discovery traddr: 172.31.16.19 eflags: explicit discovery connections, duplicate discovery information sectype: none
  2. (可选)您可以与文件系统建立其他会话。Amazon EC2 的单流流量带宽限制为 5Gb/s(约 625MB/s),但您可以通过创建多个会话的方式从单个客户端向文件系统提供更高的吞吐量。有关更多信息,请参阅《适用于 Linux 实例的亚马逊弹性计算云用户指南》中的 Amazon EC2 实例网络带宽

  3. 在控制器丢失超时至少为 1800 秒的情况下登录目标启动器,再次使用iscsi_1的 IP 地址iscsi_1_IP和客户端的 IP 地址。client_IP您的 NVMe 设备显示为可用磁盘。

    ~$ ~$ sudo nvme connect-all -t tcp -w client_IP -a iscsi_1 -l 1800
  4. 使用以下命令验证 NVMe 堆栈是否已识别并合并了多个会话并配置了多路径。

    ~$ cat /sys/module/nvme_core/parameters/multipath Y
  5. 验证相应ONTAP命名空间的 NVMe-model oF 设置设置iopolicy为(NetApp ONTAP Controller且负载平衡设置为round-robin)是否正确反映在主机上。

    ~$ cat /sys/class/nvme-subsystem/nvme-subsys*/model Amazon Elastic Block Store NetApp ONTAP Controller ~$ cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy numa round-robin
  6. 确认已在主机上创建并正确发现命名空间:

    ~$ sudo nvme list Node Generic SN Model Namespace Usage Format FW Rev --------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- -------- /dev/nvme0n1 /dev/ng0n1 vol05955547c003f0580 Amazon Elastic Block Store 0x1 25.77 GB / 25.77 GB 512 B + 0 B 1.0 /dev/nvme2n1 /dev/ng2n1 lWB12JWY/XLKAAAAAAAC NetApp ONTAP Controller 0x1 107.37 GB / 107.37 GB 4 KiB + 0 B FFFFFFFF

    输出中的新设备是/dev/nvme2n1。根据您的 Linux 安装情况,此命名方案可能会有所不同。

  7. 验证每条路径的控制器状态是否处于活动状态并且具有正确的 ANA 状态:

    ~$ nvme list-subsys /dev/nvme2n1 nvme-subsys2 - NQN=nqn.1992-08.com.netapp:sn.656d410a146011efa612d320bd5b74a9:subsystem.rhel hostnqn=nqn.2014-08.org.nvmexpress:uuid:ec2a70bf-3ab2-6cb0-f997-8730057ceb24 iopolicy=round-robin \ +- nvme2 tcp traddr=172.31.26.134,trsvcid=4420,host_traddr=172.31.25.143,src_addr=172.31.25.143 live non-optimized +- nvme3 tcp traddr=172.31.16.19,trsvcid=4420,host_traddr=172.31.25.143,src_addr=172.31.25.143 live optimized

    请注意,NVMe 堆栈已自动发现文件系统的备用 LIF,iscsi_2,172.31.26.134。

  8. 验证NetApp插件为每个ONTAP命名空间设备显示的值是否正确:

    ~$ sudo nvme netapp ontapdevices -o column Device Vserver Namespace Path NSID UUID Size ---------------- ------------------------- -------------------------------------------------- ---- -------------------------------------- --------- /dev/nvme2n1 fsx /vol/nvme_vol1/ns_1 1 0441c609-3db1-4b0b-aa83-790d0d448ece 107.37GB
对设备进行分区
  1. 使用以下命令验证您的设备名称的路径是否nvme2n1存在。

    ~$ ls /dev/mapper/nvme2n1 /dev/nvme2n1
  2. 使用 fdisk 对磁盘进行分区。您需要输入交互式提示。按显示的顺序输入选项。请注意,该Last sector值将根据您的 NVMe 设备的大小而有所不同(本示例中为 100 GiB)。您可以使用小于最后一个扇区的值来创建多个分区(在本例中为 20971519)。

    ~$ sudo fdisk /dev/mapper/nvme2n1

    开始进行 fsdisk 交互式提示。

    Welcome to fdisk (util-linux 2.37.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x66595cb0. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (256-26214399, default 256): Last sector, +sectors or +size{K,M,G,T,P} (256-26214399, default 26214399): 20971519 Created a new partition 1 of type 'Linux' and of size 100 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

    输入 w 后,您的新分区 /dev/nvme2n1 即变为可用。分区名称的格式为<device_name><partition_number>。 1在上一步的fdisk命令中用作分区号。

  3. 使用 /dev/nvme2n1 作为创建文件系统的路径。

    ~$ sudo mkfs.ext4 /dev/nvme2n1

    系统将使用以下输出做出响应:

    mke2fs 1.46.5 (30-Dec-2021) Found a dos partition table in /dev/nvme2n1 Proceed anyway? (y,N) y Creating filesystem with 26214400 4k blocks and 6553600 inodes Filesystem UUID: 372fb2fd-ae0e-4e74-ac06-3eb3eabd55fb Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (131072 blocks): done Writing superblocks and filesystem accounting information: done
在 Linux 客户端上安装 NVMe 设备
  1. 在 Linux 实例上创建一个目录 directory_path 作为文件系统的挂载点。

    ~$ sudo mkdir /directory_path/mount_point
  2. 使用以下命令挂载文件系统。

    ~$ sudo mount -t ext4 /dev/nvme2n1 /directory_path/mount_point
  3. (可选)您可以将挂载目录的所有权更改为您的用户。将 username 替换为您的用户名。

    ~$ sudo chown username:username /directory_path/mount_point
  4. (可选)验证您是否可以从文件系统读取数据和将数据写入文件系统。

    ~$ echo "Hello world!" > /directory_path/mount_point/HelloWorld.txt ~$ cat directory_path/HelloWorld.txt Hello world!

    您已在 Linux 客户端上成功创建并安装了 NVMe 设备。