iSCSI是由IBM發(fā)明的基于以太網(wǎng)的存儲(chǔ)協(xié)議,該協(xié)議與SUN的NFS協(xié)議都是為了解決存儲(chǔ)資源共享問(wèn)題的解決方案。兩者意圖一致,只不過(guò)兩者是不同的實(shí)現(xiàn)方式,前者在客戶機(jī)上呈現(xiàn)的是一個(gè)塊設(shè)備,而后者則是一個(gè)目錄樹(shù)。關(guān)于兩者的區(qū)別,可以參考本號(hào)之前的文章(分布式存儲(chǔ)與傳統(tǒng)SAN、NAS相比,有什么優(yōu)勢(shì)與劣勢(shì)?),本位不再贅述。
本文今天主要介紹一下iSCSI的整體架構(gòu),以及在Linux平臺(tái)上啟動(dòng)器端(可以理解為客戶端,后續(xù)介紹該概念)如何實(shí)現(xiàn)對(duì)存儲(chǔ)設(shè)備(系統(tǒng))的配置和訪問(wèn)。
整體架構(gòu)概述
概括的說(shuō),iSCSI是一種存儲(chǔ)設(shè)備遠(yuǎn)程映射技術(shù),它可以將一個(gè)遠(yuǎn)程服務(wù)器上的存儲(chǔ)設(shè)備映射到本地,并呈現(xiàn)為一個(gè)塊設(shè)備(大白話就是磁盤(pán))。從普通用戶的角度,映射過(guò)來(lái)的磁盤(pán)與本地安裝的磁盤(pán)毫無(wú)差異。
這種映射方式基于是基于SCSI協(xié)議的,SCSI協(xié)議是計(jì)算機(jī)與外圍設(shè)備(例如硬盤(pán)、光盤(pán)等)通信的協(xié)議。而iSCSI則是通過(guò)TCP協(xié)議對(duì)SCSI進(jìn)行封裝的一種協(xié)議,也就是通過(guò)以太網(wǎng)傳輸SCSI協(xié)議的內(nèi)容。
從上圖可以看出來(lái),iSCSI其實(shí)也是一種典型的客戶端服務(wù)器架構(gòu)(CS架構(gòu)),其中訪問(wèn)存儲(chǔ)系統(tǒng)的計(jì)算機(jī)成為客戶端,其中負(fù)責(zé)連接的軟件成為啟動(dòng)器。而提供存儲(chǔ)服務(wù)的計(jì)算機(jī)成為服務(wù)端,其中的軟件成為目標(biāo)器。
由于iSCSI是基于TCP協(xié)議的,因此啟動(dòng)器和目標(biāo)器可以是純軟件實(shí)現(xiàn),也可以基于硬件實(shí)現(xiàn)。如果是硬件實(shí)現(xiàn),硬件實(shí)現(xiàn)主要是對(duì)SCSI命令封裝和解析等,這樣可以釋放CPU資源。目前在Linux下面,啟動(dòng)器和目標(biāo)器都有純軟件的實(shí)現(xiàn),比如啟動(dòng)器的實(shí)現(xiàn)Open-iSCSI,目標(biāo)器的實(shí)現(xiàn)LIO、SCST和TGT等。
基本概念介紹
本節(jié)介紹關(guān)于iSCSI的一些基本概念,理解這些概念便于我們理解iSCSI的原理及后續(xù)閱讀iSCSI的開(kāi)源代碼。
Network Portal: 網(wǎng)絡(luò)端口。網(wǎng)絡(luò)實(shí)體的一個(gè)組成部分,它有一個(gè) TCP/IP 地址。 網(wǎng)絡(luò)端口在 initiator 用 IP 地址標(biāo)識(shí), 在 target 用 IP 地址+偵聽(tīng)的 TCP 端口標(biāo)識(shí)。
Session: 連接 initiator 和 target 的一組 TCP 連接構(gòu)成一個(gè) session(可以簡(jiǎn)單理解為 I_T nexus)。可以向 session 添加 TCP 連接,也可以把 TCP 連接從 session 刪除。 也就是說(shuō)一個(gè)session中是可以有多個(gè)連接的。通過(guò)一個(gè) session 的所有連接,initiator 只看到同一個(gè) target。
**Connection **: 一個(gè) TCP 連接。Initiator 和 target 之間使用一或者多個(gè) TCP 連接通信。
CID(Connection ID): 一個(gè) session 里的每個(gè) connection 用 CID 進(jìn)行標(biāo)識(shí),該標(biāo)識(shí)在 session 范圍內(nèi)是唯一。CID 由 initiator 產(chǎn)生,在 login 請(qǐng)求和使用 logout 關(guān)閉 連接時(shí)傳遞給 target。
SSID(Session ID):一個(gè) iSCSI Initiator 與 iSCSI Target 之間的會(huì)話(Session)由會(huì)話ID(SSID)定義,該會(huì)話ID是一個(gè)由發(fā)起方部分(ISID)和目標(biāo)部分(Target Portal Group Tag)組成的元組。 ISID 在會(huì)話建立時(shí)由發(fā)起者明確指定。 Target Portal Group Tag 由發(fā)起者在連接建立時(shí)選擇的 TCP端口來(lái)隱式指定。 當(dāng)給定 TargetName 時(shí),TargetPortalGroupTag 也必須由目標(biāo)在連接建立期間作為確認(rèn)返回。
Portal Groups: 網(wǎng)絡(luò)端口組。iSCSI session 支持多連接,一些實(shí)現(xiàn)能把通過(guò)多個(gè)端口建立的多個(gè)連接捆綁到一個(gè) session。 一個(gè) iSCSI 網(wǎng)絡(luò)實(shí)體的多個(gè)網(wǎng)絡(luò)端口被定義為一個(gè)網(wǎng)絡(luò)端口組,把該組和一個(gè) session 聯(lián)系起來(lái),該 session 就可以捆綁通過(guò)該組內(nèi)多個(gè)端口建立的多個(gè)連接,再使它們一起協(xié)同工作以達(dá)到捆綁的目的。每一個(gè)該組的 session 并不需要包括該組的所有網(wǎng)絡(luò)端口。一個(gè) iSCSI 節(jié)點(diǎn)可能有一或者多個(gè)網(wǎng)絡(luò)端口組,但是每一個(gè) iSCSI 使用的網(wǎng)絡(luò)端口只能屬于 iSCSI 節(jié)點(diǎn)的一個(gè)組。
Target Portal Group Tag: 網(wǎng)絡(luò)端口組標(biāo)識(shí)。使用 16 比特的數(shù)標(biāo)識(shí)一個(gè)網(wǎng)絡(luò)端口組。在 一個(gè) iSCSI 節(jié)點(diǎn)里,所有具有同樣組標(biāo)志的端口構(gòu)成一個(gè)網(wǎng)絡(luò)端口組。
iSCSI Task: 一個(gè) iSCSI 任務(wù)是指一個(gè)需要響應(yīng)的 iSCSI 請(qǐng)求。
I_T nexus: I_T nexus 是指一個(gè) SCSI initiator 的端口和一個(gè) SCSI target 端口之間 的關(guān)系。 對(duì)于 iSCSI, 這個(gè)關(guān)系對(duì)應(yīng)一個(gè) session, 它指 session 的 initiator 端和 iSCSI target 網(wǎng)絡(luò)端口組之間的關(guān)系。I_T nexus 的標(biāo)識(shí)是一對(duì)端口名稱(chēng)(iSCSI initiator 名稱(chēng)+i+I(xiàn)SID,iSCSI target 名稱(chēng)+t+網(wǎng)絡(luò)端口組標(biāo)識(shí))。 PDU (Protocol Data Unit): initiator 和 target 之間通信時(shí)把信息分割為消息。這些 消息稱(chēng)為 iSCSI PDU。 SSID (Session ID): iSCSI initiator 和 iSCSI target 之間的 session 用 SSID 進(jìn)行標(biāo)識(shí), 該標(biāo)識(shí)由 initiator 部分的 ISID 和 target 部分的 TPGT 構(gòu)成。
ISID(The initiator part of the Session Identifier):發(fā)起方會(huì)話標(biāo)識(shí),由 initiator 在 session 建立的時(shí)候明確給出,
TSIH (Target Session Identifying Handle): Target 分配給與特定名稱(chēng) initiator 建立的 session 的標(biāo)識(shí)。 但是 0 值被保留著用于 initiator 告知 target 這是一個(gè)新 session。 在為一個(gè) session 添加一個(gè) connect 時(shí),TSIH 已經(jīng)隱含指明。
啟動(dòng)器端配置
Linux的啟動(dòng)器包含內(nèi)核態(tài)的啟動(dòng)器、用戶態(tài)的守護(hù)進(jìn)程和命令行工具3部分內(nèi)容,整體架構(gòu)還是比較復(fù)雜的。但是如果不想理解其原理,只是一般使用的話,還是比較簡(jiǎn)單方便的。下面我們介紹一下其操作步驟(這里假設(shè)已經(jīng)有一個(gè)存儲(chǔ)設(shè)備),關(guān)于更詳細(xì)的原理我們后續(xù)再進(jìn)行詳細(xì)的介紹。
啟動(dòng)iscsi守護(hù)進(jìn)程
在啟動(dòng)器端是有一個(gè)守護(hù)進(jìn)程的,首先要保證該守護(hù)進(jìn)程是處于正常運(yùn)行狀態(tài)。如果沒(méi)有運(yùn)行的情況下需要啟動(dòng)該服務(wù)。
#service iscsi start
默認(rèn)情況下,系統(tǒng)啟動(dòng)后此進(jìn)程會(huì)自動(dòng)運(yùn)行的。如果沒(méi)有自動(dòng)運(yùn)行可以通過(guò)下面命令進(jìn)行控制和查看。
# chkconfig iscsi on
# chkconfig iscsi --list (查看ISCSI啟動(dòng)狀態(tài))
發(fā)現(xiàn)目標(biāo)
默認(rèn)情況下,iscsi發(fā)起方和目標(biāo)方之間通過(guò)端口3260連接。假設(shè)已知iscsi的目標(biāo)方IP是192.168.1.1,運(yùn)行下列命令:
# iscsiadm -m discovery -t sendtargets -p 192.168.1.1:3260
如果一切正常,過(guò)此時(shí)找到并擁有了一個(gè)目標(biāo)(target):
192.168.1.1:3260,1 iqn.1997-05.com.test:itworld123
登入節(jié)點(diǎn)
以上面被發(fā)現(xiàn)的目標(biāo)為例:
# iscsiadm -m node –T iqn.1997-05.com.test:itworld123 -p 192.168.1.1:3260 -l
其中iqn.1997-05.com.test:itworld123是目標(biāo)名。
查看磁盤(pán)信息
正常來(lái)說(shuō),如果登錄成功后在客戶端操作系統(tǒng)中就可以看到新增的硬盤(pán)了??梢酝ㄟ^(guò)下面命令查看。
# fdisk –l
格式化設(shè)備
iSCSI設(shè)備的使用與普通硬盤(pán)沒(méi)有任何差異,比如我們想把該設(shè)備格式化為ext4文件系統(tǒng),運(yùn)行:
# mkfs.ext4 /dev/sdb
具體使用我們這里就不再解釋?zhuān)褂梅椒ㄅc本地磁盤(pán)完全一致。
登出節(jié)點(diǎn)
有些情況下我們可能需要登出節(jié)點(diǎn),此時(shí)將端口啟動(dòng)器和目標(biāo)器之間的連接,磁盤(pán)也會(huì)消失。登出之前需要先停止對(duì)磁盤(pán)的使用。
# umount /mnt/iscsi_itworld123
執(zhí)行如下命令可以登出:
# iscsiadm -m node –T iqn.1997-05.com.test:raid -p 192.168.1.1:3260 –u
登入需驗(yàn)證碼的節(jié)點(diǎn)
為了保證存儲(chǔ)設(shè)備的安全,可以對(duì)存儲(chǔ)設(shè)備設(shè)置權(quán)限認(rèn)證,這樣只有合法用戶才能訪問(wèn)存儲(chǔ)設(shè)備。下面是具有認(rèn)證的存儲(chǔ)的登錄方法。
1)開(kāi)啟認(rèn)證
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的基本架構(gòu)以及啟動(dòng)器端的使用。這個(gè)主要是讓大家有個(gè)感性的認(rèn)識(shí),為后面介紹啟動(dòng)器的實(shí)現(xiàn)打下基礎(chǔ)。后續(xù)我們將介紹啟動(dòng)器用戶態(tài)管理程序的架構(gòu)和實(shí)現(xiàn),以及內(nèi)核態(tài)啟動(dòng)器的實(shí)現(xiàn)。