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的創建刪除等操作:
[root@localhost 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
載到源代碼之後,整個目錄是這個樣子的:
[root@localhost 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 ID ;
基於配置文件的管理
支持
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
本文出自 “存儲之廚” 博客,請務必保留此出處http://xiamachao.blog.51cto.com/10580956/1855611
Tags: Internet 管理工具 target python 服務器
文章來源: