本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Linux 配置 iSCSI
FSx for ONTAP 支持 iSCSI 协议。您需要在 Linux 客户端和文件系统上配置 iSCSI,才能使用 iSCSI 协议在客户端和文件系统之间传输数据。iSCSI 协议适用于所有拥有 6 个或更少的高可用性 (HA) 对的文件系统。
在 Amazon FSx for NetApp ONTAP 上配置 iSCSI 有三个主要步骤,这些步骤将在以下过程中进行介绍:
在 Linux 主机上安装和配置 iSCSI 客户端。
在文件系统的 SVM 上配置 iSCSI。
创建 iSCSI 启动器组。
将启动器组映射到 LUN。
在 Linux 客户端上挂载 iSCSI LUN。
开始前的准备工作
在开始为 iSCSI 配置文件系统之前,需要完成以下各项。
创建 FSx for ONTAP 文件系统。有关更多信息,请参阅 创建文件系统。
在文件系统上创建 iSCSI LUN。有关更多信息,请参阅 创建 i SCSI LUN。
在与文件系统相同的 VPC 中创建一个运行 Amazon Linux 2 亚马逊机器映像 (AMI) 的 Amazon EC2 实例。这是您配置 iSCSI 和访问文件数据所在的 Linux 主机。
在这些过程的范围之外,如果主机位于其他 VPC 中,则可以使用 VPC 对等连接或 Amazon Transit Gateway 来授予其他 VPC 访问该卷的 iSCSI 端点的权限。有关更多信息,请参阅 从部署外部访问数据 VPC。
配置 Linux 主机的 VPC 安全组,允许入站和出站流量,如 使用 Amazon 进行文件系统访问控制 VPC 中所述。
获取具有
fsxadmin
权限的 ONTAP 用户的凭证,此权限用于访问 ONTAP CLI。有关更多信息,请参阅 ONTAP 角色和用户。您将要为 iSCSI 配置并用于访问 FSx for ONTAP 文件系统的 Linux 主机位于同一 VPC 和 Amazon Web Services 账户 中。
我们建议您将 EC2 实例与文件系统的首选子网放入同一个可用区,如下图所示。
如果 EC2 实例运行的 Linux AMI 与 Amazon Linux 2 不同,则这些过程和示例中使用的某些实用程序可能已安装,并且您可能会使用不同的命令来安装所需的软件包。除了安装软件包外,本节中使用的命令还适用于其他 EC2 Linux AMI。
在 Linux 主机上安装和配置 iSCSI
安装 iSCSI 客户端
-
确认
iscsi-initiator-utils
和device-mapper-multipath
并已安装在您的 Linux 设备上。使用 SSH 客户端连接到 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
在 FSx for ONTAP 文件系统上配置 iSCSI
-
在 FSx for ONTAP 文件系统上,使用以下命令连接到您在其中创建了 iSCSI LUN 的 NetApp ONTAP CLI。有关更多信息,请参阅 使用 NetApp ONTAP CLI。
~$
ssh fsxadmin@your_management_endpoint_ip
-
使用 NetApp ONTAP CLI 命令 lun igroup create
创建启动程序组( igroup
)。启动程序组会映射到 iSCSI LUN,并控制哪些启动程序(客户端)可以访问 LUN。将host_initiator_name
替换为在上一过程中从 Linux 主机中检索到的启动程序名称。::>
lun igroup create -vserver
-igroupsvm_name
igroup_name
-initiatorhost_initiator_name
-protocol iscsi -ostype linux如果要使映射到此 igroup 的 LUN 可供多个主机使用,您可以指定多个启动程序名称,以逗号分隔。有关更多信息,请参阅 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。如果您尚未创建,请参阅 创建 i SCSI LUN 的分步说明来创建。
使用 lun mapping create
来创建从已创建的 LUN 到已创建的 igroup 的映射,并指定以下属性: -
– 提供 iSCSI 目标的存储虚拟机的名称。主机使用此值来连接 LUN。svm_name
-
– 托管 LUN 的卷的名称。vol_name
-
– 已分配给 LUN 的名称。lun_name
-
– 启动程序组的名称。igroup_name
-
– LUN ID 整数是特定于映射的,而不是 LUN 本身。igroup 中的启动程序将其用作逻辑单元号,并在访问存储器时为启动程序使用此值。lun_id
::>
lun mapping create -vserversvm_name
-path /vol/vol_name
/lun_name
-igroupigroup_name
-lun-idlun_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 -vserversvm_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_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
。(可选)要为 iSCSI LUN 带来高于 Amazon EC2 单一客户端最大 5 Gb/s(约 625 MB/s)的吞吐量,请按照《适用于 Linux 实例的 Amazon Elastic Compute Cloud 用户指南》中的 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登录到目标启动程序。您的 iSCSI LUN 显示为可用磁盘。
~$
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
是适用于 LUN 的唯一标识符,在不同设备之间保持一致。在下一步中,您需要为wwid
提供一个易记名称,以使其能够其区别于其他多路径磁盘。wwid
为块设备分配一个易记名称
要为您的设备提供易记名称,请在
/etc/multipath.conf
文件中创建别名。为此,请使用首选文本编辑器将以下条目添加到文件中,替换以下占位符:使用您在 在 FSx for ONTAP 文件系统上配置 iSCSI 过程中保存的值来替换
serial_hex
。如示例所示,将前缀
3600a0980
添加到值serial_hex
中。这是用于 Amazon FSx for NetApp ONTAP 的 NetApp ONTAP 发行版的唯一序言。将
device_name
替换为您要在设备上使用的易记名称。
multipaths { multipath { wwid 3600a0980
serial_hex
aliasdevice_name
} }或者,您可以复制以下脚本并保存为 bash 文件,例如
multipath_alias.sh
。您可以使用 sudo 权限运行脚本,使用相应的序列号和期望的易记名称来替换
(不带 3600a0980 前缀)和serial_hex
。此脚本会在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. 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
命令中使用的分区编号。-
使用
/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.txtHello world!
您已在 Linux 客户端上成功创建并挂载了 iSCSI LUN。