Linux용 NVMe /TCP 프로비저닝 - FSx for ONTAP

Linux용 NVMe /TCP 프로비저닝

ONTAP용 FSx는 비휘발성 Memory Express over TCP(NVMe/TCP) 블록 스토리지 프로토콜을 지원합니다. NVMe /TCP를 사용하면 ONTAP CLI를 사용하여 네임스페이스와 하위 시스템을 프로비저닝한 다음 네임스페이스를 하위 시스템에 매핑합니다. 이는 LUNs 프로비저닝하고 iSCSI의 이니시에이터 그룹(igroup)에 매핑하는 방식과 비슷합니다. NVMe /TCP 프로토콜은 고가용성(HA) 페어가 6개 이하인 2세대 파일 시스템에서 사용할 수 있습니다.

참고

ONTAP요 FSx 파일 시스템은 iSCSI 및 NVMe/TCP 블록 스토리지 프로토콜 모두에 SVM의 iSCSI 엔드포인트를 사용합니다.

NetApp ONTAP용 Amazon FSx에서 NVMe/TCP를 구성하는 세 가지 주요 단계는 다음 절차에서 다룹니다.

  1. Linux 호스트에 NVMe 클라이언트를 설치하고 구성합니다.

  2. 파일 시스템의 SVM에서 NVMe를 구성합니다.

    • NVMe 네임스페이스를 생성합니다.

    • NVMe 하위 시스템을 생성합니다.

    • 네임스페이스를 하위 시스템에 매핑합니다.

    • 클라이언트 NQN을 하위 시스템에 추가합니다.

  3. Linux 클라이언트에 NVMe 디바이스를 탑재합니다.

시작하기 전 준비 사항

NVMe/TCP용 파일 시스템을 구성하는 프로세스를 시작하기 전에 다음 항목을 완료해야 합니다.

  • ONTAP용 FSx 파일 시스템을 생성합니다. 자세한 내용은 파일 시스템 만들기 단원을 참조하십시오.

  • 파일 시스템과 동일한 VPC에서 Red Hat Enterprise Linux(RHEL) 9.3을 실행하는 EC2 인스턴스를 생성합니다. 이는 NVMe를 구성하고 Linux용 NVMe NVMe/TCP를 사용하여 파일 데이터에 액세스할 Linux 호스트입니다.

    이러한 절차의 범위를 넘어 호스트가 다른 VPC에 있는 경우, VPC 피어링 또는 AWS Transit Gateway를 사용하여 다른 VPC에 볼륨의 iSCSI 엔드포인트에 대한 액세스 권한을 부여할 수 있습니다. 자세한 내용은 배포 VPC 외부에서 데이터 액세스 단원을 참조하십시오.

  • Amazon VPC를 사용한 파일 시스템 액세스 제어에 설명된 대로 인바운드 및 아웃바운드 트래픽을 허용하도록 Linux 호스트의 VPC 보안 그룹을 구성합니다.

  • ONTAP CLI에 액세스하는 데 사용할 fsxadmin 권한이 있는 ONTAP 사용자의 자격 증명을 가져옵니다. 자세한 내용은 ONTAP 사용자 및 역할 단원을 참조하십시오.

  • NVMe용으로 구성하고 ONTAP용 FSx 파일 시스템에 액세스하는 데 사용할 Linux 호스트는 동일한 VPC와 AWS 계정에 있습니다.

  • EC2 인스턴스는 파일 시스템의 기본 서브넷과 동일한 가용성 영역에 있는 것이 좋습니다.

EC2 인스턴스가 RHEL 9.3과 다른 Linux AMI를 실행하는 경우 이러한 절차 및 예제에 사용된 일부 유틸리티가 이미 설치되어 있을 수 있으며, 다른 명령을 사용하여 필요한 패키지를 설치할 수 있습니다. 패키지 설치 외에도 이 섹션에 사용된 명령은 다른 EC2 Linux AMI에도 유효합니다.

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

    다음 단계에서 사용할 응답을 기록합니다.

ONTAP용 FSx 파일 시스템에서 NVMe 구성하기

파일 시스템에서 NVMe를 구성하려면

NVMe 디바이스(들)를 생성하려는 ONTAP용 FSx 파일 시스템의 NetApp ONTAP CLI에 연결합니다.

  1. NetApp ONTAP CLI에 액세스하려면 다음 명령을 실행하여 Amazon FSx for NetApp ONTAP 파일 시스템의 관리 포트에 SSH 세션을 설정합니다. management_endpoint_ip를 파일 시스템의 관리 포트의 IP 주소로 바꿉니다.

    [~]$ ssh fsxadmin@management_endpoint_ip

    자세한 내용은 ONTAP CLI를 사용한 파일 시스템 관리 단원을 참조하십시오.

  2. NVMe 인터페이스에 액세스하는 데 사용하는 새 볼륨을 SVM에 생성합니다.

    ::> vol create -vserver fsx -volume nvme_vol1 -aggregate aggr1 -size 1t [Job 597] Job succeeded: Successful
  3. vserver nvme namespace create NetApp ONTAP CLI 명령을 사용하여 NVMe 네임스페이스 ns_1를 생성합니다. 네임스페이스는 이니시에이터(클라이언트)에 매핑하고 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 ONTAP CLI 명령을 사용하여 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

    이 하위 시스템에 매핑된 장치를 여러 호스트에서 사용할 수 있게 하려면 쉼표로 구분된 목록에 여러 개의 개시자 이름을 지정할 수 있습니다. 자세한 내용은 NetApp ONTAP Docs의 vserver nvme 하위 시스템 호스트 추가를 참조하세요.

  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_1 LIF는 iSCSI와 NVMe /TCP 모두에 사용됩니다.

    이 예제에서 iscsi_1의 IP 주소는 172.31.16.19이고 iscsi_2는 172.31.26.134입니다.

Linux 클라이언트에 NVMe 디바이스 탑재

Linux 클라이언트에 NVMe 디바이스를 탑재하는 프로세스는 세 단계로 구성됩니다.

  1. NVMe 노드 검색

  2. NVMe 디바이스 파티셔닝

  3. 클라이언트에 NVMe 디바이스 탑재

이는 다음 절차에서 다룹니다.

대상 NVMe 노드를 검색하려면
  1. Linux 클라이언트에서 다음 명령을 사용하여 대상 NVMe 노드를 검색합니다. iscsi_1_IPiscsi_1의 IP 주소로 바꾸고 클라이언트의 IP 주소는 client_IP로 바꿉니다.

    참고

    iscsi_1iscsi_2 LIFs는 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. (선택 사항) 파일 NVMe 디바이스로 Amazon EC2 단일 클라이언트 최대 5Gb/s(~625MB/s)보다 높은 처리량을 유도하려면 Linux 인스턴스용 Amazon Elastic Compute Cloud 사용 설명서의 Amazon Amazon EC2 인스턴스 네트워크 대역폭에 설명된 절차에 따라 추가 세션을 설정합니다.

  3. 컨트롤러 손실 시간 제한이 1800초 이상인 대상 이니시에이터에 로그인하고, 다시 iscsi_1_IP에는 iscsi_1의 IP 주소를, client_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. 다음 명령을 사용하여 사용 가능한 모든 경로에 I/O를 분산하기 위해 각 ONTAP 네임스페이스에 대해 NVMe-oF 설정 modelNetApp ONTAP Controller로 설정되고 로드 밸런싱 iopolicyround-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. 다음 명령을 사용하여 device_name nvme2n1의 경로가 있는지 확인합니다.

    ~$ ls /dev/mapper/nvme2n1 /dev/nvme2n1
  2. fdisk를 사용하여 디스크를 파티셔닝합니다. 대화형 프롬프트가 나타날 것입니다. 표시된 순서대로 옵션을 입력합니다. 마지막 섹터보다 작은 값(이 예제에서는 20971519)을 사용하여 여러 파티션을 만들 수 있습니다.

    참고

    Last sector 값은 NVMe 디바이스의 크기(이 예제에서는 100GiB)에 따라 달라집니다.

    ~$ 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. 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 장치를 성공적으로 생성하고 탑재했습니다.