将 iSCSI LUN 挂载到 Linux 客户端 - FSx for ONTAP

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

将 iSCSI LUN 挂载到 Linux 客户端

这些过程中提供的示例使用以下设置:

  • 正在挂载到 Linux 主机的 iSCSI LUN 已创建。有关更多信息,请参阅创建 iSCSI LUN

  • 挂载 iSCSI LUN 的 Linux 主机是运行 Amazon Linux 2 亚马逊机器映像(AMI)的 Amazon EC2 实例。为允许入站和出站流量,它已配置 VPC 安全组,如 使用 Amazon VPC 进行文件系统访问控制 中所述。

  • Linux 主机和 FSx for ONTAP 文件系统位于同一 VPC 和 AWS 账户中。如果主机位于其他 VPC 中,则可以使用 VPC 对等或 AWS Transit Gateway 授予其他 VPC 访问该卷的 iSCSI 终端节点的权限。有关更多信息,请参阅 从部署 VPC 外部访问数据

    如果您使用的是运行其他 Linux AMI 的 EC2 实例,则主机上安装的某些实用程序可能已完成预装,并且您可能会使用不同的命令来安装所需的软件包。除了安装软件包外,本节中使用的命令还适用于其他 EC2 Linux AMI。

    我们建议您将 EC2 实例与文件系统的首选子网放入同一个可用区,如下图所示。

该图显示了适用于 NetApp ONTAP 的 Amazon FSx 文件系统,该文件系统具有 iSCSI LUN,Amazon EC2 实例与文件系统的首选子网位于同一个可用区。

安装和配置 Linux 客户端

安装 iSCSI 客户端
  1. 确认 iscsi-initiator-utilsdevice-mapper-multipath 并已安装在您的 Linux 设备上。使用 SSH 客户端连接到 Linux 实例。有关更多信息,请参阅使用 SSH 连接到 Linux 实例

  2. 使用以下命令安装 multipath 和 iSCSI 客户端。如果您希望在文件服务器之间自动失效转移,则必须安装 multipath

    ~$ sudo yum install -y device-mapper-multipath iscsi-initiator-utils
  3. 使用 multipath 期间,为了便于在进行文件服务器之间的自动失效转移时更快做出响应,请将 /etc/iscsi/iscsid.conf 文件中的替换超时值设置为值 5,而不是使用默认值 120

    ~$ sudo sed -i 's/node.session.timeo.replacement_timeout = .*/node.session.timeo.replacement_timeout = 5/' /etc/iscsi/iscsid.conf; sudo cat /etc/iscsi/iscsid.conf | grep node.session.timeo.replacement_timeout
  4. 启动 iSCSI 服务。

    ~$ sudo service iscsid start

    请注意,根据您的 Linux 版本,您可能需要改为使用以下命令:

    ~$ sudo systemctl start iscsid
  5. 使用以下命令确认正在运行服务:

    ~$ sudo systemctl status iscsid.service

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

    iscsid.service - Open-iSCSI Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2021-09-02 00:00:00 UTC; 1min ago Docs: man:iscsid(8) man:iscsiadm(8) Process: 14658 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS) Main PID: 14660 (iscsid) CGroup: /system.slice/iscsid.service ├─14659 /usr/sbin/iscsid └─14660 /usr/sbin/iscsid
在您的 Linux 客户端上配置 iSCSI
  1. 您须要配置多路径来使客户端能够在文件服务器之间自动进行失效转移。使用以下命令:

    ~$ sudo mpathconf --enable --with_multipathd y
  2. 使用以下命令确定 Linux 主机的启动程序名称。启动程序名称的位置取决于您的 iSCSI 实用程序。如果您正在使用 iscsi-initiator-utils,则启动程序名称位于文件 /etc/iscsi/initiatorname.iscsi 中。

    ~$ sudo cat /etc/iscsi/initiatorname.iscsi

    系统使用启动程序名称做出响应。

    InitiatorName=iqn.1994-05.com.redhat:abcdef12345

在 FSx for ONTAP 文件系统上配置 iSCSI

  1. 使用以下命令连接到您在 NetApp 其中创建 iSCSI LUN 的 FSx for ONTAP 文件系统上的 ONTAP CLI。有关更多信息,请参阅 使用 NetApp ONTAP CLI

    ~$ ssh fsxadmin@your_management_endpoint_ip
  2. 使用 NetApp ONTAP CLI lun igroup create命令创建启动程序组 (igroup)。启动程序组会映射到 iSCSI LUN,并控制哪些启动程序(客户端)可以访问 LUN。将 host_initiator_name 替换为在上一过程中从 Linux 主机中检索到的启动程序名称。

    ::> lun igroup create -vserver svm_name -igroup igroup_name -initiator host_initiator_name -protocol iscsi -ostype linux

    如果要使映射到此 igroup 的 LUN 可供多个主机使用,您可以指定多个启动程序名称,以逗号分隔。有关更多信息,请参阅 NetApp ONTAP 文档中心中的 lun igroup 创建

  3. 使用命令 lun igroup show 确认存在 igroup

    ::> lun igroup show

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

    Vserver Igroup Protocol OS Type Initiators --------- ------------ -------- -------- ------------------------------------ svm_name igroup_name iscsi linux iqn.1994-05.com.redhat:abcdef12345
  4. 此步骤假定您已创建了 iSCSI LUN。如果没有,创建 iSCSI LUN请参见以 step-by-step 获取操作说明。

    使用 lun mapping create 来创建从已创建的 LUN 到已创建的 igroup 的映射,并指定以下属性:

    • svm_name – 提供 iSCSI 目标的存储虚拟机的名称。主机使用此值来连接 LUN。

    • vol_name – 托管 LUN 的卷的名称。

    • lun_name – 已分配给 LUN 的名称。

    • igroup_name – 启动程序组的名称。

    • lun_id – LUN ID 整数是特定于映射的,而不是 LUN 本身。igroup 中的启动程序将其用作逻辑单元号,并在访问存储器时为启动程序使用此值。

    ::> lun mapping create -vserver svm_name -path /vol/vol_name/lun_name -igroup igroup_name -lun-id lun_id
  5. 使用 lun show -path 命令确认 LUN 已创建、已联机且已映射。

    ::> lun show -path /vol/vol_name/lun_name -fields state,mapped,serial-hex

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

    Vserver Path serial-hex state mapped --------- ------------------------------- ------------------------ -------- -------- svm_name /vol/vol_name/lun_name 6c5742314e5d52766e796150 online mapped

    保存 serial_hex 值(在本例中为 6c5742314e5d52766e796150),您将在之后的步骤中使用该值为块设备创建易记名称。

  6. 使用 network interface show -vserver 命令检索您在其中创建 iSCSI LUN 的 SVM 的 iscsi_1iscsi_2 接口的地址。

    ::> network interface show -vserver svm_name

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

    Logical Status Network Current Current Is Vserver Interface Admin/Oper Address/Mask Node Port Home ----------- ---------- ---------- ------------------ ------------- ------- ---- svm_name iscsi_1 up/up 172.31.0.143/20 FSxId0123456789abcdef8-01 e0e true iscsi_2 up/up 172.31.21.81/20 FSxId0123456789abcdef8-02 e0e true nfs_smb_management_1 up/up 198.19.250.177/20 FSxId0123456789abcdef8-01 e0e true 3 entries were displayed.

    在此示例中,iscsi_1 的 IP 地址是 172.31.0.143iscsi_2 的IP 地址是 172.31.21.81

在 Linux 客户端上挂载 iSCSI LUN

  1. 在 Linux 客户端上,使用以下命令来发现使用 iscsi_1 的 IP 地址 iSCSI_1_IP 的目标 iSCSI 节点。

    ~$ sudo iscsiadm --mode discovery --op update --type sendtargets --portal iscsi_1_IP
    172.31.0.143:3260,1029 iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3 172.31.21.81:3260,1028 iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3

    在此示例中,iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3 对应于首选可用区中的 iSCSI LUN 的target_initiator

  2. (可选)您可以建立与 target_initiator 的额外会话。Amazon EC2 的单流流量带宽限制为 5Gb/s(约 625MB/s),但您可以通过创建多个会话的方式从单个客户端向文件系统提供更高的吞吐量。有关更多信息,请参阅《Amazon Elastic Compute Cloud 用户指南(适用于 Linux 实例)》中的 Amazon EC2 实例网络带宽

    以下命令会在每个可用区中为每个 ONTAP 节点的每个启动程序建立 8 个会话,使客户端能够向 iSCSI LUN 提供高达 40Gb/s(5000MB/s)的聚合吞吐量。

    ~$ sudo iscsiadm --mode node -T target_initiator --op update -n node.session.nr_sessions -v 8
  3. 登录到目标启动程序。您的 iSCSI LUN 显示为可用磁盘。

    ~$ sudo iscsiadm --mode node -T target_initiator --login
    Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3, portal: 172.31.14.66,3260] (multiple) Login to [iface: default, target: iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3, portal: 172.31.14.66,3260] successful.

    上述输出已被截断;您应该会在每个文件服务器上看到针对每个会话的一个 Logging in 和一个 Login successful 响应。如果每个节点有 4 个会话,则会有 8 个 Logging in 和 8 个 Login successful 响应。

  4. 使用以下命令,通过显示具有多个策略的单个 LUN 来验证 dm-multipath 是否已识别并合并 iSCSI。列为 active 和列为 enabled 的设备数量应相等。

    ~$ sudo multipath -ll

    在输出中,磁盘名称的格式为dm-xyz,其中 xyz 为整数。如果不存在其他多路径磁盘,则此值为 dm-0

    3600a09806c5742314e5d52766e79614f dm-xyz NETAPP ,LUN C-Mode size=10G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 0:0:0:1 sda 8:0 active ready running | |- 1:0:0:1 sdc 8:32 active ready running | |- 3:0:0:1 sdg 8:96 active ready running | `- 4:0:0:1 sdh 8:112 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 2:0:0:1 sdb 8:16 active ready running |- 7:0:0:1 sdf 8:80 active ready running |- 6:0:0:1 sde 8:64 active ready running `- 5:0:0:1 sdd 8:48 active ready running

    您的块设备现已连接到 Linux 客户端。其位于 /dev/dm-xyz 路径之下。您不应将此路径用于管理目的;而应使用 /dev/mapper/wwid 路径下的符号链接,其中 wwid 是适用于 LUN 的唯一标识符,在不同设备之间保持一致。在下一步中,您需要为 wwid 提供一个易记名称,以使其能够其区别于其他多路径磁盘。

为块设备提供一个易记得名称
  1. 要为您的设备提供易记名称,请在 /etc/multipath.conf 文件中创建别名。为此,请使用首选文本编辑器将以下条目添加到文件中,替换以下占位符:

    • 使用您在 在 FSx for ONTAP 文件系统上配置 iSCSI 过程中保存的值来替换 serial_hex

    • 如示例所示,将前缀 3600a0980 添加到值 serial_hex 中。这是适用于 ONTAP 的 Amazon FSx 使用的 NetApp ONTAP 发行版 NetApp 的唯一序言。

    • device_name 替换为您要在设备上使用的易记名称。

    multipaths { multipath { wwid 3600a0980serial_hex alias device_name } }

    或者,您可以复制以下脚本并保存为 bash 文件,例如 multipath_alias.sh。您可以使用 sudo 权限运行脚本,使用相应的序列号和期望的易记名称来替换 serial_hex(不带 3600a0980 前缀)和 device_name。此脚本会在 /etc/multipath.conf 文件中搜索未取消注释的 multipaths 部分。如果存在,它会在该部分中附加一个 multipath 条目;否则,它将创建一个新的 multipaths 部分,其中包含适用于您的块设备的 multipath 条目的。

    #!/bin/bash SN=serial_hex ALIAS=device_name CONF=/etc/multipath.conf grep -q '^multipaths {' $CONF UNCOMMENTED=$? if [ $UNCOMMENTED -eq 0 ] then sed -i '/^multipaths {/a\\tmultipath {\n\t\twwid 3600a0980'"${SN}"'\n\t\talias '"${ALIAS}"'\n\t}\n' $CONF else printf "multipaths {\n\tmultipath {\n\t\twwid 3600a0980$SN\n\t\talias $ALIAS\n\t}\n}" >> $CONF fi
  2. 重新启动 multipathd 服务以使对 /etc/multipathd.conf 的更改生效。

    ~$ systemctl restart multipathd.service
对 LUN 进行分区

下一步是使用 fdisk 格式化您的 LUN 并对其进行分区。

  1. 使用以下命令验证您的 device_name 路径是否存在。

    ~$ ls /dev/mapper/device_name
    /dev/device_name
  2. 使用 fdisk 对磁盘进行分区。您需要输入交互式提示。按显示的顺序输入选项。请注意,Last sector 值将根据 iSCSI LUN 的大小(在本例中为 10GB)而改变。您可以使用小于最后一个扇区的值来创建多个分区(在本例中为 20971519)。

    ~$ sudo fdisk /dev/mapper/device_name

    开始进行 fsdisk 交互式提示。

    Welcome to fdisk (util-linux 2.30.2). 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 (2048-20971519, default 2048): 2048 Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): 20971519 Created a new partition 1 of type 'Linux' and of size 512 B. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

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

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

    ~$ sudo mkfs.ext4 /dev/mapper/partition_name

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

    mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=16 blocks 655360 inodes, 2621184 blocks 131059 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2151677952 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
在 Linux 客户端上挂载 LUN
  1. 创建一个目录 directory_path 作为文件系统的挂载点。

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

    ~$ sudo mount -t ext4 /dev/mapper/partition_name /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 客户端上成功创建并挂载了 iSCSI LUN。