1.
iSCSI简介
从协议层次的角度看,通常所说的SCSI通常是指一组包含块命令、控制器管理、系统命令和enclosure服务等内容的协议规范,对应于回话层;而其下的物理通道和链接方式就对应在数据链路层,SCSI命令可以通过串口、Fibre
Channel、SAS、infiniband、Internet、USB、PCIE等进行传输。iSCSI就是一种把异地存储资源通过TCP/IP网络映射到本地逻辑存储设备的SCSI实现。不同于NFS向用户提供按文件为单位访问远程存储的方式,它向用户提供了以块方式访问远程存储资源的接口,也就是说用户可以在本地/dev/下看到iSCSI映射后的磁盘。通常所说的target端是指远端存储资源所在的主机,比如存储服务器;而initiator端是指链接到target端并会访问远端存储资源的节点。
2.
iSCSI target管理工具的特点
基于iSCSI的网络属性,很直观地我们能想到它基本上是基于server-client模型。提供存储资源的target相当于server,而使用远程存储资源的initiator端相当于client。基于现有的iSCSI协议规范,能够开发出target端和initiator端工具。在Linux系统上,initiator端工具可以用iscsiadm,目前大部分os都自带有这款工具;而target端的工具由于直接和性能和存储管理相关,数量更多,目前常见的有targetcli、targetadm、ietadm,它们各有所长,分别能适用不同的场合。
2.1小巧玲珑的LIO
targetcli
相对而言,targetcli是最新的target管理工具,内核态基于Linux
2.6.38开始引入的Linux
IO Target,用户态提供了targetcli命令和python开发库rtslib,为用户提供了友好的操作界面。为此,现在大部分Linux
OS发现版本默认都自带了LIO
targetcli。在缺省没有安装的linux
OS上,用户可以参考下面的命令进行安装:
yum
install targetcli.noarch
如果重启后,发现target异常,需要检查下面两个后台服务是否开启:
systemctl
start targetd.service
systemctl
start target.service
在target管理方面,用户既可以使用下面的界面进行LUN的创建删除等操作:
[[email protected]
usr]# targetcli
targetcli
shell version 2.1.fb37
Copyright
2011-2013 by Datera, Inc and others.
For
help on commands, type ‘help‘.
/>
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-
iscsi
............................................................................................................
[Targets: 0]
o-
loopback
.........................................................................................................
[Targets: 0]
也可以参考下面的步骤一步一步用shell命令或者脚本进行创建(当然还可以用python
rtslib直接进行二次开发):
#!/bin/bash
##
Clean original setting
targetcli
clearconfig confirm=True
#
Remove all original config #
targetcli
clearconfig confirm=True
targetcli
/backstores/block create ssd_vol1 /dev/sdc3
#targetcli
/iscsi create
iscsiname=`targetcli
/iscsi create | grep "Created" | head -n1 | awk ‘{print
$3}‘`;
iscsiname=${iscsiname%.*}
echo
"Hi, iscsiname is $iscsiname"
#
/backstores/block/my_vol1
targetcli
/iscsi/${iscsiname}/tpg1/luns create /backstores/block/ssd_vol1
targetcli
/iscsi/${iscsiname}/tpg1 set attribute authentication=0
demo_mode_write_protect=0 generate_node_acls=1
targetcli
/iscsi/${iscsiname}/tpg1/portals delete 0.0.0.0 3260
[[
$? != 0 ]] && targetcli /iscsi/${iscsiname}/tpg1/portals/
delete 0.0.0.0 3260 confirm=True
targetcli
/iscsi/${iscsiname}/tpg1/portals create 192.168.1.115 3260
2.2功能完备的tgtadm
在LIO出现之前,tgtadm是首选的target管理工具,被用到企业存储解决方案当中。除了LUN管理、ACL控制等功能之外,它还提供了对已连接上的initiator的检测和iSNS服务的支持。虽然界面没法和LIO的targetcli相比,但是不乏功能强大的命令来完成各种操作。
用户可以通过下面的命令来安装它:
yum
install scsi-target-utils.x86_64
同样tgtadm后台依赖于tgtd的默默运行,虽然你可以打开debug选项来调试。
下面给出了常用命令的一些例子:
创建一个target:
tgtadm
--lld iscsi --op new --mode target --tid 2 -T
iqn.2016-09.com.sborst:storage.sdc3
往target里面新建一个lun:
tgtadm
--lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sdc3
用下面的命令可以显示刚创建的target和lun:
tgtadm
--lld iscsi --op show --mode target
在target端可以通过类似下面的命令来添加portal信息:
tgtadm
--lld iscsi --op new --mode portal --param portal=10.1.1.111:3260
添加ACL列表:
tgtadm
--lld iscsi --op bind --mode target --tid 2 -I ALL, 效果如下图:
此时在initiator端发现能扫描并连接到两个target上去。
设置target的CHAP:
A.新建一个CHAP账户
tgtadm
--lld iscsi --op new --mode account --user test --password abc123
绑定该用户到target
2:
tgtadm
--lld iscsi --op bind --mode account --tid 2 --user test
此时可以看到Target
2里面的user
account 已经有test了
B.看chap是否工作,在远端测试initiator能否再次登录到targte2上:
发现有CHAP的target
2不能登录,而没有设置CHAP的target1照常可以登录成功。
删除一个lun:
(注意所有target的lun0不能删去,lun0是系统默认的配置信息)
tgtadm
--lld iscsi --op delete --mode logicalunit --tid 2 --lun 1
完了用命令tgtadm
--lld iscsi --op show --mode target 可以看到target2的卷少了一个。
删除一个target:
运行下面的命令可以删除target
2: tgtadm --lld iscsi --op delete --mode target --tid 2
用tgtadm
--lld iscsi --op show --mode target命令检查会发现target2不见了。
2.3精益求精的ietadm
tgtadm创建的SCSI设备实际都是在用户态中实现的,存在性能瓶颈。为了解决这个问题,企业级别的target管理工具((iSCSI
Enterprise Target) 营运而生,它依赖内核模块iscsi_trgt.ko来帮助iSCSI设备的创建。此外,ietadm提供了以配置脚本的方式来设置和管理target及权限,还提供了显示discovery列表的功能。
从https://sourceforge.net/projects/iscsitarget/files/latest/download?source=typ_redirect
载到源代码之后,整个目录是这个样子的:
[[email protected]
iscsitarget-1.4.20.2]# ls
ChangeLog
dkms.conf etc iscsitarget.spec Makefile README
README.mcs RELEASE_NOTES
COPYING
doc include kernel patches README.initiators
README.vmware usr
用户可以make
&& make install, 然后make生成ietadm和它依赖的后台服务ietd。接着启动ietd服务后,就可以创建自己的LUN和ACL了。根据http://czmmiao.iteye.com/blog/2055805的描述,还有许多脚本可以用来控制哪些initiator可以discovery
target,可以参考下面的描述:
/etc/init.d/iscsi-target
iscsitarget的启动脚本
/etc/ietd.conf
iscsitarget的配置文件
/etc/initiators.allow控制initiator对target的访问权限。
/etc/initiators.deny控制initiator对target的访问权限。
/etc/iet/targets.allow控制不同target的被访问权限。
/etc/ietd.conf
Target
iqn.2001-04.com.example:storage.disk2.sys1.xyz
Lun
0 Path=/dev/sda1,Type=fileio
Alias
lun0
大致说明:
Target
iqn.2001-04.com.example:storage.disk2.sys1.xyz 表示该ISCSI
Target 的命名,命名在同一子网内应该是唯一的,标准命名方式为:
"Target
"+ target名字 (格式如下:iqn.yyyy-mm.<reversed
domain name>[:identifier] )
“Lun 0
Path=/dev/sda1”表示块设备号为0,映射的磁盘为/dev/sda1。
本次配置中Type的设定为"fileio",当然也可以针对需要设置为:"file"
or
"LVM"。
除此之外还有很多其他参数可以设置,具体参考:
http://manpages.ubuntu.com/manpages/hardy/man5/ietd.conf.5.html
2.4 三种iSCSI
target管理工具的使用对比
通过上面的介绍和举例,我们不难看到三种工具各有优劣,区别如下:
安装包 |
前端工具 |
后台服务 |
性能 |
登录历史 |
功能 |
iSNS |
|
LIO targetcli |
targetcli.noarch |
Targetcli |
Target; targetd |
好,2.6.38+原生内核支持 |
不记录initiator 登录信息 |
ACL控制 |
不支持 |
STGTT targetadm |
scsi-target-utils.x86_64 |
Tgtadm |
tgtd |
不好,用户态模拟设备 |
记录登录initiator名称 |
ACL; Tags; |
支持 |
STGT ietadm |
Iscsitarget-1.4.20.2 |
Ietadm |
Ietd |
好,有内核驱动模拟iSCSI设备 |
记录登录initiator名称及一些discovery信息 |
ACL; Tags; Disk 基于配置文件的管理 |
支持 |
3.总结
根据上面的介绍可以看到,实现target管理有多中工具,每种工具都各有千秋,这就要求在实际工作中充分考虑到当前项目和长期客户需求,合理选择最适合自己的iscsi
target 套件。
4.参考文档和链接
https://github.com/agrover/targetcli-fb
SCSI
target framework (tgtadm)
http://www.bubuko.com/infodetail-1152038.html
http://www.linuxidc.com/Linux/2015-03/114323.
http://www.linuxidc.com/Linux/2012-08/67740.htm
https://github.com/konis/tgt/blame/master/doc/README.passthrough
http://blog.chinaunix.net/uid-30212356-id-5520545.html
https://github.com/fujita/tgt
http://iscsitarget.sourceforge.net/
https://sourceforge.net/projects/iscsitarget
https://www.ibm.com/developerworks/community/blogs/5144904d-5d75-45ed-9d2b-cf1754ee936a/entry/linux_io_target%25e4%25bb%258b%25e7%25bb%258d_%25e4%25b8%2580?lang=en
http://czmmiao.iteye.com/blog/2055805