三種iSCSI target管理工具的比較

分類:IT技術 時間:2016-10-18

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, 效果如下圖:

wKioL1fj4eahiQ1CAAFf9nTAYEM268.png此時在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 服務器

文章來源:


ads
ads

相關文章
ads

相關文章

ad