組成
一個簡單ISCSI系統大致由以下部分構成
- ISCSI Initiator 或者 ISCSI HBA
- ISCSI Target
- 以太網交換機
- 一台或者多台服務器
結構圖如下:
- iscsi服務器用來安裝ISCSI驅動程序,即安裝ISCSI Initiator。
- IP網絡就是以太網。
- Storage Route可以是以太網交換機或者路由器。
- ISCSI存儲設備可以是ISCSI磁盤陣列,可以是具有存儲功能的PC或者服務器。
iscsi Initiator
這是安裝在計算機上的軟件或者硬件設備,它負責與ISCSI存儲設備進行通信。這里有2種通信方式:
- 軟件形式
即ISCSI initiator軟件。在iscsi服務器上安裝initiator后,Initiator軟件可以將以太網虛擬成ISCSI卡,進而接受和發送ISCSI服務器上,從而實現主機和ISCSI存儲設備之間的ISCSI協議和TCP/IP協議傳輸功能。這種方式只需要以太網卡和以太網交換機,無需其他的設備,因此成本最低。但是ISCSI報文和TCP/IP報文轉換需要消耗服務器的CPU資源,只有在低I/O和低帶寬性能要求的應用環境中才能使用這種方式。 - 硬件形式
使用ISCSI HBA(Host Bus Adapter),即iSCSI Initiator硬件。這種方式需要先購買ISCSI HBA卡。然后將其安裝在ISCSI服務器上,從而實現ISCSI服務器與交換機之間、iSCSI服務器與存儲設備之間的高效數據傳輸。與第一種方式比較,硬件ISCSI HBA卡方式不需要消耗ISCSI服務器的CPU資源,同時硬件設備專用的。所以基於硬件的ISCSI Initiator可以提供更好的數據傳輸和存儲性能,但是ISCSI HBA卡畢竟昂貴,需要使用者自己在性能和成本之間權衡。
so far,iSCSI Initiator軟件一般都是免費的,CentOs和Rhel都能夠很好的支持。現在發行的linux系統都默認自帶了iscsi initiator
ISCSI Target
一個可以用於存儲數據的ISCSI磁盤陣列或者具有ISCSI功能的設備都可以被成為“ISCSI Target”,因為大多數操作系統都可以利用一些軟件將系統轉為一個ISCSI Target。linux下的開源ISCSI Target軟件---ISCSI Enterprise Target。
利用ISCSI Target軟件,可以將服務器存儲空間分配給客戶機使用,客戶機可以像使用本地硬盤一樣使用ISCSI磁盤。包括對齊分區,格式化以及讀寫等。而且每個客戶端可以向ISCSI磁盤寫數據,互不干擾,並且不會破壞存儲到服務器中的數據。同時,ISCSI target軟件對用戶的權限控制非常靈活,支持配置文件。
我們知道,ISCSI是使用TCP/IP協議進行通信的,因此ISCSI兩端連接起來,僅僅需要一個以太網絡就行了,所以,以太網絡的速度很大程度上絕對了ISCSI的性能,所以我們需要配置一個最好是萬兆交換機,再差勁也不能低於千兆交換機,且要做好交換機冗余,避免交換機宕機造成存儲無法使用。
ISCSI原理
在先了解ISCSI的工作原理之前,就必須知道ISCSI的層次結構,根據OSI模型,ISCSI的協議從上往下一共可以分為三層。如下所示:
- SCSI層 根據客戶端發出的請求建立SCSI CDB(命令描述塊),並且傳給ISCSI層。同事接收來自ISCSI層的CDB,並向應用返回數據。
- ISCSI 對SCSI CDB進行封裝,以便能夠在基於TCP/IP協議的網絡上進行傳輸,完成SCSI到TCP/IP的協議映射。這一層是ISCSI協議的核心層。
- TCP/IP層 對IP報文進行路由和轉發,並且提供端到端的透明可靠傳輸。
傳輸過程詳解
iSCSI協議定義了在TCP/IP網絡發送,接受數據塊存儲數據的規則和方式。發送端將SCSI命令和數據封裝到TCP/IP包中,然后通過IP網絡轉發,接收端收到TCP/IP包之后,將其還原為SCSI命令和數據並執行,執行完成之后,將返回SCSI命令和數據再封裝到TCP/IP包中,之后再傳回發送端。這樣完成這個傳輸過程。
ISCSI的整個數據傳輸過程在用戶來看都是透明的,用戶使用遠端的存儲設備就像使用本地的硬盤設備一樣。實際上,ISCSI的數據傳輸速率並不能完全達到本地硬盤的數據傳輸率,但這差別並不明顯,而這中網絡存儲模式還有一個有點就是安全性高,這對於數據集中存儲的ISCSI來說非常重要。