您當前的位置:首頁 > 攝影

iSCSI的基本架構及操作簡介

作者:由 itworld123 發表于 攝影時間:2019-03-31

iSCSI是由IBM發明的基於乙太網的儲存協議,該協議與SUN的NFS協議都是為了解決儲存資源共享問題的解決方案。兩者意圖一致,只不過兩者是不同的實現方式,前者在客戶機上呈現的是一個塊裝置,而後者則是一個目錄樹。

關於兩者的區別,可以參考本號之前的文章,本位不再贅述

本文今天主要介紹一下iSCSI的整體架構,以及在Linux平臺上

啟動器端

(可以理解為客戶端,後續介紹該概念)如何實現對儲存裝置(系統)的配置和訪問。

整體架構概述

概括的說,iSCSI是一種儲存裝置遠端對映技術,它可以將一個遠端伺服器上的儲存裝置對映到本地,並呈現為一個塊裝置(大白話就是磁碟)。從普通使用者的角度,對映過來的磁碟與本地安裝的磁碟毫無差異。

iSCSI的基本架構及操作簡介

這種對映方式基於是基於SCSI協議的,SCSI協議是計算機與外圍裝置(例如硬碟、光碟等)通訊的協議。而iSCSI則是透過TCP協議對SCSI進行封裝的一種協議,也就是透過乙太網傳輸SCSI協議的內容。

iSCSI的基本架構及操作簡介

從上圖可以看出來,iSCSI其實也是一種典型的客戶端伺服器架構(CS架構),其中訪問儲存系統的計算機成為客戶端,其中負責連線的軟體成為

啟動器

。而提供儲存服務的計算機成為服務端,其中的軟體成為

目標器

由於iSCSI是基於TCP協議的,因此啟動器和目標器可以是純軟體實現,也可以基於硬體實現。如果是硬體實現,硬體實現主要是對SCSI命令封裝和解析等,這樣可以釋放CPU資源。目前在Linux下面,啟動器和目標器都有純軟體的實現,比如啟動器的實現Open-iSCSI,目標器的實現LIO、SCST和TGT等。

基本概念介紹

本節介紹關於iSCSI的一些基本概念,理解這些概念便於我們理解iSCSI的原理及後續閱讀iSCSI的開原始碼。

Network Portal

: 網路埠。網路實體的一個組成部分,它有一個 TCP/IP 地址。 網路埠在 initiator 用 IP 地址標識, 在 target 用 IP 地址+偵聽的 TCP 埠標識。

Session

: 連線 initiator 和 target 的一組 TCP 連線構成一個 session(可以簡單理解為 I_T nexus)。可以向 session 新增 TCP 連線,也可以把 TCP 連線從 session 刪除。 也就是說一個session中是可以有多個連線的。透過一個 session 的所有連線,initiator 只看到同一個 target。

Connection

: 一個 TCP 連線。Initiator 和 target 之間使用一或者多個 TCP 連線通訊。

CID(Connection ID)

: 一個 session 裡的每個 connection 用 CID 進行標識,該標識在 session 範圍內是唯一。CID 由 initiator 產生,在 login 請求和使用 logout 關閉 連線時傳遞給 target。

SSID(Session ID)

:一個 iSCSI Initiator 與 iSCSI Target 之間的會話(Session)由會話ID(SSID)定義,該會話ID是一個由發起方部分(ISID)和目標部分(Target Portal Group Tag)組成的元組。 ISID 在會話建立時由發起者明確指定。 Target Portal Group Tag 由發起者在連線建立時選擇的 TCP埠來隱式指定。 當給定 TargetName 時,TargetPortalGroupTag 也必須由目標在連線建立期間作為確認返回。

Portal Groups

: 網路埠組。iSCSI session 支援多連線,一些實現能把透過多個埠建立的多個連線捆綁到一個 session。 一個 iSCSI 網路實體的多個網路埠被定義為一個網路埠組,把該組和一個 session 聯絡起來,該 session 就可以捆綁透過該組內多個埠建立的多個連線,再使它們一起協同工作以達到捆綁的目的。每一個該組的 session 並不需要包括該組的所有網路埠。一個 iSCSI 節點可能有一或者多個網路埠組,但是每一個 iSCSI 使用的網路埠只能屬於 iSCSI 節點的一個組。

Target Portal Group Tag

: 網路埠組標識。使用 16 位元的數標識一個網路埠組。在 一個 iSCSI 節點裡,所有具有同樣組標誌的埠構成一個網路埠組。

iSCSI Task

: 一個 iSCSI 任務是指一個需要響應的 iSCSI 請求。

I_T nexus

: I_T nexus 是指一個 SCSI initiator 的埠和一個 SCSI target 埠之間 的關係。 對於 iSCSI, 這個關係對應一個 session, 它指 session 的 initiator 端和 iSCSI target 網路埠組之間的關係。I_T nexus 的標識是一對埠名稱(iSCSI initiator 名稱+i+ISID,iSCSI target 名稱+t+網路埠組標識)。 PDU (Protocol Data Unit): initiator 和 target 之間通訊時把資訊分割為訊息。這些 訊息稱為 iSCSI PDU。 SSID (Session ID): iSCSI initiator 和 iSCSI target 之間的 session 用 SSID 進行標識, 該標識由 initiator 部分的 ISID 和 target 部分的 TPGT 構成。

ISID(The initiator part of the Session Identifier)

:發起方會話標識,由 initiator 在 session 建立的時候明確給出,

TSIH (Target Session Identifying Handle)

: Target 分配給與特定名稱 initiator 建立的 session 的標識。 但是 0 值被保留著用於 initiator 告知 target 這是一個新 session。 在為一個 session 新增一個 connect 時,TSIH 已經隱含指明。

啟動器端配置

Linux的啟動器包含核心態的啟動器、使用者態的守護程序和命令列工具3部分內容,整體架構還是比較複雜的。但是如果不想理解其原理,只是一般使用的話,還是比較簡單方便的。下面我們介紹一下其操作步驟(

這裡假設已經有一個儲存裝置

),關於更詳細的原理我們後續再進行詳細的介紹。

啟動iscsi守護程序

在啟動器端是有一個守護程序的,首先要保證該守護程序是處於正常執行狀態。如果沒有執行的情況下需要啟動該服務。

#service iscsi start

預設情況下,系統啟動後此程序會自動執行的。如果沒有自動執行可以透過下面命令進行控制和檢視。

# chkconfig iscsi on

# chkconfig iscsi ——list (檢視ISCSI啟動狀態)

發現目標

預設情況下,iscsi發起方和目標方之間透過埠3260連線。假設已知iscsi的目標方IP是192。168。1。1,執行下列命令:

# iscsiadm -m discovery -t sendtargets -p 192。168。1。1:3260

如果一切正常,過此時找到並擁有了一個目標(target):

192。168。1。1:3260,1 iqn。1997-05。com。test:itworld123

登入節點

以上面被發現的目標為例:

# iscsiadm -m node –T iqn。1997-05。com。test:itworld123 -p 192。168。1。1:3260 -l

其中iqn。1997-05。com。test:itworld123是目標名。

檢視磁碟資訊

正常來說,如果登入成功後在客戶端作業系統中就可以看到新增的硬碟了。可以透過下面命令檢視。

# fdisk –l

格式化裝置

iSCSI裝置的使用與普通硬碟沒有任何差異,比如我們想把該裝置格式化為ext4檔案系統,執行:

# mkfs。ext4 /dev/sdb

具體使用我們這裡就不再解釋,使用方法與本地磁碟完全一致。

登出節點

有些情況下我們可能需要登出節點,此時將埠啟動器和目標器之間的連線,磁碟也會消失。登出之前需要先停止對磁碟的使用。

# umount /mnt/iscsi_itworld123

執行如下命令可以登出:

# iscsiadm -m node –T iqn。1997-05。com。test:raid -p 192。168。1。1:3260 –u

登入需驗證碼的節點

為了保證儲存裝置的安全,可以對儲存裝置設定許可權認證,這樣只有合法使用者才能訪問儲存裝置。下面是具有認證的儲存的登入方法。

1)開啟認證

iscsiadm -m node -T

裝置

-o update ——name node。session。auth。authmethod ——value

=

CHAP *。使用-o同——op

2)新增使用者

iscsiadm -m node -T

裝置

——op update ——name node。session。auth。username ——value

=[

使用者名稱

3)新增密碼

iscsiadm –m node –T

裝置

–op update –name node。session。auth。password –value

=[

密碼

好了,今天先到這。我們今天主要介紹iSCSI的基本架構以及啟動器端的使用。這個主要是讓大家有個感性的認識,為後面介紹啟動器的實現打下基礎。

後續我們將介紹啟動器使用者態管理程式的架構和實現,以及核心態啟動器的實現。

標簽: iSCSI  session    啟動器  initiator