一、iscsi的概念
iSCSI是一种在Internet协议上,特别是以太网上进行数据块传输的标准,它是一种基于Ip Storage理论的新型存储技术,该技术是将存储行业广泛应用的SCSI接口与IP网络技术相结合,可以在IP网络上构建SAN存储区域网络,简单地说,iSCSI就是在IP网络上运行SCSI协议的一种网络存储技术。
二、iSCSI的工作原理
要理解iSCSI的工作原理,就必须知道iSCSI的层次结构。根据OSI模型,iSCSI的协议自顶向下一共可以分为三层,从initiator端到target端,数据要进过封装-->IP网络传输-->解封装
如图是iSCSI的封装:最上层为二层以太网帧,中间为三层TCP/IP封装,最下面为iSCSI的封装
iSCSI protocal的封装格式
SCSI层:根据客户端发出的请求建立SCSI CDB(命令描述块),并传给iSCSI层。同时接收来自iSCSI层的CDB,并向应用返回数据。
iSCSI层:对SCSI CDB进行封装,以便能够在基于TCP/IP协议的网络上进行传输,完成SCSI到TCP/IP的协议映射。这一层是iSCSI协议的核心层。本章也主要针对这一层的配置和管理进行介绍。
TCP/IP层:对IP报文进行路由和转发,并且提供端到端的透明可靠的传输。
过程: iSCSI协议定义了在TCP/IP网络发送、接收数据块存储数据的规则和方式。先发送端将SCSI命令和数据封装到TCP/IP包中,然后通过IP网络转发,接收端收到TCP/IP包之后,将其还原为SCSI命令和数据并执行,执行完成后,将返回的SCSI命令和数据再封装到TCP/IP包中,之后再传回发送端。这样就完成了数据传输的整个过程。
iSCSI的整个数据传输过程在用户看来是完全透明的,用户使用远端的存储设备就像使用本地的硬盘设备一样。不过,这只是理论状态,实际上iSCSI的数据传输速率并不能完全达到本地硬盘的数据传输速率,但差别并不明显。而且这种网络存储模式还有一个优点是安全性高,这对于数据集中存储的iSCSI来说显然非常重要。
三、iSCSI的组成
一个简单的iSCSI系统大致由以下部分组成:
iSCSI Initiator或者iSCSI HBA
iSCSI Target
以太网交换机
一台或者多台服务器
一个完整的iSCSI系统的拓扑结构:
图7-1 完整的iSCSI系统拓扑结构
1.iSCSI的initiator有三种:
1:HBA卡,采用内键的SCSI指令及TOE引擎的ASIC芯片的适配卡价格最贵,性能最好,消耗CPU很少
如图:
2:内键的TOE引擎的ASIC芯片适配卡,由于SCSI指令任然以软件方式运行,所以任然会消耗一定的CPU资源,但价格相对便宜
如图
3:完全由软件驱动的initiator,会消耗大量的CPU资源,性能差
2、iSCSITarget
一个可以用于存储数据的iSCSI磁盘阵列或者具有iSCSI功能的设备都可以被称为“iSCSI Target”,因为大多数操作系统都可以利用一些软件将系统转变为一个“iSCSI Target”。本章重点讲述如何构建一个PC构架的iSCSI存储系统。所谓PC构架就是选择一个普通的、性能优良的、可支持多块磁盘的PC(一般为PC服务器),再选择一款相对成熟稳定的iSCSI Target软件,将iSCSI Target软件安装在PC服务器上,使普通的PC服务器转变成一台iSCSI存储设备,并通过PC服务器的以太网卡对外提供iSCSI数据传输服务。
目前大多数iSCSI Target软件都是收费的,例如DataCorc Software的SANmelody,FalconStor Software的iSCSI Server forWindows等,这些都是Windows平台支持的。不过,也有一些Linux平台的开源iSCSI Target软件,例如iSCSI Enterprise Target,后面的内容会重点介绍这个软件。
利用iSCSI Target软件,可以将服务器的存储空间分配给客户机使用,客户机可以像使用本地硬盘一样使用iSCSI磁盘,包括对其进行分区、格式化及读写等。而且每个客户端都可以向iSCSI磁盘写数据,互不干扰,并且不会破坏存储到服务器中的数据。同时,iSCSITarget软件对用户权限控制非常灵活,支持配置文件。
我们知道,iSCSI是使用TCP/IP协议进行通信的,因此,将iSCSI两端连接起来,仅仅需要一个以太网络就可以了。由此可知,iSCSI的存储性能和这个以太网络有直接关系,所以最好在iSCSI网络中使用千兆以太网交换机,劣质的网络设备会严重影响存储系统的性能,也就是说,要为每个服务器配备高质量的千兆以太网交换机,并提供两个连接。对于iSCSI Target,应该为每个独立阵列中的两个独立端口配备交换机,最后将交换机连接起来,采用这种配置方式,即使两个交换机中的一个出现了故障,整个iSCSI存储系统仍然能够正常工作,这保证了存储系统的不间断运行。
如图为一个SAN架构图:
四、iscsi的安装配置
· 实验环境:
操作系统:CentOSLinux release 7.2.1511 (Core)
iSCSI Target:scsi-target-utils-1.0.55-4.el7.x86_64
iSCSI Initiator:iscsi-initiator-utils-6.2.0.873-35.el7.x86_64;由软件驱动的initiator
target安装配置:
1.准备好提供存储的磁盘(实验环境可以使用分区),注意磁盘或者分区不要格式化
2.在target端安装服务:
[root@localhost ~] #yum -y install scsi-target-utils
[root@localhost ~]# rpm -ql scsi-target-utils | less
/etc/sysconfig/tgtd
/etc/tgt/conf.d/sample.conf
/etc/tgt/targets.conf
/etc/tgt/tgtd.conf
/usr/lib/systemd/system/tgtd.service
/usr/sbin/tgt-admin(会自动读取tgtd.conf文件中的定义)
/usr/sbin/tgt-setup-lun
/usr/sbin/tgtadm(命令行的工具)
/usr/sbin/tgtd
/usr/sbin/tgtimg
3.启动服务
systemctl start tgtd,
设置开机自启动
systemctl enable tgtd
4.创建lun
tgtadm
三种模式:
target,logicalunit,account
1.target --op
new,delete,show,update,bind,unbind
2.logicalunit --op
new,delete
3.account --op
new,delete,bind,unbind
--lld,-L
--tid,-t
--lun,-l
--backing-store
--initiator-address ,-I
tid0是保留给当前主机的,自己不要使用
lun应该是某个target的lun,对应一个分区,lvm,硬盘
创建一个target
[root@localhost ~]# tgtadm --lld iscsi --mode target --op new --targetname iqn.2017-5.com.luxiangyu:teststore.disk1 --tid 1
[root@localhost ~]# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2017-05.com.luxiangyu:teststore.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, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
Account information:
ACL information:
基于target创建多个LUN
[root@localhost ~]# tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb
[root@localhost ~]# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2017-05.com.luxiangyu:teststore.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, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 107374 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: rdwr
Backing store path: /dev/sdb
Backing store flags:
Account information:
ACL information:
5.绑定ACL
[root@localhost ~]# tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address 172.17.0.0/16
[root@localhost ~]# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2017-05.com.luxiangyu:teststore.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, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 107374 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: rdwr
Backing store path: /dev/sdb
Backing store flags:
Account information:
ACL information:
172.17.0.0/16
也可以解除绑定
initiator安装配置:
1.安装
[root@localhost ~]# yum -y install iscsi-initiator-utils
每个initiator也有一个名字,可以利用命令iscsi-iname
2.查看现在的iscsi-iname:
[root@localhost ~]# iscsi-iname
iqn.1994-05.com.redhat:be65954ff6f
利用命令生成:
[root@localhost ~]# iscsi-iname -p iqn.2017-05.com.luxiangyu
iqn.2017-05.com.luxiangyu:21bb2a55199
直接生成并保存至相关的配置文件中:
[root@localhost ~]# echo "InitiatorName=`iscsi-iname -p iqn.2017-05.com.luxiangyu`" > /etc/iscsi/initiatorname.iscsi
并且可以添加别名:
Initiatoralias=node1.luxiangyu
3.启动服务
[root@localhost ~]# systemctl start iscsi
4.发现target并连接:
iscsiadm 模式化命令:
-m {discovery|node|session|iface}
discovery:发现某服务器是否有target输出,以及输出了那些target
node:管理和某target的关联关系
sesion:会话管理
iface:接口管理
iscsiadm -m discovery [ -d debug_level ] [ -I iface -t type -p ip:port ]
[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 172.17.107.42
172.17.107.42:3260,1 iqn.2017-05.com.luxiangyu:teststore.disk1
发现的主机target会被存放在/var/lib/iscsi/send_targets/
[root@localhost ~]# ls /var/lib/iscsi/send_targets/172.17.107.42,3260/
iqn.2017-05.com.luxiangyu:teststore.disk1,172.17.107.42,3260,1,default st_config
5.登入
[root@localhost ~]# iscsiadm -m node -T iqn.2017-05.com.luxiangyu:teststore.disk1 -p 172.17.107.42 -l
Logging in to [iface: default, target: iqn.2017-05.com.luxiangyu:teststore.disk1, portal:172.17.107.42,3260] (multiple)Login to [iface: default, target: iqn.2017-05.com.luxiangyu:teststore.disk1, portal: 172.17.107.42,3260] successful.
6.格式化识别的硬盘并测试使用
查看现在的硬盘数量:(可以发现多了一块硬盘)
[root@localhost ~]# fdisk -l
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a4424
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 4605951 2097152 82 Linux swap / Solaris
/dev/sda3 4605952 209715199 102554624 83 Linux
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
格式化:
[root@localhost ~]# mke2fs -t ext4 /dev/sdb
[root@localhost ~]# mount /dev/sdb /opt
[root@localhost ~]# cp anaconda-ks.cfg /opt
共享磁盘,但是单机文件系统,同时编辑同一个文件可能会造成系统崩溃,所以多个initiator链接同一target时应使用
五、认证
客户端认证方式:
1.基于IP
2.基于用户,CHAP(双向认证)
编辑配置文件/etc/iscsi/iscsid.conf实现认证
1.target认证initiator
[root@localhost iscsi]# vim /etc/iscsi/iscsid.conf
#node.session.auth.authmethod = CHAP
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
#node.session.auth.username = username
#node.session.auth.password = password
2.initiator验证target
# To set a CHAP username and password for target(s)
# authentication by the initiator, uncomment the following lines:
#node.session.auth.username_in = username_in
#node.session.auth.password_in = password_in
open-iscsi不支持discover时认证,所以关于discovery认证无效。
另外基于用户名密码的认证必须以基于IP的认证为前提 (既前面的绑定ACL的步骤)
基于CHAP中用户名密码登陆:
1.initiator端登出target
[root@localhost iscsi]# iscsiadm -m node -T iqn.2017-05.com.luxiangyu:teststore.disk1 -p 172.17.107.42 -u
2.initiator端删除相关的数据库
[root@localhost iscsi]# iscsiadm -m node -T iqn.2017-05.com.luxiangyu:teststore.disk1 -p 172.17.107.42 -o delete
[root@localhost iscsi]# rm -rf /var/lib/iscsi/send_targets/172.17.107.42,3260/
3.target端解除相关ip的绑定规则:
[root@localhost ~]# tgtadm --lld iscsi --mode target --op unbind --tid 1 --initiator-address 172.17.0.0/16
[root@localhost ~]# tgtadm --lld iscsi --mode target --op show
outgoing 账号指绑定用来让客户端验证服务器端的账号密码
[root@localhost ~]# tgtadm --lld iscsi --mode account --op new --user iscsiuser --password iscsiuser
[root@localhost ~]# tgtadm --lld iscsi --mode account --op bind --tid 1 --user iscsiuser [root@localhost ~]# tgtadm --lld iscsi --mode account --op show
Account list:
iscsiuser
4.服务可用性:保证服务在重启后根据配置文件自动启动target
initiator端在服务重启后会自动连接target;
target服务重启后会读取/etc/tgt/target.conf 文件中的定义
[root@localhost tgt]# cat targets.conf
vendor_id luxinagyu
lun 6
vendor_id luxinagyu
lun 7
incominguser iscsiuser iscsiuser
initiator-address 172.17.0.0/16