15 经由 IP 网络的大容量存储:iSCSI #
提供充足的磁盘容量是计算机中心或支持服务器的任何站点的主要任务之一。通常为此目的使用光纤通道。iSCSI(互联网 SCSI)解决方案提供了光纤通道的低成本备用方案,可以充分利用商品服务器和以太网联网设备。Linux iSCSI 提供 iSCSI 发起端和 iSCSI LIO 目标软件,用于将 Linux 服务器连接到中心存储系统。
LIO 是 Linux 适用的标准开源多协议 SCSI 目标。LIO 以 Linux 内核 2.6.38 及更高版本替代 STGT(SCSI 目标)框架成为 Linux 中的标准统一存储目标。在 SUSE Linux Enterprise Server 12 中,iSCSI LIO 目标服务器替换了先前版本中的 iSCSI 目标服务器。
iSCSI 是一种存储联网协议,可简化在块存储设备和服务器之间通过 TCP/IP 网络进行的 SCSI 包数据传输。iSCSI 目标软件在目标服务器上运行,并将逻辑单元定义为 iSCSI 目标设备。iSCSI 发起端软件在不同服务器上运行并连接到目标设备,以使此服务器上的存储设备可用。
iSCSI LIO 目标服务器与 iSCSI 发起端服务器之间通过在 LAN 的 IP 级别上发送 SCSI 包来进行通讯。当在发起端服务器上运行的应用程序启动针对 iSCSI LIO 目标设备的查询时,操作系统会生成必要的 SCSI 命令。然后,SCSI 命令会嵌入到 IP 包中并在需要时由软件进行加密,此软件通常为 iSCSI 发起端。包经由内部 IP 网络传输到相应的 iSCSI 远程站,该站称为 iSCSI LIO 目标服务器(简称为 iSCSI 目标)。
许多存储解决方案允许通过 iSCSI 进行访问,但是也可以运行提供 iSCSI 目标的 Linux 服务器。在此情况下,对已针对文件系统服务优化过的 Linux 服务器进行设置是很重要的。有关 RAID 的更多信息,请参见第 7 章 “软件 RAID 配置”。
15.1 安装 iSCSI LIO 目标服务器和 iSCSI 发起端 #
系统默认会安装 iSCSI 发起端(软件包 open-iscsi
和 yast2-iscsi-client
),iSCSI LIO 目标软件包则需要手动安装。
尽管可以在同一系统中运行发起端和目标,但不建议采用此设置。
要安装 iSCSI LIO 目标服务器,请在终端运行以下命令:
>
sudo
zypper in yast2-iscsi-lio-server
如果您需要安装 iSCSI 发起端或任何依赖项,请运行命令 sudo zypper in yast2-iscsi-client
。
也可以使用 YaST 软件管理模块来进行安装。
除了上述软件包之外,任何额外需要的软件包将由安装程序自动提取,或者在您第一次运行相应的 YaST 模块时安装。
15.2 设置 iSCSI LIO 目标服务器 #
本章说明如何使用 YaST 配置 iSCSI LIO 目标服务器以及如何设置 iSCSI LIO 目标设备。您可以使用任何 iSCSI 发起端访问目标设备。
15.2.1 iSCSI LIO 目标服务启动和防火墙设置 #
iSCSI LIO 目标服务默认配置为手动启动。您可以将该服务配置为在引导时自动启动。如果服务器上使用防火墙,并且您想让 iSCSI LIO 目标对其他计算机可用,则必须为想要用于目标访问的每一个适配器打开防火墙中的端口。TCP 端口 3260 是 IANA(互联网号码分配机构)所定义的 iSCSI 协议的端口号。
启动 YaST,然后启动
› 。切换到
选项卡。在
下,指定 iSCSI LIO 目标服务的启动方式:引导时:: 服务器重启动时自动启动服务。
手动: (默认)服务器重启动之后,您必须运行
sudo systemctl start targetcli
命令来手动启动该服务。只有启动服务后才可以使用目标设备。
如果在服务器上使用防火墙,并且希望 iSCSI LIO 目标对其他计算机可用,请为要用于目标访问的每个适配器接口打开防火墙中的端口 3260。如果端口对于所有网络接口均为关闭,则其他计算机将无法使用 iSCSI LIO 目标。
如果您未在服务器上使用防火墙,则防火墙设置会被禁用。在此情况下,请跳过下面的步骤,并单击
离开配置对话框,或切换到另一个选项卡继续配置。在
选项卡上,选中 复选框,以启用防火墙设置。单击不应打开的端口上的所有接口。单击 保存您的设置。
,查看或配置要使用的网络接口。列出所有可用的网络接口,并且默认全部选中。取消选择
单击
,以保存和应用 iSCSI LIO 目标服务设置。
15.2.2 配置身份验证以发现 iSCSI LIO 目标和发起端 #
iSCSI LIO 目标服务器软件支持 PPP-CHAP(点对点协议-质询握手身份验证协议),该协议是 Internet Engineering Task Force (IETF) RFC 1994 (https://datatracker.ietf.org/doc/html/rfc1994) 中定义的一种三向身份验证方法。服务器使用此身份验证方法来发现 iSCSI LIO 目标与发起端,并不用于访问目标上的文件。如果不希望限制对发现的访问,则使用 。 选项默认处于启用状态。不需要经过身份验证,此服务器上的所有 iSCSI LIO 目标都可由同一网络上的任何 iSCSI 发起端发现。
如果是为了更为安全的配置而需要身份验证,则可以使用传入身份验证、传出身份验证,或二者皆使用。
要求 iSCSI 发起端证明它有权针对 iSCSI LIO 目标运行发现。发起端必须提供传入用户名和口令。 要求 iSCSI LIO 目标向发起端证明它是预期的目标。iSCSI LIO 目标必须向 iSCSI 发起端提供传出用户名和口令。用于传入和传出发现的口令必须不同。如果启用发现身份验证,则其设置将应用到所有 iSCSI LIO 目标组。为安全起见,建议您对生产环境中的目标与发起端发现使用身份验证。
配置 iSCSI LIO 目标的身份验证自选设置:
15.2.3 准备存储空间 #
在为 iSCSI 目标服务器配置 LUN 之前,必须准备好要使用的存储空间。可以将整个未格式化的块设备用作单个 LUN,也可以将一台设备划分为数个未格式化的分区,并将每个分区用作单独的 LUN。iSCSI 目标配置会将 LUN 导出到 iSCSI 发起端。
您可以使用 YaST 中的分区程序或命令行来设置分区。有关细节,请参考第 11.1 节 “使用。iSCSI LIO 目标可将未格式化的分区用于 Linux、Linux LVM 或 Linux RAID 文件系统 ID。 ”
设置完用作 iSCSI 目标的设备或分区后,切勿通过其本地路径直接对其进行访问。不要在目标服务器上挂载分区。
15.2.3.1 对虚拟环境中的设备进行分区 #
您可以将虚拟机 guest 服务器作为 iSCSI LIO 目标服务器使用。本节说明如何给 Xen 虚拟机指派分区。您还可以使用 SUSE Linux Enterprise Server 支持的其他虚拟环境。
在 Xen 虚拟环境中,必须将要用于 iSCSI LIO 目标设备的存储空间指派给 guest 虚拟机,然后作为 guest 环境中的虚拟磁盘访问该空间。每个虚拟磁盘都可以是一个物理块设备,如整个磁盘、分区或卷,或者可以是一个基于文件的磁盘映像,其中虚拟磁盘是 Xen 主机服务器上较大物理磁盘上的单个映像文件。为了获得最佳性能,请从物理磁盘或分区创建每个虚拟磁盘。为 guest 虚拟机设置完虚拟磁盘后,请启动 guest 服务器,然后按照物理服务器所用的同一过程将新的空虚拟磁盘配置为 iSCSI 目标设备。
在 Xen 主机服务器上创建基于文件的磁盘映像,然后将其指派给 Xen guest 服务器。默认情况下,Xen 将基于文件的磁盘映像存储在 /var/lib/xen/images/VM_NAME
目录中,其中 VM_NAME
是虚拟机的名称。
15.2.4 设置 iSCSI LIO 目标组 #
您可以使用 YaST 配置 iSCSI LIO 目标设备。YaST 使用 targetcli
软件。iSCSI LIO 目标可使用采用 Linux、Linux LVM 或 Linux RAID 文件系统 ID 的分区。
在开始之前,请选择要用于后端存储的分区。不一定要格式化这些分区,iSCSI 客户端可以在连接分区时对这些分区进行格式化,并重写所有现有格式。
启动 YaST,然后启动
› 。切换到
选项卡。单击
,然后定义新的 iSCSI LIO 目标组以及设备:iSCSI LIO 目标软件将自动填写
、 、 、 以及 字段。默认会选择 。如果您有多个网络接口,请使用 IP 地址下拉框选择要用于此目标组的网络接口的 IP 地址。要使服务器在所有地址下都可访问,请选择
。如果您不想对此目标组进行发起端身份验证,请取消选择
(不建议此做法)。单击
。输入设备或分区的路径,或单击 添加该路径。也可以指定名称,然后单击 。系统将自动生成 LUN 号(从 0 开始)。如果将该字段保留为空,则会自动生成名称。(可选)重复前面的步骤将目标添加到此目标组。
将所有所需的目标添加到该组后,单击
。
在
页面上,配置允许访问目标组中 LUN 的发起端的信息:在为目标组指定了至少一个发起端后,
、 、 和 按钮才会启用。您可以使用 或 来为目标组添加发起端:修改 iSCSI 目标:选项 #添加:: 为选中的 iSCSI LIO 目标组添加新的发起端项。
编辑 LUN:: 配置将 iSCSI LIO 目标组中的哪些 LUN 映射到选定发起端。您可以将分配的每一个目标都映射到某个首选的发起端。
编辑身份验证:: 为选定发起端配置首选身份验证方法。您可以指定无身份验证,也可以配置传入身份验证、传出身份验证或二者皆配置。
删除:: 将选定发起端项从分配给目标组的发起端列表中去除。
复制:: 添加具有与选定发起端项相同 LUN 映射和身份验证设置的新发起端项。如此,您便可以轻松地将相同的共享 LUN 逐一分配给群集中的每一个节点。
单击
,指定发起端名称,选中或取消选中 复选框,然后单击 保存设置。选择发起端项,单击
,修改 LUN 映射,以指定将 iSCSI LIO 目标组中的哪些 LUN 分配给选定发起端,然后单击 保存更改。如果 iSCSI LIO 目标组由多个 LUN 组成,您可以将一个或多个 LUN 分配给选定发起端。默认情况下,会将该组中的每个可用 LUN 都指派给某个发起端 LUN。
要修改 LUN 分配,请完成以下一项或多项操作:
添加:: 单击 创建新的 项,然后使用 下拉框将一个目标 LUN 映射到该项。
删除:: 选择 项,然后单击 去除目标 LUN 映射。
更改:: 选择 项,然后使用 下拉框选择要与之映射的目标 LUN。
典型的分配计划包括:
单个服务器列为一个发起端。将目标组中的所有 LUN 分配给它。
您可以使用此分组策略,为指定服务器逻辑分组 iSCSI SAN 存储。
多个独立服务器列为多个发起端。将一个或多个目标 LUN 分配给每一个服务器。将每个 LUN 只分配给一个服务器。
您可以使用此分组策略,为数据中心中的指定部门或服务类别逻辑分组 iSCSI SAN 存储。
群集的每个节点列为一个发起端。将所有共享的目标 LUN 分配给每一个节点。所有节点都将连接到设备,但对于大多数文件系统,群集软件会锁定设备不让它们访问,并且一次只在一个节点上装入该设备。共享的文件系统(例如 OCFS2)可让多个节点同时装入相同的文件结构,并以读写访问权打开相同文件。
您可以使用此分组策略,为指定服务器群集逻辑分组 iSCSI SAN 存储。
选择发起端项,单击
,指定发起端的身份验证设置,然后单击 保存设置。您可以要求
,也可以配置 和/或 。您仅可为每个发起端指定一对用户名和口令。对于发起端的传入和传出身份验证,身份凭证可以有所不同。每个发起端的身份凭证均可不同。对每个可以访问此目标组的 iSCSI 发起端重复上述步骤。
配置完发起端指派后,单击
。
单击
保存并应用设置。
15.2.5 修改 iSCSI LIO 目标组 #
您可以按照如下方式修改现有 iSCSI LIO 目标组:
在目标组中添加或删除目标 LUN 设备
为目标组添加或去除发起端
为目标组的发起端修改发起端 LUN 到目标 LUN 的映射
修改发起端身份验证(传入、传出或二者)的用户名和口令身份凭证。
查看或修改 iSCSI LIO 目标组的设置:
启动 YaST,然后启动
› 。切换到
选项卡。选择要修改的 iSCSI LIO 目标组,然后单击
。在“修改 iSCSI 目标 LUN 设置”页面上,将 LUN 添加到目标组,编辑 LUN 指派或从组中删除目标 LUN。在对组完成所有想要的更改后,单击
。有关选项信息,请参见修改 iSCSI 目标:选项。
在“修改 iSCSI 目标发起端设置”页面上,配置允许访问目标组中 LUN 的发起端的信息。在对组完成所有想要的更改后,单击
。单击
保存并应用设置。
15.2.6 删除 iSCSI LIO 目标组 #
删除 iSCSI LIO 目标组会去除组的定义以及发起端的相关设置,包括 LUN 映射和身份验证凭证。该操作不会销毁分区上的数据。要再次赋予发起端访问权限,您可以将目标 LUN 分配给不同的或新的目标组,并为其配置发起端访问权限。
启动 YaST,然后启动
› 。切换到
选项卡。选择要删除的 iSCSI LIO 目标组,然后单击
。系统提示时,单击
确认删除,或单击 予以取消。单击
保存并应用设置。
15.3 配置 iSCSI 发起端 #
iSCSI 发起端可用于连接到任意 iSCSI 目标。连接不限于第 15.2 节 “设置 iSCSI LIO 目标服务器”说明的 iSCSI 目标解决方案。iSCSI 发起端配置包括两个主要步骤 - 发现可用 iSCSI 目标和设置 iSCSI 会话。这两个步骤都可通过 YaST 完成。
15.3.1 使用 YaST 配置 iSCSI 发起端 #
在 YaST 中,“iSCSI 发起端概述”包括三个选项卡:
- 服务:
可使用
选项卡来在引导时启用 iSCSI 发起端。它还允许设置唯一的 和 iSNS 服务器以用于发现。- 已连接目标:
- 已发现目标:
15.3.1.1 配置 iSCSI 发起端 #
启动 YaST,然后启动
› 。切换到
选项卡。在
下,定义在发生配置更改时要执行什么操作。请记住,可用选项取决于服务的当前状态。在
菜单中指定重启后要执行的操作:指定或校验
。为此服务器上的 iSCSI 发起端指定格式正确的 iSCSI 限定名称 (IQN)。此发起端名称在网络上必须具有全局唯一性。IQN 使用以下常规格式:
iqn.yyyy-mm.com.mycompany:n1:n2
其中,n1 和 n2 是字母数字字符。例如:
iqn.1996-04.de.suse:01:a5dfcea717a
/etc/iscsi/initiatorname.iscsi
文件中的相应值。如果服务器提供 iBFT (iSCSI Boot Firmware Table) 支持,则
将用 IBFT 中的相应值填充,并且您不能在此界面中更改发起端名称。不过,您可以使用 BIOS 设置来进行修改。iBFT 是指包含各种对 iSCSI 引导进程有用的参数的信息块,包括针对服务器的 iSCSI 目标与发起端描述。使用以下方法之一发现网络上的 iSCSI 目标。
iSNS:: 要使用 iSNS (Internet Storage Name Service) 来发现 iSCSI 目标,请按第 15.3.1.2 节 “使用 iSNS 发现 iSCSI 目标”中所述继续操作。
已发现目标:: 要手动发现 iSCSI 目标设备,请按第 15.3.1.3 节 “手动发现 iSCSI 目标”中所述继续操作。
15.3.1.2 使用 iSNS 发现 iSCSI 目标 #
必须在环境中已安装并配置 iSNS 服务器后,才能使用此选项。有关信息,请参见第 14 章 “iSNS for Linux”。
在 YaST 中,选择
,然后选择 选项卡。指定 iSNS 服务器的 IP 地址和端口。默认端口为 3205。
单击
保存并应用更改。
15.3.1.3 手动发现 iSCSI 目标 #
对要从已设置 iSCSI 发起端的服务器访问的每个 iSCSI 目标服务器重复以下过程。
在 YaST 中,选择
,然后选择 选项卡。单击
打开 iSCSI 发起端发现对话框。输入 IP 地址并根据需要更改端口。默认端口为 3260。
如果要求进行身份验证,请取消选择
,然后为 或 指定身份凭证。单击
启动发现并连接到 iSCSI 目标服务器。如果要求提供身份凭证,在成功发现后,请使用
激活目标。系统会提示您输入身份验证凭证以使用所选 iSCSI 目标。
单击
完成配置。该目标会立即出现在
中,现在便可使用虚拟 iSCSI 设备了。单击
保存并应用更改。您可以使用
lsscsi
命令查找 iSCSI 目标设备的本地设备路径。
15.3.1.4 为 iSCSI 目标设备设置启动首选项 #
在 YaST 中,选择
,然后选择 选项卡以查看当前连接到服务器的 iSCSI 目标设备的列表。选择要管理的 iSCSI 目标设备。
单击
修改设置:自动:: 此选项用于 iSCSI 服务本身启动时要连接的 iSCSI 目标。这是典型配置。
引导时:: 此选项用于引导期间要连接的 iSCSI 目标;即,当根目录 (
/
) 位于 iSCSI 上时。这样,iSCSI 目标设备在服务器引导时将从 initrd 进行评估。此选项在无法从 iSCSI 引导的平台(例如 IBM Z)上会被忽略。因此,在这些平台上不应使用该选项,而应使用 。单击
保存并应用更改。
15.3.2 手动设置 iSCSI 发起端 #
发现和配置 iSCSI 连接都要求 iscsid 正在运行。首次运行发现时,将在 /etc/iscsi/
目录中创建 iSCSI 发起端的内部数据库。
如果发现受口令保护,则向 iscsid 提供身份验证信息。由于首次执行发现时内部数据库并不存在,因此此时无法使用内部数据库。相反,必须编辑配置文件 /etc/iscsid.conf
来提供信息。要添加执行发现所需的口令信息,请在 /etc/iscsid.conf
末尾添加以下几行:
discovery.sendtargets.auth.authmethod = CHAP discovery.sendtargets.auth.username = USERNAME discovery.sendtargets.auth.password = PASSWORD
发现会将所有接收到的值存储在一个内部持久数据库中。此外,它会显示所有检测到的目标。使用以下命令运行此发现:
>
sudo
iscsiadm-m discovery --type=st --portal=TARGET_IP
输出如下所示:
10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems
要发现 iSNS
服务器上的可用目标,请使用以下命令:
sudo iscsiadm --mode discovery --type isns --portal TARGET_IP
对于 iSCSI 目标上定义的每个目标,将显示一行。有关存储数据的更多信息,请参见第 15.3.3 节 “iSCSI 发起端数据库”。
iscsiadm
的特殊 --login
选项会创建所有需要的设备:
>
sudo
iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems --login
新生成的设备会显示在 lsscsi
的输出中,现在可以挂载该设备。
15.3.3 iSCSI 发起端数据库 #
iSCSI 发起端发现的所有信息都存储在位于 /etc/iscsi
中的两个数据库文件中。一个数据库用于发现的目标,另一个数据库用于发现的节点。访问数据库时,首先必须选择是希望从发现获取数据还是从节点数据库获取数据。可使用 iscsiadm
的参数 -m discovery
和 -m node
来执行此操作。使用 iscsiadm
搭配其中一个参数,可提供存储记录的概述:
>
sudo
iscsiadm -m discovery 10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems
此示例中的目标名称为 iqn.2006-02.com.example.iserv:systems
。与此特殊数据集相关的所有操作都需要此名称。要检查 ID 为 iqn.2006-02.com.example.iserv:systems
的数据记录的内容,可使用以下命令:
>
sudo
iscsiadm -m node --targetname iqn.2006-02.com.example.iserv:systems node.name = iqn.2006-02.com.example.iserv:systems node.transport_name = tcp node.tpgt = 1 node.active_conn = 1 node.startup = manual node.session.initial_cmdsn = 0 node.session.reopen_max = 32 node.session.auth.authmethod = CHAP node.session.auth.username = joe node.session.auth.password = ******** node.session.auth.username_in = EMPTY node.session.auth.password_in = EMPTY node.session.timeo.replacement_timeout = 0 node.session.err_timeo.abort_timeout = 10 node.session.err_timeo.reset_timeout = 30 node.session.iscsi.InitialR2T = No node.session.iscsi.ImmediateData = Yes ....
要编辑这些变量的值,可将命令 iscsiadm
与 update
操作一起使用。例如,如果希望 iscsid 在初始化时登录 iSCSI 目标,则将变量 node.startup
的值设置为 automatic
:
sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \ -p ip:port --op=update --name=node.startup --value=automatic
使用 delete
操作移除过时的数据集。如果目标 iqn.2006-02.com.example.iserv:systems
不再是有效的记录,请使用以下命令删除此记录:
>
sudo
iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \ -p ip:port --op=delete
使用此选项时应谨慎,因为它会删除该记录而无任何附加确认提示。
要获取所有已发现目标的列表,请运行 sudo iscsiadm -m
node
命令。
15.4 使用 targetcli-fb 设置软件目标 #
targetcli
是用于管理 LinuxIO (LIO) 目标子系统配置的外壳。您可以交互方式调用该外壳,也可以像在传统的外壳中那样每次执行一条命令。与传统外壳类似,您可以使用 cd
命令遍历 targetcli 功能层次结构,并使用 ls
命令列出内容。
可用的命令取决于当前目录。虽然每个目录都有各自的命令集,但也有一些命令可在所有目录中使用(例如 cd
和 ls
命令)。
targetcli
命令的格式如下:
[DIRECTORY] command
[ARGUMENTS]
您可以在任何目录中使用 help
命令来查看可用命令列表,或查看有关命令的特定信息。
targetcli
工具是 targetcli-fb 软件包的一部分。此包已在官方 SUSE Linux Enterprise Server 软件储存库中提供,可使用以下命令进行安装:
>
sudo
zypper install targetcli-fb
安装 targetcli-fb 软件包后,启用 targetcli
服务:
>
sudo
systemctl enable targetcli>
sudo
systemctl start targetcli
要切换到 targetcli 外壳,请以 root 身份运行 targetcli
:
>
sudo
targetcli
然后,可以运行 ls
命令来查看默认配置。
/> ls o- / ............................ [...] o- backstores ................. [...] | o- block ..... [Storage Objects: 0] | o- fileio .... [Storage Objects: 0] | o- pscsi ..... [Storage Objects: 0] | o- ramdisk ... [Storage Objects: 0] | o- rbd ....... [Storage Objects: 0] o- iscsi ............... [Targets: 0] o- loopback ............ [Targets: 0] o- vhost ............... [Targets: 0] o- xen-pvscsi .......... [Targets: 0] />
如 ls
命令的输出中所示,尚未配置任何后端。因此,第一步是配置一个受支持软件目标。
targetcli 支持以下后端:
fileio
:本地映像文件block
:专用磁盘或分区上的块存储pscsi
:SCSI 直通设备ramdisk
:基于内存的后端rbd
:Ceph RADOS 块设备
为了熟悉 targetcli 的功能,请使用 create
命令将本地映像文件设置为软件目标:
/backstores/fileio create test-disc /alt/test.img 1G
这会在指定的位置(在本例中为 /alt
)创建 1 GB 的 test.img
映像。运行 ls
,您应该会看到以下结果:
/> ls o- / ........................................................... [...] o- backstores ................................................ [...] | o- block .................................... [Storage Objects: 0] | o- fileio ................................... [Storage Objects: 1] | | o- test-disc ... [/alt/test.img (1.0GiB) write-back deactivated] | | o- alua ...... .......................... [ALUA Groups: 1] | | o- default_tg_pt_gp .... [ALUA state: Active/optimized] | o- pscsi .................................... [Storage Objects: 0] | o- ramdisk .................................. [Storage Objects: 0] | o- rbd ...................................... [Storage Objects: 0] o- iscsi .............................................. [Targets: 0] o- loopback ........................................... [Targets: 0] o- vhost .............................................. [Targets: 0] o- xen-pvscsi ......................................... [Targets: 0] />
输出中指出,已在 /backstores/fileio
目录下创建一个名为 test-disc
的基于文件的备用存储区,并将其与创建的文件 /alt/test.img
相关联。请注意,新的备用存储尚未激活。
下一步是将一个 iSCSI 目标前端连接到该后端存储。每个目标都必须有一个 IQN
(iSCSI 限定的名称)。最常用的 IQN 格式如下:
iqn.YYYY-MM.NAMING-AUTHORITY:UNIQUE-NAME
必须提供 IQN 的以下部分:
YYYY-MM:建立命名机构的年份和月份
NAMING-AUTHORITY:命名机构的互联网域名的反向语法
UNIQUE-NAME:命名机构选择的唯一域名
例如,对于域 open-iscsi.com
,IQN 可以是:
iqn.2005-03.com.open-iscsi:UNIQUE-NAME
创建 iSCSI 目标时,targetcli
命令允许您指派自己的 IQN,只要该 IQN 遵循指定的格式即可。您还可以在创建目标时省略名称,让该命令为您创建 IQN,例如:
/> iscsi/ create
再次运行 ls
命令:
/> ls o- / ............................................................... [...] o- backstores .................................................... [...] | o- block ........................................ [Storage Objects: 0] | o- fileio ....................................... [Storage Objects: 1] | | o- test-disc ....... [/alt/test.img (1.0GiB) write-back deactivated] | | o- alua ......................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ............. [ALUA state: Active/optimized] | o- pscsi ........................................ [Storage Objects: 0] | o- ramdisk ...................................... [Storage Objects: 0] | o- rbd .......................................... [Storage Objects: 0] o- iscsi .................................................. [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456 ... [TPGs: 1] | o- tpg1 ..................................... [no-gen-acls, no-auth] | o- acls ................................................ [ACLs: 0] | o- luns ................................................ [LUNs: 0] | o- portals .......................................... [Portals: 1] | o- 0.0.0.0:3260 ........................................... [OK] o- loopback ............................................... [Targets: 0] o- vhost .................................................. [Targets: 0] o- xen-pvscsi ............................................. [Targets: 0] />
输出会显示创建的 iSCSI 目标节点,以及自动为其生成的 IQN iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456
请注意,targetcli
还创建并启用了默认的目标门户组 tpg1
。这是因为位于根级别的变量 auto_add_default_portal
和 auto_enable_tpgt
默认设置为 true
。
该命令还使用 0.0.0.0
IPv4 通配符创建了默认门户。这意味着,任何 IPv4 地址都可以访问配置的目标。
下一步是为 iSCSI 目标创建 LUN(逻辑单元号)。执行此操作的最佳做法是让 targetcli
自动分配其名称和编号。切换到 iSCSI 目标所在的目录,然后在 lun
目录中使用 create
命令为备用存储区分配 LUN。
/> cd /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/ /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456> cd tpg1 /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> luns/ create /backstores/fileio/test-disc
运行 ls
命令以查看更改:
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> ls o- tpg1 .............................................. [no-gen-acls, no-auth] o- acls ..................................................... [ACLs: 0] o- luns ..................................................... [LUNs: 1] | o- lun0 ....... [fileio/test-disc (/alt/test.img) (default_tg_pt_gp)] o- portals ............................................... [Portals: 1] o- 0.0.0.0:3260 ................................................ [OK]
现在,即创建了一个具有 1 GB 基于文件的备用存储的 iSCSI 目标。该目标名为 iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456
,可从系统的任何网络端口访问。
最后,需要确保发起端能够访问配置的目标。要实现此目的,一种方法是为每个发起端创建一个允许其连接到目标的 ACL 规则。在这种情况下,必须使用其 IQN 列出每个所需的发起端。可以在 /etc/iscsi/initiatorname.iscsi
文件中找到现有发起端的 IQN。使用以下命令添加所需的发起端(在本例中为 iqn.1996-04.de.suse:01:54cab487975b
):
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> acls/ create iqn.1996-04.de.suse:01:54cab487975b Created Node ACL for iqn.1996-04.de.suse:01:54cab487975b Created mapped LUN 0. /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1>
您也可以在不限制访问的演示模式下运行目标。此方法的安全性较低,但适合演示目的,并可以在封闭的网络中运行。要启用演示模式,请使用以下命令:
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> set attribute generate_node_acls=1 /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> set attribute demo_mode_write_protect=0
最后一步是使用根目录中可用的 saveconfig
命令保存创建的配置:
/> saveconfig /etc/target/example.json
如果在某个时间点您需要从保存的文件恢复配置,需要先清除当前配置。请记住,除非先保存配置,否则清除当前配置会导致数据丢失。使用以下命令清除并重新加载配置:
/> clearconfig As a precaution, confirm=True needs to be set /> clearconfig confirm=true All configuration cleared /> restoreconfig /etc/target/example.json Configuration restored from /etc/target/example.json />
要测试配置的目标是否正常工作,请使用同一系统上安装的 open-iscsi iSCSI 发起端连接到该目标(请将 HOSTNAME 替换为本地计算机的主机名):
>
iscsiadm -m discovery -t st -p HOSTNAME
此命令将返回找到的目标列表,例如:
192.168.20.3:3260,1 iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456
然后,可以使用 login
iSCSI 命令连接到列出的目标。这会使目标可用作本地磁盘。
15.5 安装时使用 iSCSI 磁盘 #
使用支持 iSCSI 的固件时,支持从 AMD64/Intel 64 和 IBM POWER 体系结构上的 iSCSI 磁盘引导。
要在安装过程中使用 iSCSI 磁盘,必须将以下参数添加到引导参数行:
withiscsi=1
安装过程中会额外显示一个屏幕,让您可以将 iSCSI 磁盘连接到系统,并在安装过程中加以使用。
引导期间,iSCSI 设备将异步显示。虽然 initrd 可确保为根文件系统正确设置这些设备,但对于任何其他文件系统或挂载点(例如 /usr
),并无此类保证。因此,任何系统挂载点(例如 /usr
或 /var
)都不受支持。要使用这些设备,请确保正确同步相应的服务和设备。
15.6 iSCSI 查错 #
本节介绍一些已知问题和针对 iSCSI 目标及 iSCSI 发起端问题的可行的解决方案。
15.6.1 在 iSCSI LIO 目标服务器上设置目标 LUN 时发生门户错误 #
添加或编辑 iSCSI LIO 目标组时发生错误:
Problem setting network portal IP_ADDRESS:3260
/var/log/YasT2/y2log
日志文件包含以下错误:
find: `/sys/kernel/config/target/iscsi': No such file or directory
若 iSCSI LIO 目标服务器软件当前未运行则会发生此问题。要解决此问题,请退出 YaST,并在命令行中使用 systemctl start targetcli
命令手动启动 iSCSI LIO,然后重试。
您也可以输入以下内容来检查 configfs
、iscsi_target_mod
和 target_core_mod
是否已加载。随即显示响应示例。
>
sudo
lsmod | grep iscsi iscsi_target_mod 295015 0 target_core_mod 346745 4 iscsi_target_mod,target_core_pscsi,target_core_iblock,target_core_file configfs 35817 3 iscsi_target_mod,target_core_mod scsi_mod 231620 16 iscsi_target_mod,target_core_pscsi,target_core_mod,sg,sr_mod,mptctl,sd_mod, scsi_dh_rdac,scsi_dh_emc,scsi_dh_alua,scsi_dh_hp_sw,scsi_dh,libata,mptspi, mptscsih,scsi_transport_spi
15.6.2 iSCSI LIO 目标在其他计算机上不可见 #
如果目标服务器上使用防火墙,则必须打开要使用的 iSCSI 端口,以允许其他计算机看到 iSCSI LIO 目标。有关信息,请参见第 15.2.1 节 “iSCSI LIO 目标服务启动和防火墙设置”。
15.6.3 iSCSI 流量的数据包被丢弃 #
如果防火墙很忙,可能会丢弃包。SUSE 防火墙默认为三分钟后丢弃包。如果您发现 iSCSI 流量数据包被丢弃,请考虑将 SUSE 防火墙配置为太忙时将数据包排队,而不是丢弃它们。
15.6.4 将 iSCSI 卷与 LVM 配合使用 #
在 iSCSI 目标上使用 LVM 时,请使用本部分的查错提示。
15.6.4.1 检查在引导时是否执行 iSCSI 发起端发现 #
设置 iSCSI 发起端时,确保引导时启用发现,以便 udev 在引导时可以发现 iSCSI 设备,并设置可供 LVM 使用的设备。
15.6.4.2 检查在引导时是否执行 iSCSI 目标发现 #
请记住,udev
会为设备提供默认设置。确保创建设备的所有应用程序均已在引导时启动,以便 udev
在系统启动时能为这些应用程序识别出并分配设备。如果应用程序或服务在稍后才启动,则 udev
不会像在引导时那样自动创建设备。
15.6.5 配置文件设置为手动时,会挂载 iSCSI 目标 #
如果您之前手动修改了 /etc/iscsi/iscsid.conf
配置文件,那么,即使在该文件中将 node.startup
选项设置为手动,Open-iSCSI 启动时也会挂载目标。
检查 /etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default
文件。它包含可覆盖 /etc/iscsi/iscsid.conf
文件的 node.startup
设置。如果使用 YaST 接口将挂载选项设置为手动,则也会在 /etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default
文件中设置 node.startup = manual
。
15.7 iSCSI LIO 目标术语 #
- 后备存储
提供 iSCSI 端点底层的实际存储的物理存储对象。
- CDB(命令描述符块))
SCSI 命令的标准格式。CDB 通常长度为 6、10 或 12 个字节,但也可以达到 16 个字节或具有可变长度。
- CHAP(质询握手身份验证协议)
点对点协议 (PPP) 身份验证方法用于向另一台计算机确认一台计算机的身份。链路控制协议 (LCP) 连接两台计算机并协商 CHAP 方法后,身份验证者会向对等体发送随机询问。然后该对等体会根据询问以及密钥发出以哈希加密的应答。再由身份验证者比照由预期哈希值自己计算出的结果对该哈希应答进行验证,以决定是确认身份验证还是中断连接。CHAP 在 RFC 1994 中定义。
- CID(连接标识符)
由发起端生成的 16 位编号,用于唯一识别两个 iSCSI 设备之间的连接。登录阶段会显示此编号。
- 端点
iSCSI 目标名称与 iSCSI TPG(IQN + 标记)的组合。
- EUI(扩展的唯一标识符)
在全球范围内唯一标识每个设备的 64 位编号。其格式由指定公司的唯一的 24 位编号和由该公司分配给所构建的每个设备的 40 位编号组成。
- 发起端
SCSI 会话的发起端。通常是计算机等控制设备。
- IPS(互联网协议存储)
使用 IP 协议在存储网络中移动数据的一类协议或设备。FCIP(基于 IP 的光纤通道)、iFCP(互联网光纤通道协议)以及 iSCSI(互联网 SCSI)都属于 IPS 协议。
- IQN(iSCSI 限定的名称)
在全球范围内唯一标识每个设备的 iSCSI 的名称格式(例如:
iqn.5886.com.acme.tapedrive.sn‐a12345678
)。- ISID(发起端会话标识符)
由发起端生成的一个 48 位编号,用于唯一识别发起端与目标之间的会话。此值在登录过程中创建,生成后将与登录 PDU 一起发送给目标。
- MCS(每个会话多重连接)
它是 iSCSI 规范的组成部分,允许发起端与目标之间存在多个 TCP/IP 连接。
- MPIO(多路径 I/O)
一种可在服务器和存储设备之间建立多个冗余数据路径的方法。
- 网络门户
iSCSI 端点与 IP 地址及 TCP(传输控制协议)端口的组合。TCP 端口 3260 是 IANA(互联网号码分配机构)所定义的 iSCSI 协议的端口号。
- SAM(SCSI 体系结构模型)
以一般术语说明 SCSI 行为的文档。它支持不同类型的设备通过各种介质进行通讯。
- target
SCSI 会话的接收端,通常是磁盘驱动器、磁带驱动器或扫描仪等设备。
- 目标组 (TG)
在创建视图时视为同等对待的 SCSI 目标端口的列表。创建视图可帮助简化 LUN(逻辑单元号)映射。每个视图项指定一个目标组、主机组以及一个 LUN。
- 目标端口
一个 iSCSI 端点与一个或多个 LUN 的组合。
- 目标端口组 (TPG)
IP 地址和 TCP 端口号的列表,用于确定特定 iSCSI 目标将要侦听的接口。
- 目标会话标识符 (TSID)
由目标生成的 16 位编号,用于唯一标识发起端和目标之间的会话。此值在登录过程中创建,生成后将与登录响应 PDU(协议数据单元)一起发送给发起端。
15.8 更多信息 #
iSCSI 协议已面世多年。有许多评论将 iSCSI 与 SAN 解决方案作比较、评测性能,此外还有一份文档说明硬件解决方案。有关详细信息,请参见 https://www.open-iscsi.com/ 上的 Open-iSCSI 项目主页。
此外,请参见 iscsiadm
、iscsid
的手册页,以及示例配置文件 /etc/iscsid.conf
。