为 Linux 配置 iSCSI

NetApp ONTAP 上配置 iSCSI 的过程有三个主要步骤,以下过程将介绍这些步骤:

在 Linux 主机上安装和配置 iSCSI 客户端。

在文件系统的 SVM 上配置 iSCSI。

  • 创建 iSCSI 启动器组。
  • 将启动器组映射到 LUN。

在 Linux 客户端上挂载 iSCSI LUN。

开始前的准备工作

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

  • 在ONTAP上创建 iSCSI LUN。
  • 配置 iSCSI 和访问文件数据所在的 Linux 主机。
  • 除了安装软件包外,本节中使用的命令还适用于其他 Linux 
主题

在 Linux 主机上安装和配置 iSCSI

安装 iSCSI 客户端
  1. 确认 iscsi-initiator-utils 和 device-mapper-multipath 并已安装在您的 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

在 ONTAP 文件系统上配置 iSCSI

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


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


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


    如果要使 LUNs 映射到此 igroup 的对多个主机可用,则可以指定多个用逗号分隔的启动器名称。有关更多信息,请参阅 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_1 和 iscsi_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

在 Linux 客户端上挂载 iSCSI LUN 的过程包括三个步骤:
  1. 发现目标 iSCSI 节点
  2. 对 iSCSI LUN 进行分区
  3. 在客户端上挂载 iSCSI LUN

以下过程将详述这些步骤。

发现目标 iSCSI 节点

  1. 在您的 Linux 客户机上,使用以下命令使用iscsi_1的 IP 地址发现目标 iSCSI 节点iscsi_1_IP


    ~$ 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. (可选)要为您的 iSCSI LUN 带来高于单一客户端 5 Gbps(约 625 MBps)的吞吐量,请建立额外的会话以提高吞吐量。
    以下命令在每个可用区中为每个 ONTAP 节点的每个启动器建立 8 个会话,使客户端能够向 iSCSI LUN 驱动高达 40 Gbps (5,000 MBps) 的聚合吞吐量。


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


    ~$ 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 文件中创建别名。为此,请使用首选文本编辑器将以下条目添加到文件中,替换以下占位符:
    • 使用您​在之前过程中保存的值来替换 serial_hex
    • 如示例所示,将前缀 3600a0980 添加到值 serial_hex 中。
    • 将 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 对磁盘进行分区。您需要输入交互式提示。按显示的顺序输入选项。您可以使用小于最后一个扇区的值来创建多个分区(在本例中为 20971519)。

    注意
    Last sector 值将根据 iSCSI LUN 的大小(在本例中为 10 GB)而改变。


    ~$ 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.



    输入 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。

没有找到想要的答案?

上传日志让 AI 帮你诊断,或者在控制台里直接向 AI 提问。