Internet小型计算机系统接口(iSCSI)是用于连接存储设备的基于IP的标准。iSCSI使用IP网络封装SCSI命令,从而允许长距离传输数据。iSCSI提供了许多客户端系统之间的共享存储。存储设备已连接到服务器(目标)。客户端系统(启动器)通过IP网络访问远程存储设备。对于客户端系统,存储设备似乎是本地连接的。iSCSI使用现有的IP基础结构,并且不需要任何额外的布线,就像光纤通道(FC)存储区域网络一样。
配置iSCSI服务器
RHEL / CentOS 7将Linux-IO(LIO)内核目标子系统用于iSCSI。除iSCSI外,LIO还支持多种存储结构,包括以太网光纤通道(FCoE),Mellanox InfiniBand网络(iSER)上的iSCSI访问以及Mellanox InfiniBand网络(SRP)上的SCSI访问。在RHEL 7中,所有存储结构都使用targetcli实用程序进行管理。
要将RHEL系统配置为iSCSI服务器,请先安装targetcli软件包:
# yum install targetcli
安装targetcli软件包还会安装python-rtslib软件包,该软件包提供了/usr/lib/systemd/system/target.service文件。在使用targetcli实用程序创建,删除和查看存储目标之前,请使用systemctl命令在iSCSI服务器上启用和启动目标服务。
# systemctl enable target
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.
# systemctl start target
targetcli实用程序
targetcli实用程序是用于创建,编辑和查看内核目标子系统配置的管理外壳。运行targetcli进入配置外壳。
# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> help
从targetcli提示符运行help命令以查看可用命令。以下是一些可用的targetcli命令:
- ls:查看对象层次结构。
- cd:遍历对象层次结构。
- create:创建存储对象,目标,LUN,网络门户,访问控制列表。
- exit:退出targetcli shell并自动保存配置。
您也可以输入“ targetcli [command]”来运行命令,而无需进入外壳。
后台存储
后台存储是内核目标用来“支撑”其导出到客户端系统的SCSI设备时使用的各种本地存储资源。每个后备存储创建的到本地存储资源的映射称为存储对象。使用targetcli ls命令列出不同类型的Backstore。
# targetcli ls /backstores
后台存储的类型描述如下:
- block:Linux块设备,例如/ dev / sda
- fileio:已挂载文件系统上的任何文件,例如/tmp/disk1.img
- pscsi:任何支持传递SCSI命令的存储对象
- ramdisk:内存复制RAM磁盘
要从targetcli Shell创建块后台存储:
/> cd /backstores/block
/backstores/block> create name=LUN_1 dev=/dev/xvdb
要从targetcli Shell创建Fileio Backstore:
/> cd /backstores/fileio
/backstores/fileio> create LUN_3 /root/disk1.img 5G
创建iSCSI目标
要从targetcli Shell创建iSCSI目标,请使用cd命令更改为/ iscsi目录。
/> cd /iscsi
/iscsi>
使用不带任何参数的create命令通过使用默认目标名称创建iSCSI目标。默认情况下,目标由“ iqn ”标识符标识。这是iSCSI合格名称(IQN),用于唯一标识目标。IQN格式地址最常用于标识目标。该地址包含以下字段:
- 文字智商
- 命名机构获得域所有权的日期(以yyyy-mm格式)
- 机构的反向域名
- 可选“:”前缀由命名机构指定的存储目标名称
/> cd /iscsi
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.user.x8664:sn.b0df6e328beb.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi>
要列出创建的目标,请使用以下命令。
# targetcli ls /iscsi
要允许远程系统访问端口3260上的iSCSI目标,请禁用iSCSI服务器上的firewalld服务或将firewalld配置为信任3260 / tcp端口。以下示例使用firewall-cmd打开firewalld服务的3260 / tcp端口。
# firewall-cmd --permanent --add-port=3260/tcp
如果在添加端口时包括–permanent选项,请使用firewall-cmd命令重新加载配置。
# firewall-cmd –reload
创建iSCSI LUN
内核目标将SCSI逻辑单元导出到远程系统。使用targetcli Shell将先前定义的存储对象与目标链接,并指定设备使用的逻辑单元号(LUN)。以下示例使用create命令为目标创建两个新的LUN。在targetcli外壳程序中,首先使用cd命令更改为[target / TGP]层次结构中的luns目录。
/iscsi> cd /iscsi/iqn.2003-01.org.linux-iscsi.user.x8664:sn.b0df6e328beb/
/iscsi/iqn.20....b0df6e328beb> cd tpg1/luns
以下命令从先前定义的块存储对象创建LUN。
/iscsi/iqn.20...beb/tpg1/luns> create /backstores/block/LUN_1 lun1
Created LUN 1.
创建ACL
访问控制列表(ACL)限制从远程系统访问LUN。您可以为每个启动器创建一个ACL,以在启动器连接到目标时强制执行身份验证。这使您可以授予特定发起者对特定目标的独占访问权限。以下示例使用create命令为启动器创建ACL。在targetcli外壳程序中,首先使用cd命令更改为[target / TGP]层次结构中的acls目录。
/> cd /iscsi/iqn.2003-01.org.linux-iscsi.user.x8664:sn.b0df6e328beb/tpg1/acls
/iscsi/iqn.20...beb/tpg1/acls> create iqn.1994-05.com.redhat:aabb51a64012
Created Node ACL for iqn.1994-05.com.redhat:aabb51a64012
Created mapped LUN 1.
配置iSCSI启动器
要将Linux系统配置为iSCSI启动器,请安装iscsi-initiator-utils软件包。该软件包是Linux Open-iSCSI Initiator。
# yum install iscsi-initiator-utils
该软件包将安装几个文件,包括以下文件:
- /etc/iscsi/iscsid.conf:iscsid和iscsiadm读取的配置文件。该文件带有大量注释,其中包含每个配置指令的描述。
- / sbin / iscsid:实现控制路径和管理功能的Open-iSCSI守护程序
- / sbin / iscsiadm:用于发现和登录iSCSI目标的Open-iSCSI管理实用程序
编辑/etc/iscsi/initiatorname.iscsi文件,并将InitiatorName参数替换为您先前在目标上配置为ACL的启动器名称。在此文件中定义了一个默认的iscsi启动器名称。如果在配置ACL时使用了相同的名称,则无需在此处进行任何更改。
# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:aabb51a64012
使用systemctl命令启用和启动iscsid服务。
# systemctl enable iscsid
# systemctl start iscsid
iSCSI发现
发现是使启动程序知道目标的过程。以下示例使用SendTargets发现方法来发现IP地址192.168.12.13上的目标。如果需要,此命令还会启动iscsid守护程序。
# iscsiadm -m discovery --type sendtargets –p 192.168.12.13
发现之后,将更新数据库中的节点表和send_targets表:
# ls /var/lib/iscsi/nodes
iqn.2011-12.com.example.mypc:tgt1
iqn.2011-12.com.example.mypc:tgt2
iqn.2012-11.com.example.mypc:tgt3
# ls /var/lib/iscsi/send_targets
192.168.12.13,3260
iSCSI启动器会话
会话是发起方节点端口和目标节点端口之间的TCP连接。在建立会话之前,无法访问LUN。使用-l(或–login)选项建立会话:
# iscsiadm -m node -l
要登录到特定目标:
# iscsiadm -m node --targetname iqn.2011-12.com.example.mypc:tgt1 –p 192.0.2.102:3260 –l
使用-u(或–logout)选项关闭会话。要查看会话信息:
# iscsiadm -m session [-P [printlevel]]
打印级别为1、2和3。每个级别都显示更多详细信息。