iSCSI原理和實現

數據往往是應用程序(架構)核心,那麼如何存儲數據就非常重要。

一、常見的存儲技術(存儲架構)

1、DAS(Direct Attacted Storage 直接附加存儲)

顧名思義,直接附加存儲就是將存儲直接附加在應用服務器中來實現數據的存儲。存儲設備是通過接口類型於應用程序服務器連接的。

常見的接口類型有:

IDE (並行):數據可能有干擾 理論:133MB/s。早期是叫做ATA

SATA (串行)II: 3Gbps III: 6Gbps

    IDE速度慢,出現了SCSI(Smal System System Interface)。

SCSI接口:

    UltraSCSI-320:320MB/s

    UltraSCSI-640:640MB/s

SAS: 6Gbps

USB,sSATA,1394

現在直連式存儲與服務器主機之間的連接通道通常採用SCSI協議連接

2、NAS(Network Attacted Storage 網絡附加存儲)

一般說來,NAS是文件服務器。像NFS,Samba等。提供文件級別的共享。

3、SAN(Storage Aere Network 存儲區域網絡)

簡單的來說就是藉助於網絡來傳輸SCSI協議報文。 操作系統中的內核中有對應的scsi模塊。藉助於隧道模式將 SCSI 報文傳輸出去。還需要底層的硬盤接口虛擬爲scsi接口。

二、SCSI之間的通信模型

SCSI之間通信是一種C/S架構。

客戶端:

叫做Initator(發起者 C)

服務端:

這裏稱之爲Target:(目標 S),每個Target可包含多個LUN(Logical Unit Number 邏輯單元)。真正提供服務的是LUN。

下圖是SCSI協議之間通信的過程:

2

1

三、操作系統如何識別SCSI協議的報文(設別協議的過程)

操作系統接收到SCSI報文後,請求數據(讀寫)的過程如下:

內核空間:系統調用 --》 虛擬文件系統 --》 文件系統 --》 buffer cache --》 驅動 --》 SCSI接口

用戶空間:通過GNU c library 調用內核空間的系統調用

如下圖:

3

所謂iSCSI是利用tcp/ip協議來傳輸SCSI報文的一種機制。

四、DIY(Do It Youself) iSCSI

說明:

172.166.10.16 Target端

在服務端:

### Target端:(172.16.10.16)
1、準備要共享的設備,這裏使用本地磁盤上的新分區代替(只需要分區,不需要格式化即可)
fdisk /dev/sda
partx -d /dev/sda
partx -a /dev/sda

10


準備好共享磁盤後,繼續以下的操作:

2、安裝iscsi服務端:
yum -y install scsi-target-utils
service tgtd start
chkconfig tgtd on
netstat -tnlp | grep 3260

11

服務端的配置,可以使用命令方式,也可使用配置文件的方式。

使用tgtadm命令方式配置SCSI服務:

tgtadm命令的介紹:

tgtadm 是一個模式化的命令
使用格式:tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...
常見的模式(mode):target logicalunit account
#####################################################
target模式的管理命令:管理target
	new:創建一個新的 target
	show:顯示target
	delete:刪除target
	update:更新(修改)target
	bind:基於IP地址控制
	unbind:解除綁定
#####################################################
logicalunit模式的管理命令:關聯tid和後端磁盤
	new:創建一個新的LUN
	deltete:刪除一個已有的LUN
#####################################################
account模式的管理命令:管理account CHAP(挑戰式握手應用) 單向認證 
	new
	deltete
	bind
	unbid
#####################################################
target和Initator之間是通過iqn名稱來通信的
iqn格式名稱:
	iqn.yyyy-mm.reverse-domaim-name:string[.sunstring]
例如:iscsi-iname -p iqn.2014-09.com.magedu.target

也可通過命令的生成的方式:iscsi-iname -p iqn.2014-09.com.magedu
#####################################################
示例:
# (1)、添加一個新的 target 且其ID爲 [id], 名字爲 [name].
--lld [driver] --op new --mode target --tid=[id] --targetname [name]

# (2)、顯示所有或某個特定的target:
--lld [driver] --op show --mode target [--tid=[id]]

# (3)、向某ID爲[id]的設備上添加一個新的LUN,其號碼爲[lun],且此設備提供給initiator使用。
## [path]是某“塊設備”的路徑,此塊設備也可以是raid或lvm設備。lun0已經被系統預留。
--lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]

# (4)、刪除ID爲[id]的target:
--lld [driver] --op delete --mode target --tid=[id]

# (5)、刪除target [id]中的LUN [lun]:
-lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]

# (6)、定義某target的基於主機的訪問控制列表,其中,[address]表示允許訪問此target的
#  initiator客戶端的列表:
--lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]

# (7)、解除target [id]的訪問控制列表中[address]的訪問控制權限:
--lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]

通過tgtadm命令提供SCSI服務:

步驟如下:
# 創建一個target:
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2014-09.com.magedu:test2
# 創建LUN,號碼爲1:
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5

# 開放給172.16.0.0/16網絡中的主機訪問:
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 172.16.0.0/16
其中的-I相當於--initiator-address


13

創建完成後,可以使用如上圖的命令查看,查看正確後,服務端配置完成。

在客戶端:

這裏使用的地址是:172.16.10.22

客戶端配置(Initiator):
yum install iscsi-initiator-utils # 客戶端管理工具

# 以下配置是非必需的,默認情況下,會有一個默認的iqn名稱
echo "InitiatorName=`iscsi-iname -p iqn.2014-09.com.magedu`" >  \
  /etc/iscsi/initiatorname.iscsi
echo "InitiatorAlias=initiator1" >> /etc/iscsi/initiatorname.iscsi

service iscsi start
chkconfig iscsi on

客戶端Initator使用iscsiadm命令來發現,登陸設備。

iscsiadm命令的介紹:

iscsiadm是個模式化的工具,其模式可通過-m或--mode選項指定,常見的模式有discovery、
    node、fw、session、host、iface幾個。
如果沒有額外指定其它選項,則discovery和node會顯示其相關的所有記錄;
session用於顯示所有的活動會話和連接
fw顯示所有的啓動固件值
host顯示所有的iSCSI主機
iface顯示/var/lib/iscsi/ifaces目錄中的所有ifaces設定。

# 用法如下:
iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] \
      [ -I iface -t type -p ip:port [ -l ] ] 
iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] \
 [ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] \
 [ -l | -u | -R | -s] ] [ [ -o operation ] 

# 參數說明:
-d, --debug=debug_level   顯示debug信息,級別爲0-8;
-l, --login
-t, --type=type  這裏可以使用的類型爲sendtargets(可簡寫爲st)、slp、fw和 isns,
    此選項僅用於discovery模式,且目前僅支持st、fw和isns;其中st表示允許每個iSCSI target
    發送一個可用target列表給initiator;
-p, --portal=ip[:port]  指定target服務的IP和端口;
-m, --mode op  可用的mode有discovery, node, fw, host iface 和 session
-T, --targetname=targetname  用於指定target的名字
-u, --logout 
-o, --op=OPEARTION:指定針對discoverydb數據庫的操作,其僅能爲new、delete、update、show
   和nonpersistent其中之一;
-I, --interface=[iface]:指定執行操作的iSCSI接口,這些接口定義在/var/lib/iscsi/ifaces中;

通過iscsiadm命令發現target命令:

iscsiadm -m discovery -t sendtargets -p 172.16.10.16
iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16 -l

14

登陸成功後,在客戶端會發現多了一塊磁盤,可以向本地磁盤一樣,分區、格式化、掛載使用。

15

16 

完成掛載使用。

Target端使用配置文件配置:

一般情況下,在服務端是使用配置文件。使用命令式爲了更好的瞭解Target端的工作模式。

# 配置文件/etc/tgt/targets.conf 

<target iqn.2014-09.com.magedu:test2>
   backing-store /dev/sda5
  initiator-address 172.16.0.0/16
</target>

如果客戶端不想使用的話,可以登出

iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16  -u
iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16  -o delete
# 必要的時候,使用
rm -rf -rf /var/lib/iscsi/send_targets/*

補充: 

創建服務端誰所需要的帳號,並實現單方向的認證:

1、在target端創建帳號christina,併爲其授予訪問某tid的權限:
# tgtadm --lld iscsi --op new --mode account --user mageedu --password 123456

接下來還要將用戶與某target進行綁定:
# tgtadm --lld iscsi --op bind --mode account --tid 1 --user mageedu
# tgtadm --lld iscsi --op show --mode account

2、編輯initiator端主配置文件,配置客戶端登錄target時使用此帳號和密碼:
# vim /etc/iscsi/iscsid.conf

取消如下項的註釋:
# node.session.auth.authmethod = CHAP
# node.session.auth.username = username
# node.session.auth.password = password

而後,將後兩項的用戶名密碼設置爲target端設置的用戶名和密碼:
node.session.auth.username = mageedu
node.session.auth.password = 123456

哪果此前尚未登錄過此target,接下來直接發現並登入即可。否則,則需要按照下面的第三步實
  現認證的啓用。

3、如果initiator端已經登錄過此target,此時還需要先註銷登錄後重啓iscsid服務,並在刪除此
   前生成的database後重新發現target,並重新登入,過程如下:

# iscsiadm -m session -r sid -u

# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 172.16.10.16:3260 -u
# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 172.16.10.16:3260 -o delete
# rm -rf -rf /var/lib/iscsi/send_targets/172.16.10.16:3260
# service iscsid restart

# iscsiadm -m discovery -t sendtargets -p 192.168.0.11
# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 -l

說明:其中的target名字和target主機地址可能需要按照您的實際情況修改。

 

配置完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章