TCP为 Linux 配置NVMe/ - FSx for ONTAP

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

TCP为 Linux 配置NVMe/

FSxfo ONTAP r 支持非易失性存储器 Express over TCP (NVMe/TCP) 块存储协议。使用NVMe/TCP,您可以使用ONTAPCLI来配置命名空间和子系统,然后将命名空间映射到子系统,类似于配置和映射到 i 的启动器组 (igroup) 的方式LUNs。SCSINVMe/TCP协议适用于具有 6 个或更少的高可用性 (HA) 对的第二代文件系统。

注意

FSx对于ONTAP文件系统,对于 i SCSI 和NVMe/TCP块存储协议使用 an SVM's i SCSI 端点。

在您的 Amazon TCP FSx 上配置 NVMe /有三个主要步骤 NetApp ONTAP,这些步骤包含在以下步骤中:

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

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

    • 创建NVMe命名空间。

    • 创建NVMe子系统。

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

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

  3. 在 Linux 客户端上安装NVMe设备。

开始前的准备工作

在开始为 NVMe /配置文件系统之前TCP,需要完成以下各项。

  • FSx为ONTAP文件系统创建一个。有关更多信息,请参阅 创建文件系统

  • 在文件系统中创建运行红帽企业 Linux (RHEL) 9.3 VPC 的EC2实例。这是 Linux 主机,您将在该主机上使用NVMe/TCPfor Linux配置NVMe和访问文件数据。

    除了这些步骤的范围之外,如果主机位于另一个主机上VPC,则可以使用对VPC等互连或 AWS Transit Gateway 向其他人授予对卷的 i SCSI 端点的VPCs访问权限。有关更多信息,请参阅 从部署外部访问数据 VPC

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

  • 获取具有访问fsxadmin权限的ONTAP用户的证书ONTAPCLI。有关更多信息,请参阅 ONTAP角色和用户

  • 要为ONTAP文件系统配置NVMe并用于访问的 Linux 主机位于同一个VPC和 AWS 账户。FSx

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

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

在 Linux 主机NVMe上安装和配置

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

  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

    记录响应以供后续步骤使用。

在ONTAP文件系统NVMe上FSx进行配置

在文件系统NVMe上配置

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

  1. 要访问 NetApp ONTAPCLI,请运行以下命令在 Amazon NetApp ONTAP 文件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. ns_1使用vserver nvme namespace create NetApp ONTAPCLI命令创建NVMe命名空间。命名空间映射到启动器(客户端),并控制哪些启动器(客户端)可以访问NVMe设备。

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

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

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

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

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

  7. 使用vserver nvme namespace 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: sub_1 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-tcp 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_1LIF于 i SCSI 和NVMe/TCP。

    在此示例中,iscsi_1 的 IP 地址为 172.31.16.19,iscsi_2 的 IP 地址为 172.31.26.134。

在 Linux 客户端上安装NVMe设备

在 Linux 客户端上安装NVMe设备的过程包括三个步骤:

  1. 发现节NVMe点

  2. 对设备进行分NVMe区

  3. 在客户端上安装NVMe设备

以下程序涵盖了这些内容。

发现目标NVMe节点
  1. 在您的 Linux 客户端上,使用以下命令来发现目标NVMe节点。Replace(替换) iSCSI_1_IP 使用iscsi_1的 IP 地址,以及 客户端 IP 客户机的 IP 地址。

    注意

    iscsi_1iscsi_2LIFs用于 i SCSI 和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. (可选)要为您的文件NVMe设备带来比亚马逊EC2单一客户端最大吞吐量 5 Gb/s(约 625 MB/s)更高的吞吐量,请按照《适用于 Linux EC2实例的亚马逊弹性计算云用户指南》中亚马逊实例网络带宽中描述的步骤来建立其他会话。

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

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

    ~$ cat /sys/module/nvme_core/parameters/multipath Y
  5. 使用以下命令验证相应ONTAP命名空间model的 NVMe-oF 设置是否设置为NetApp ONTAP Controller,负载平衡是否设置iopolicy为,round-robin以便在所有可用路径上分发 I/O

    ~$ 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方案 172.31.26. iscsi_2 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 对磁盘进行分区。您需要输入交互式提示。按显示的顺序输入选项。您可以使用小于最后一个扇区的值来创建多个分区(在本例中为 20971519)。

    注意

    Last sector值将根据NVMe设备的大小而有所不同(本例中为 100 GiB)。

    ~$ 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 即变为可用。这些区域有:partition_name 有格式 <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. 创建一个目录 directory_path 作为 Linux 实例上文件系统的挂载点。

    ~$ 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设备。