前文介紹了iSCSI的基本架構及啟動器的基本操作,也就是在用戶端的操作。今天我們介紹一下目标器的相關概念、開源實作和基本操作。Linux作業系統下面有很多目标器的開源實作,比如LIO、SCST和TGT等,本文以CentOS下的LIO為例進行介紹。
LIO架構簡介
Linux-IO Target在Linux核心中(linux 2.6.38後),用軟體實作各種SCSI Target,其支援的SAN技術中所有流行的存儲協定包括Fibre Channel(Qlogic,linux3.5)、FCoE(linux3.0)、iSCSI(linux 3.1)、iSER (Mellanox InfiniBand,linux3.10), SRP (Mellanox InfiniBand,linux3.3), USB等,同時還能為本機生成模拟的SCSI裝置,以及為虛拟機提供基于virtio的SCSI裝置。Linux-IO Target使使用者能夠使用相對廉價的Linux系統實作SCSI、SAN的各種功能,而不用購買昂貴的專業裝置。
上圖顯示了Linux-IO Target的各個元件。LIO模拟了通用的SCSI裝置,并且實作了SPC-3和SPC-4。接着,通過各種各樣的backstore對象,來導入真正的後端存儲,最後連接配接上各種前端Fabric子產品,來導出模拟的SCSI裝置。無論是Fibre Channel、FCoE、iSCSI還是vhost(即virtio),都隻是一種Fabric技術,我們可以将其了解成傳輸協定,而在這些傳輸協定中傳輸的SCSI指令則總是由核心的SCSI裝置處理的。要支援新的Fabric技術,并不需要修改核心的SCSI裝置和後端存儲子產品,隻需要按照該Fabric技術的規範實作對SCSI指令的傳輸就可以了。iSCSI技術就是把SCSI指令放在TCP/IP中傳輸,vhost技術就是把SCSI指令放在virtio隊列中傳輸。
Generic Target Engine:實作了SAM中規定的一個SCSI target的功能,主要是SCSI協定的解析。它通過Fabric子產品和initiator通信,通過backstore和具體的儲存設備通信。
Fabric modules:實作了LIO的前端,即SCSI協定傳輸層的子產品。可以通過Fabric Hardware Abstraction Layer(F-HAL)來為LIO增加新的fabric子產品。
Backstores:實作了LIO的後端,即通路磁盤資料的方式。可以通過Storage Hardware Abstraction Layer(S-HAL)在LIO中增加新的存儲硬體的支援。通常使用BLOCKIO和FILEIO。
配置管理方法
Linux-IO Target則在核心态實作了對Target的模拟,配置管理則采用了更為“現代化”的基于sysfs的方式,提供了友好的使用者态管理工具。從核心的2.6.38版起,Linux核心都包含Linux-IO Target的相關子產品。在使用者态,各大發行版都打包了targetcli和rtslib,其中targetcli程式用于配置、管理,rtslib則提供Python程式設計接口。
targetcli簡介
targetcli是Linux-IO Target的使用者态的管理配置工具。使用者可以使用yum或apt-get直接從各大發行版的官方倉庫安裝,對于較老的linux版本需要自己編譯源碼安裝。targetcli提供一個類似shell的界面,各種Target、TPG、LUN、backstore對象則被組織成目錄樹的形式,使用者可以用ls、cd指令來浏覽目錄樹,用create、delete指令來建立和删除各種對象。浏覽配置,就是浏覽目錄樹,建立删除各種對象,就是在目錄樹的各級節點中建立新的節點。同時targetcli還提供了常見的shell指令輔助編輯功能,例如TAB智能補全、上下鍵切換指令曆史、Ctrl + R搜尋指令曆史。凡是有不熟悉的指令,都可以用help指令查詢使用說明。
安裝targetcli
在CentOS 7下執行如下指令可以安裝targetcli:
# yum -y install targetcli
啟動target服務
# systemctl start target
設定開機啟動服務
# systemctl enable target
如防火牆未關閉則設定防火牆運作3206端口,關閉則不用執行此步驟
# firewall-cmd--permanent --add-port=3260/tcp
# firewall-cmd-reload
配置目标器資源
我們這裡配置一個目标器資源,并添加導出的磁盤資源,這樣在啟動器端就可以連接配接該目标器,并通路該磁盤資源了。目标器端的管理非常簡單,就是通過targetcli實作對資源的管理。首先假設我們已經有一塊獨立的磁盤sdc了。
1. root權限運作targetcli
# targetcli
2. 建立一個塊存儲
注意:server1.disk(名稱server1可自定義),/dev/sdc為上面建立的分區名稱。切換到如下目錄,并執行建立指令
/> cd /backstores/block
/> create server1.disk /dev/sdc
3. 配置ISCSI Target命名
注意:命名在同一子網内確定是唯一的,命名格式為:iqn.yyyy-mm.<主機名反寫>:自定義名稱(自定義名稱内不能有下劃線)
/> cd /iscsi
/> create iqn.1997-05.com.test:itworld123
/>cd /iscsi/iqn.2017-03.com.example:disk1/tpg1/acls
/>create iqn.2017-03.com.example:client1
/>cd /iscsi/iqn.1997-05.com.test:itworld123/tpg1/luns
/> create /backstores/block/server1.disk