为 Linux 配置 iSCSI
NetApp ONTAP 上配置 iSCSI 的过程有三个主要步骤,以下过程将介绍这些步骤:
在 Linux 主机上安装和配置 iSCSI 客户端。
在文件系统的 SVM 上配置 iSCSI。
- 创建 iSCSI 启动器组。
- 将启动器组映射到 LUN。
在 Linux 客户端上挂载 iSCSI LUN。
开始前的准备工作
在开始为 iSCSI 配置文件系统之前,需要完成以下各项。
- 在ONTAP上创建 iSCSI LUN。
- 配置 iSCSI 和访问文件数据所在的 Linux 主机。
- 除了安装软件包外,本节中使用的命令还适用于其他 Linux
主题
在 Linux 主机上安装和配置 iSCSI
安装 iSCSI 客户端
- 确认
iscsi-initiator-utils和device-mapper-multipath并已安装在您的 Linux 设备上。使用 SSH 客户端连接到 Linux 实例。 - 使用以下命令安装
multipath和 iSCSI 客户端。如果您希望在文件服务器之间自动失效转移,则必须安装multipath。~$ sudo yum install -y device-mapper-multipath iscsi-initiator-utils - 使用
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 - 启动 iSCSI 服务。
~$ sudo service iscsid start
请注意,根据您的 Linux 版本,您可能需要改为使用以下命令:~$ sudo systemctl start iscsid - 使用以下命令确认正在运行服务:
~$ 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
- 您须要配置多路径来使客户端能够在文件服务器之间自动进行失效转移。使用以下命令:
~$ sudo mpathconf --enable --with_multipathd y - 使用以下命令确定 Linux 主机的启动程序名称。启动程序名称的位置取决于您的 iSCSI 实用程序。如果您正在使用
iscsi-initiator-utils,则启动程序名称位于文件/etc/iscsi/initiatorname.iscsi中。~$ sudo cat /etc/iscsi/initiatorname.iscsi
系统使用启动程序名称做出响应。InitiatorName=iqn.1994-05.com.redhat:abcdef12345
在 ONTAP 文件系统上配置 iSCSI
- 使用以下命令连接到您在其中创建 iSCSI LUN 的 for ONTAP 文件系统上的 ONTAP CLI。 NetApp 有关更多信息,请参阅 使用 NetApp ONTAP CLI。
~$ ssh admin@your_management_ONTAP_ip - 使用 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 创建。 - 使用命令 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 - 此步骤假定您已创建了 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 - 使用
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),您将在之后的步骤中使用该值为块设备创建易记名称。 - 使用
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.143,iscsi_2的IP 地址是172.31.21.81。
在 Linux 客户端上挂载 iSCSI LUN
在 Linux 客户端上挂载 iSCSI LUN 的过程包括三个步骤:
- 发现目标 iSCSI 节点
- 对 iSCSI LUN 进行分区
- 在客户端上挂载 iSCSI LUN
以下过程将详述这些步骤。
发现目标 iSCSI 节点
- 在您的 Linux 客户机上,使用以下命令使用
iscsi_1的 IP 地址发现目标 iSCSI 节点iscsi_1_IP。~$ sudo iscsiadm --mode discovery --op update --type sendtargets --portal iscsi_1_IP172.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。 - (可选)要为您的 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 - 登录到目标启动程序。您 LUNs 的 iSCSI 将显示为可用磁盘。
~$ sudo iscsiadm --mode node -T target_initiator --loginLogging 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响应。 - 使用以下命令,通过显示具有多个策略的单个 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提供一个易记名称,以使其能够其区别于其他多路径磁盘。
为块设备分配一个易记名称
- 要为您的设备提供易记名称,请在
/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 - 使用您在之前过程中保存的值来替换
- 重新启动
multipathd服务以使对/etc/multipathd.conf的更改生效。~$ systemctl restart multipathd.service
对 LUN 进行分区
下一步是使用 fdisk 格式化您的 LUN 并对其进行分区。
- 使用以下命令验证您的
device_name路径是否存在。~$ ls /dev/mapper/device_name/dev/device_name - 使用
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命令中使用的分区号。 - 使用
/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
- 创建一个目录
directory_path作为文件系统的挂载点。~$ sudo mkdir /directory_path/mount_point - 使用以下命令挂载文件系统。
~$ sudo mount -t ext4 /dev/mapper/partition_name /directory_path/mount_point - (可选)如果要向特定用户授予挂载目录的所有权,请将
username替换为拥有者的用户名。~$ sudo chown username:username /directory_path/mount_point - (可选)验证您是否可以从文件系统读取数据和将数据写入文件系统。
~$ echo "Hello world!" > /directory_path/mount_point/HelloWorld.txt ~$ cat directory_path/HelloWorld.txt Hello world!
您已在 Linux 客户端上成功创建并挂载了 iSCSI LUN。