iSCSI
網絡存儲分類
網絡存儲大致分爲三類:
- 直連式存儲(DAS:Direct Attached Storage)
- 網絡接入存儲(NAS:Network Attached Storage)
- 存儲區域網絡(SAN:Storage Area Network)
DAS(Direct Attached Storage—直接附加存儲)
DAS是將存儲設備通過SCSI接口或者光纖通道直接連接到一臺服務器。
連接方式
DAS連接存儲設備一般由兩種方式:
- SCSI接口:SCSI是一種計算機系統I/O技術的標準
- FC光纖通道:光纖傳輸通道,低時延、大帶寬
侷限性
DAS存儲依賴服務器操作系統進行I/O讀寫,數據的備份和恢復都要佔用服務器的主機資源比如CPU、系統I/O等,SCSI通道會成爲IO瓶頸,而且服務器的SCSI ID資源有限,能夠建立的SCSI通道連接有限。因此,企業用戶的數據備份工作一般在深夜或者業務系統不繁忙時進行,以免影響業務系統的正常運行。
DAS存儲無法共享,每個應用服務器都由自己的存儲器。
應用場合
主要用於中小企業
NAS(Network Attached Storage-網絡附加存儲)
存儲設備和服務器徹底分離,存儲設備通過標準的以以太網連接到需要存儲服務的計算機。
NAS存儲基於TCP/IP協議的網絡文件存儲服務,體現NFS、SMB等網絡共享服務。
NAS設備通常使用瘦客戶端即簡版的操作系統,提供最單純的檔案服務和相關的通訊協議,很多玩家使用樹莓派搭建NAS系統。
連接方式
通過標準的LAN方式連接存儲系統,使用TCP/IP協議,支持 常用的NFS、SMB等服務。
侷限性
備份過程中消耗帶寬,使用網絡進行備份和恢復。
NAS一般沒有高可用性配置,容易形成單點故障。
應用場合
文件共享:圖片、電影、文檔等。
跨平臺:支持多種計算機平臺
SAN((Storage Area Network-存儲區域網絡)
採用FC(Fibre Channel)光纖通道或者Ethernet進行遠距離傳輸,使用光纖通道交換機連接存儲陣列和服務器主機,成爲一個專用存儲網絡,這個專用存儲網絡不支持TCP/IP協議。
由於使用了光纖接口(FC接口),SAN具有更高的帶寬。
SAN存儲通過光纖交換機將磁盤空間分配給不同的服務器,服務器通過以太網提供對外服務,存儲區域與用戶區域是相互隔離的。
FC-SAN
由磁盤陣列(RAID)連接光纖通道(Fibre Channel)組成。
SAN存儲網絡的服務器和客戶機的數據通信通過SCSI命令而不是TCP/IP協議,數據處理的單位是“塊級".
在FC-SAN中,需要專用的硬件和軟件。
硬件包括FC卡、FC HUB、FC交換機、存儲系統等。
軟件主要是各類操作系統的驅動程序和存儲管理軟件。
IP-SAN
IP-SAN的通信通道是IP,而不是光纖通道。使用iSCSI標準,不兼容TCP/IP。
iSCSI是一種運行在IP網上的,適合以太網進行數據塊傳輸標準。iSCSI實現了在IP網絡上運行SCSI協議。允許用戶通過TCP/IP網絡構建存儲區域網。
侷限性
成本高
SAN應用
SAN存儲網絡由於具有高帶寬、獨立的存儲網絡、管理便捷等特點。SAN主要用於存儲量大的工作環境,如ISP、銀行等。
DAS、NAS、SAN比較
應用場景的比較
- DAS比較古老了,很適用於那些數據量不大,對磁盤訪問速度要求較高的中小企業;
- NAS多適用於文件服務器,比如文檔、圖片、靜態網頁等,用來存儲非結構化數據,雖然受限於以太網的速度,但是部署靈活,成本低;
- SAN則適用於大型應用或數據庫系統,缺點是成本高、較複雜。
SCSI
SCSI 小型計算機系統接口(英語:Small Computer System Interface; 簡寫:SCSI),一種用於計算機和智能設備之間(硬盤、軟驅、光驅、打印機、掃描儀等)系統級接口的獨立處理器標準。 SCSI是一種智能的通用接口標準。
SCSI 協議
SCSI協議主要是在主機和存儲設備之間傳送命令、狀態和塊數據。在各類存儲技術中,SCSI協議可謂是最重要的脊樑。
操作系統對外部設備(如磁盤、磁帶、光存儲、打印機和掃描儀)的I/O操作,可以通過SCSI協議來實現,一般情況下SCSI協議都嵌入到設備驅動器或者主機適配器的板載邏輯中。
因爲SCSI協議層位於操作系統和外部資源之間,它具有不同的功能組件。例如,應用程序一般將數據作爲文件或者記錄來訪問。儘管數據最終都將在磁盤或者磁帶介質上以數據塊的方式存放,但是文件的檢索需要一系列功能將未加工的塊數據裝配成應用程序能夠操作的連續文件。
(SCSI協議可以理解它爲塊級別的存儲協議。它是一種I/O技術,讓數據以塊的方式進行傳輸的一種協議規範。這個術語也常被用來指稱運行該協議的並行線纜機制,將磁盤和磁帶設備連接到應用服務器上的一種總線機制 。)
(SCSI 實現了一種客戶機/服務器風格的通信架構。發起者向目標設備發送命令請求。該目標處理此請求並向發起者返回響應。發起者可以是託管計算機中的一個 SCSI 設備,而 SCSI 目標則可以是一個磁盤、光盤和磁帶設備或特殊設備)
SCSI通信模型
服務端的Traget通過任務分發器進行任務調度,進而控制邏輯單元。
SCSI通信過程
SCSI 協議模型
爲了便於實現和理解SCSI的各個協議,SCSI 採取了分層結構。 SCSI 大致可分爲三層,即SCSI應用層,SCSI 傳輸層和SCSI 互連層。 SCSI中的各個具體協議一般都位於其中的某一層,可以可能跨越兩層。
- 應用層,SCSI 體系結構把發起方(主機)和目標方(如磁盤)的通信定義爲客戶/服務器交換。SCSI
客戶位於主機中,代表上層應用程序,文件系統和操作系統I/O請求。 SCSI 設備服務器位於目標設備中,對請求做出響應。
客戶/服務器請求和響應通過某種形式的底層協議進行傳輸。 - 傳輸協議層,SCSI 設備之間通過一系列的命令實現數據的傳送,大致分成三個階段:命令的執行,數據的傳送和命令的確認。
- SCSI 互聯層完成SCSI設備對總線的連接以及發送方和目標方的選擇等功能。
SCSI總線
把磁盤和磁帶設備連接到應用服務器或文件服務器,最常用的方法就是通過傳統的 SCSI總線。儘管 SCSI主要是一個塊協議,但這個術語也被用來指稱運行該協議的並行線纜機制。
作爲一種介質,SCSI定義了一個並行總線,用於數據傳輸和通信控制。總線本身可以是印製導線的形式,也可以是一根電纜。外部 SCSI設備使用電纜以菊花鏈的形式連接到服務器上的控制器。在菊花鏈中,每個設備都跟其他設備串接。由於這個原因,外部 SCSI設備典型地都有兩個 SCSI連接器,可以分別連接到鏈中的前一個設備和後一個設備。現在的一個 SCSI 總線可以連接多至 16個設備。其中包括1 個SCSI控制器和 15個存儲裝置。
SCSI 類型
SCSI有三個基本規範:
SCSI-1:SCSI-1是在1986年開發的原始規範,現已不再使用。它規定總線寬度爲8位,時鐘速度爲5MHz。
SCSI-2:1994年採用,此規範包括通用指令集(CCS)——支持任何SCSI設備所必需的18個命令。在此規範中,可以選擇將時鐘速度提高一倍,達到10MHz (Fast),將總線寬度增加爲原來的兩倍,即16位,將設備數增加爲15個(Wide),或者同時實現上述兩種升級(Fast/Wide)。SCSI-2還增加了命令隊列,允許設備存儲命令,並從主機排列命令優先級。
SCSI-3:此規範於1995年正式出臺,包括一系列較小範圍的標準。涉及SCSI並行接口(SPI)的一組標準在SCSI-3中得到了繼續發展,SPI是SCSI設備之間的通信方式。大多數SCSI-3規範都以Ultra開頭,如Ultra for SPI規範、Ultra2 for SPI-2規範和Ultra3 for SPI-3規範。名稱中的Fast和Wide的含義與SCSI-2中的一樣。SCSI-3是當前正在使用的標準。
ISCSI
iSCSI協議:它是將SCSI報文封裝成iSCSI報文,然後在進行二次封裝成TCP/IP報文,最後藉助於以太網傳輸,用雙絞線(網線)組成IP SAN存儲網絡
ISCSI相當於文件共享協議,直接共享存儲設備,把一塊盤共享出去,可以自定義文件系統類型來存放數據信息,在當前主機上存放數據,例如在Linux上執行touch a 寫操作,這個命令先通過shell做一個解析,通過操作系統運行,最終通過CPU接受這個指令,並控制SCIS適配器,基於SCIS適配器去對存儲設備進行寫入操作,寫操作的標準協議是SCIS協議,SCIS適配器所連接的SCIS設備基於線纜傳輸。
ISCSI的工作流程
- iSCSI系統由SCSI適配器發送一個SCSI命令。
- 命令封裝到TCP/IP包中並送入到以太網絡。
- 接收方從TCP/IP包中抽取SCSI命令並執行相關操作。
- 把返回的SCSI命令和數據封裝到TCP/IP包中,將它們發回到發送方。
- 系統提取出數據或命令,並把它們傳回SCSI子系統。
ISCSI 服務中的概念
TPG:共享存儲組,某個特定iSCSI目標要偵聽的接口IP地址和TCP端口的集合。可以將目標配置添加到TPG以協調多個LUN的設置。
ACL:訪問權限控制列表,一種使用節點IQN(通常是啓動器名稱)來驗證啓動器的訪問權限的訪問限制
IQN:iSCSI限定名稱,全球唯一名稱,用於以強制命名格式來識別啓動器和目標。IQN格式如下:
iqn.YYYY-MM.com.reversed.domain[:optional_string]
LUN:邏輯單元號,帶有編號的塊設備,連接到目標且通過目標來使用。可以有一個或多個LUN連接到單個目標,但通常一個目標提供一個LUN
portals入口:目標或啓動器上用於建立的IP地址和端口。 3260
配置ISCSI 服務
服務端配置
1、準備一個分區
#創建分區
[root@mail ~]# fdisk /dev/sda
n
P
Enter
Enter
Enter
W
#重新讀取分區表
partprobe
2、準備一個空磁盤
#確認/dev/sdb設備
[root@mail ~]# fdisk -l
3、安裝服務端軟件
[root@mail ~]# yum install -y targetcli
4、查看iscsi,並解讀其結構
[root@mail ~]# targetcli
#使用ls命令查看菜單結構
/> ls
o- / ....................................................................... [...]
o- backstores ............................................................ [...] 後備存儲
| o- block ................................................ [Storage Objects: 2] 塊設備
| | | o- LUN1 ........................ [/dev/sdb (10.0GiB) write-thru deactivated]
| o- fileio ............................................... [Storage Objects: 0] 文件存儲
| o- LUN0 ....................... [/dev/sda5 (17.8GiB) write-thru deactivated]
| o- pscsi ................................................ [Storage Objects: 0] 物理scsi
| o- ramdisk .............................................. [Storage Objects: 0] 閃存
o- iscsi .......................................................... [Targets: 2] create創建,兩個分別將sdb sda5 共享出去
4、創建LUN
#創建sda5分區爲LUN0
/backstores/block> create name=LUN0 dev=/dev/sdb
#創建磁盤/dev/sdb爲LUN1
/backstores/fileio> create name=LUN1 file_or_dev=/dev/sda5
#使用ls命令來查看創建的結果
/backstores/block> ls
6、創建IQN
注意:在7.0版本中,創建target不會自動創建portal,但是在7.2版本中會自動創建portal,如果需要自定義ip和端口,需要在創建target之前關閉自動創建portal功能
/iscsi>set group=global auto_add_default_portal=false
#使用ceate命令來創建一個IQN,我們的示例需要兩個,所以執行兩次該命令
/iscsi> create iqn.2019-04.com.example.group8.system1.x8664:sn432856924528
使用ls命令查看IQN的創建結果
/iscsi> ls
| o- iqn.2003-01.org.linux-iscsi.mail.x8664:sn.138cf1e3c10f .......... [TPGs: 1] 字符串
| | o- tpg1 ............................................. [no-gen-acls, no-auth] 共享存儲的組
| | o- acls ........................................................ [ACLs: 0]
| | o- luns ........................................................ [LUNs: 0]
| | o- portals .................................................. [Portals: 1]
| | o- 0.0.0.0:3260 ................................................... [OK]
| o- iqn.2003-01.org.linux-iscsi.mail.x8664:sn.35c71b41d217 .......... [TPGs: 1]
| o- tpg1 ............................................. [no-gen-acls, no-auth]
| o- acls ........................................................ [ACLs: 0]
| o- luns ........................................................ [LUNs: 0]
| o-. portals ................................................. [Portals: 1]
| o- 0.0.0.0:3260 ................................................... [OK]
o- loopback ....................................................... [Targets: 0]
7、配置權限
#切換到tpg1目錄,配置演示模式權限
/iscsi/iqn.20...f1e3c10f/tpg1>
#執行以下命令
/iscsi/iqn.20...f1e3c10f/tpg1> set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
屬性認證關閉 演示模式寫保護關閉 生成節點acl 緩存動態acl
8、添加luns
#添加LUN0到第一個IQN
/iscsi/iqn.20...10f/tpg1/luns> create /backstores/block/LUN0
#添加LUN1到第二個IQN
/iscsi/iqn.20...217/tpg1/luns> create /backstores/fileio/LUN1
#創建完成後,切換到iscsi目錄,使用ls命令查看創建結果
/iscsi> ls
9、創建portal 接口
#在第一個IQN中創建portal
/iscsi/iqn.20.../tpg1/portals> create 192.168.171.143 3260
#在第二個IQN中創建portal
/iscsi/iqn.20.../tpg1/portals> create 192.168.171.143 3261
#創建完成後,切換到iscsi目錄,使用ls命令查看創建結果
/iscsi> ls
10、啓動服務
配置完成後,使用exit命令退出程序,該程序會自動保存配置到配置文件中
#退出target
/iscsi/iqn.20.../tpg1/portals> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
#啓動服務
[root@mail ~]# systemctl restart target
#查看服務狀態
[root@mail ~]# systemctl status target
windows客戶端驗證
使用iscsi發起程序
linux客戶端驗證
安裝iscsi客戶端軟件
#確認客戶端是否安裝
[root@localhost ~]# yum install iscsi-initiator-utils.i686
#查看當前虛擬機的磁盤分區情況發現目標,以下命令:
[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 192.168.171.143
這是全命令(iscsi輔助工具 )
iscsiadm --mode discovery --type sendtargets --portal 192.168.171.143
模式發現 類型 發送目標門戶
登錄服務器上的一個或多個iscsi目標
1、手動掛載
#掛載命令格式:
iscsiadm --mode node --targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.0f6a7f1386fc --portal 172.25.0.129:3261 --login
如下所示:
[root@localhost ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.mail.x8664:sn.5e7307059fbf -p 192.168.171.143:3261 -l
#查看:
[root@localhost ~]# fdisk -l
[root@localhost ~]# lsscsi
#查看和區分
[root@localhost ~]# ll /dev/disk/by-path/
#查看日誌
[root@localhost ~]# grep sdb /var/log/messages
2、配置開機自動掛載
注意:必須使用UUID,否則會出問題,同時在參數中添加_netdev。
UUID=33899a29-9f9e-476f-b8e9-cc9ad0986dac /mnt xfs defaults,_netdev 0 0
添加_netdev參數的原因:當計算機開機首先是bios自檢查找硬盤中的操作系統引導啓動,但是當系統沒有完全啓動時計算機就沒有通過網絡通訊,而iscsi是基於網絡的共享存儲,所以開機重啓需要告訴內核這條開機掛在是基於網絡的存儲。
刪除命令
targetcli iscsi/ delete iqn.2003-01.org.linux-iscsi.mail.x8664:sn.5e7307059fbf