iSCSI(Internet Small Computer System Interface)技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。
iSCSI和iSCSI/FC的对比:
左图是基于系统的iSCSI,也就是没有使用到HBA卡的情况,iSCSI的处理由主机cpu来完成,网卡只做基于tcp/ip通信的用处,我们等下做的就是这种。而右图是服务器上连接到IP存储设备使用HBA(Host Bus Adaptor)卡,HBA卡是一个在服务器和存储设备之间提供输入/输出处理和物理连接的适配器,通俗点讲也就是iSCSI网卡,HBA减轻了主处理器在数据存储和检索任务的负担,所以它能够提高服务器的性能。下图为PCI双口iSCSI-FC
iSCSI分为target端和initiator端,target端导出块设备给initiator端来访问,target的命名规则如下:
iqn.<yyyy-mm>.<tld.domain.some.host>[:<identifier>]
例:iqn.2007-01.com.example.sswans:disk1
我们使用两台机器来完成,在机器1(ip:192.168.0.3)上安装target端需要的包scsi-target-utils
[root@sSWans ~]# tgtadm -L iscsi -m target -o new -t 1 -T iqn.2010-10.com.sswans:disk1
[root@sSWans ~]# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 -b /dev/sda5
[root@sSWans ~]# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 2 -b /dev/sda6
[root@sSWans ~]# tgtadm -L iscsi -m target -o bind -I ALL 设置ACL信息,ALL表示所有的ip,当然也可以写单个ip或者网段
-L = --lld -m = --mode -o = --op -t = --tid -T = --targetname -l = --lun -b = --backing-store -I = --initiator-address
做好之后查看到target信息如下:
[root@sSWans ~]# tgt-admin -s
Target 1: iqn.2010-10.com.sswans:disk1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: None
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 1081 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /dev/sda5
LUN: 2
Type: disk
SCSI ID: IET 00010002
SCSI SN: beaf12
Size: 16 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /dev/sda6
Account information:
ACL information:
ALL
为了让机器重启后,tgt能自动启动,需要chkconfig tgtd on,并且执行如下操作保存刚才的target端配置
[root@sSWans ~]# tgt-admin -dump > /etc/tgt/targets.conf
在机器2(ip:192.168.0.2)上安装好initiator端需要的包iscsi-initiator-utils
initiator端访问target端会在本机存储一个database,有两个表,路径在/var/lib/iscsi/下面的sendtargets和nodes。等连上了target端后,看看这两目录下的文件,你能发现更多可以让你的思路更清晰的信息。
[root@desktop ~]# iscsiadm -m discovery -t st -p 192.168.0.3
[root@desktop ~]# iscsiadm -m discoverydb -t st -p 192.168.0.3
[root@desktop ~]# iscsiadm -m node -l
[root@desktop ~]# iscsiadm -m session -P 3
CHAP认证
CHAP Initiator Authentication
单向挑战认证,target端配置用户名和密码作为认证的凭据,initiator端使用target端设置用户名和密码来进行连接
[root@sSWans ~]# tgtadm -L iscsi -m account -o new -u sswans -p redhat
[root@sSWans ~]# tgtadm -L iscsi -m account -o bind -t 1 -u sswans
-u = --user -p = --password
[root@desktop ~]# vim /etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP
node.session.auth.username = sswans
node.session.auth.password = redhat
因为之前没有基于chap认证时连接过target端,所以要先清除掉/var/lib/iscsi/下的send_targets和nodes目录里的数据。
CHAP Target Authentication
[root@sSWans ~]# tgtadm -L iscsi -m account -o new -u abc -p 123
[root@sSWans ~]# tgtadm -L iscsi -m account -o bind -t 1 -u abc --outgoing
[root@desktop ~]# vim /etc/iscsi/iscsid.conf
node.session.auth.username_in = abc
node.session.auth.password_in = 123
windows下也可以使用iscsi客户端Microsoft iSCSI Initiator来连接target