1. 程式人生 > 實用技巧 >常見的三種儲存技術以及iSCSI協議

常見的三種儲存技術以及iSCSI協議

1、常見的儲存技術

DAS:Direct Attached Storage,直接附加儲存,儲存裝置通過SCSI介面電纜直接連線到伺服器的,儲存裝置不帶有任何作業系統。它依賴於伺服器,儲存裝置就是將硬體裝置堆疊起來的。DAS也可稱為SAS(Server Attached storage,即伺服器附加儲存)。

DAS具有如下特性:

1、DAS裝置不帶有任何作業系統,檔案系統位於伺服器端,因此是以塊級別進行資料傳輸

2、它是通過SCSI介面電纜與伺服器相連,因此,會增加伺服器的I/O操作,佔用cpu,降低網路和服務效能。

3、不支援多種系統的資料共享

DAS儲存裝置一般適用於中小型企業


NAS:Network Attached Storage,網路附加儲存,NAS是基於IP協議的檔案級資料儲存,支援現有的網路技術,比如乙太網,FDDI等。NAS裝置完全是以資料為中心,將儲存裝置和伺服器徹底隔離,集中管理資料,從而有效釋放頻寬,大大提高了網路整體效能。

NAS裝置是一種特殊的資料儲存伺服器,它內嵌系統軟體,可以提供NFS、SMB/CIFS的檔案共享。



NAS裝置的特點:

1、由於NAS裝置內嵌系統,因此資料是以檔案級別的方式進行傳輸

2、由於是一個單獨的儲存伺服器,因此只負責資料的傳輸,減少了伺服器的I/O操作,因此,大大提高了網路效能。

3、NAS支援標準的網路檔案系統,支援跨平臺儲存。

4、伺服器只儲存資料,可以實現集中化的管理資料

NAS儲存裝置適用於中小型企業



SAN:Storage Area Network,儲存區域網路,這是一個共享的高速儲存網路,儲存裝置位於伺服器的後端,且儲存裝置和伺服器之間一般通過光釺(FC)交換機相連,因此傳輸速率比較快。當然也可以通過IP網路來繼續傳輸,不過這對於網路頻寬來說要求非常大的。對於SAN來說,儲存裝置和伺服器完全分離,伺服器通過光釺交換機(或IP網路)與不同地區的各個儲存裝置相連起來,可以實現集中化的管理。

SAN具有的特點:

1、由於檔案系統位於伺服器上,本身不帶有任何作業系統,因此資料是以塊級別的方式進行傳輸

2、由於儲存伺服器使用光介面,因此傳輸速率快、高

3、可以將不同區域的伺服器通過光釺交換機相連起來,集中化的進行管理

4、由於儲存裝置位於不同區域,因此可實現大容量儲存資料共享

由於元件一套SAN系統比較昂貴,因此適用於大型企業

如今我們所涉及的 SAN (Storage Area Network),其實現資料通訊的主要要求是:
1. 資料儲存系統的合併;
2. 資料備份;
3. 伺服器群集;
4. 複製;
5. 緊急情況下的資料恢復


實現SAN有2種方式:一是稱為FC-SAN,通過光釺交換機來實現SAN系統;另一種稱為IP-SAN,通過現有的IP網路來實現SAN系統。

兩種實現SAN的方式對比如下:

wKioL1T4kOuzcLoPAAJzYY0QvSg010.jpg





三種儲存技術的對比

wKioL1T4kRew591zAAIoY5bl3wM460.jpg

wKiom1T4kA6yCP-qAAFkOo7E2L0643.jpg




SCSI協議

SCSI: Small Computer System Interface,SCSI最初是一種專門為小型計算機系統設計的I/O技術,但由於其架構和協議自身的優點,後被廣泛應用於實現DAS以及作為SAN的底層技術。

所有的SCSI裝置是通過一根匯流排將其連線起來,這個線就叫做SCSI匯流排。SCSI匯流排是SCSI裝置之間傳輸資料的通路。SCSI匯流排又被稱作SCSI通道。SCSI匯流排最終會連線到SCSI控制器上,SCSI控制器也稱為主機介面卡(HBA),它控制著SCSI總線上所有的裝置與計算器之間的通訊。控制器既可以是插入可用插槽的卡,也可以內建在主機板上。

因此,SCSI控制器和SCSI裝置的連線方式如下圖所示:

wKiom1T4j5WxrZMVAAFn4osqIqI716.jpg


在SCSI匯流排末端上有一個終結器,用來減小相互影響的訊號,維持SCSI鏈上的電壓恆定。




SCSI ID

一個獨立的SCSI匯流排按照規格不同可以支援8或16個SCSI目標裝置(可以稱為Target),每個SCSI目標裝置都必須具有唯一的識別符號(ID)才能正常工作。SCSI ID實際上就是這些目標裝置的地址。

窄SCSI匯流排最多允許8個、寬SCSI匯流排最多允許16個不同的SCSI目標裝置和它進行連線。但是一般SCSI控制器需要使用一個ID,因此,能使用的ID理論比實際要少一個。



LUN

在每一個SCSI目標裝置(Target)下還可以連線多個邏輯裝置(如磁碟,卷組等等),為了讓系統區分每一個邏輯裝置,因此每一個邏輯裝置都有一個LUN(Logical Unit Number)來標識自己。每個SCSI ID最多有32個LUN,預設從0開始(不過0被佔用了),每一個LUN對應著一個邏輯裝置。


SCSI通訊模型

SCSI是一個C/S架構,其中client端叫做initiator(啟動器),伺服器端叫做target(目標裝置)。SCSI協議採用了分層的思想,SCSI協議簇從上向下可以分為四層:裝置特定命令集,共享命令集,傳輸協議,網際網路層。並且SCSI的資料傳輸是以塊的方式進行的。


iSCSI協議
雖然SCSI控制器可以連線多個儲存裝置,形成自己的網路,但是它只能與直接相連的儲存裝置進行通訊,只能在在區域網內部使用,不能再乙太網上共享。因此,對於SCSI協議來說,傳輸資料的距離是非常有限的。因此,人們為了利用SCSI協議長距離的傳輸資料,於是就研發了一種新的技術,就是iSCSI協議.
iSCSI協議是一種新的儲存技術,它是將SCSI介面與乙太網(Ethernet)技術結合起來工作的,簡單的說iSCSI協議是將使用者的請求轉換成SCSI規則編碼,然後再將這些資料封裝在IP包中以便在乙太網中進行傳輸的協議。

iSCSI協議的功能
iSCSI:internet Small Computer System Interface的縮寫,即Internet小型計算機介面。iSCSI技術是一種由IBM公司研究開發的,是一個供硬體裝置使用的可以在IP協議的
上層執行的SCSI指令集,這種指令集合可以實現在IP網路上執行 SCSI協議,使其能夠在諸如高速千兆乙太網上進行路由選擇。它是基於TCP/IP協議的,用來建立和管理IP儲存裝置、主機和客戶機之間的相互連線,並建立SAN。這樣使得SAN利用SCSI協議應用在高速資料傳輸網路成為可能。不過這種傳輸是以塊級別的方式在各個儲存裝置上進行的。

iSCSI的結構
由於SCSI協議是一個C/S架構,因此iSCSI協議也是一個C/S結構,其中client是initiator,server端為target。iSCSI協議的主要功能是利用TCP/IP網路,在主機系統(可稱為initiator)和目標儲存裝置(稱為target)之間進行大量的資料封裝和可靠傳輸過程。此外,iSCSI協議還將SCSI協議封裝在IP網路上,並且執行在TCP上。
因此,ISCSI協議的協議棧為下圖所示:

wKioL1T67XKxgABQAAEgPELrafo516.jpg

iSCSI協議的工作原理
iSCSI協議的工作過程:當iSCSI主機發起資料讀寫操作後,作業系統會生成一個SCSI指令集,然後該SCSI指令集在iSCSI initiator端被封裝成iSCSI訊息包,並通過TCP/IP網路傳輸到儲存區域,當儲存區域的iSCSI target收到iSCSI訊息包時會將其解開,讀取其中的SCSI指令,然後再將其SCSI指令傳送給SCSI裝置執行其指令。當SCSI指令被執行後,返回的資料經過SCSI裝置傳送給iSCSI target時被封裝為iSCSI的響應PDU,然後再通過TCP/IP網路傳輸給iSCSI initiator端,iSCSI initiator解開其iSCSI PDU包,讀取其中的SCSI響應內容,並將其提交給作業系統進行處理,然後作業系統在將其處理後的內容返回給應用程式。

iSCSI的優點
iSCSI最大的優點就是節約成本,利用iSCSI協議構建一個儲存網路,除了需要儲存裝置,交換機、線纜還有乙太網介面以外,基本就不需要其他的裝置了,只需要在現有的網路上安裝iSCSI就可以實現構建一個比較大的儲存網路了。對於一個企業來說,這些裝置都相同廉價。因此,總體來說,其成本相對比較廉價。

iSCSI實現資料的訪問需要的條件:
1、iSCSI客戶端
iSCSI客戶端為iSCSI initiator,這個是發起I/O操作的啟動者。在RedHat Linux系統中可以通過軟體來模擬,需要安裝iSCSI裝置驅動。如iscsi-initiator-utils.rpm
iSCSI initiator具有的特性:
a)、既然是I/O操作的發起者,需要通過發現過程請求遠端快裝置。
b)、它可以與target進行持久連線
c)、linux中可以通過軟體方式來實現

2、iSCSI伺服器端
iSCSI伺服器端為iSCSI target,這個是I/O操作的執行者。在RedHat Enterprise Linux 5 中可以使用scsi-target-utils軟體包來模擬實現。
iSCSI target端具有的特性:
a)、需要匯出一個或多個塊裝置供啟動者(initiator)使用
b)、可以通過硬體和軟體的方式來實現

3、iSCSI target裝置名稱
iSCSI target名稱必須是全球唯一的,其格式為:iqn.<yyyy-mm>.<tld.domain.some.host>[:<identifier>]
其中:
iqn:iSCSI target名稱必須是以iqn開頭的
yyyy-mm:表示的是時間
tld.domain.some.host:這個表示的是一個反過來寫的域名
identifier:這個可以是任意字串
如:iqn.2015-03.com.xsl.www:storge.disk1

4、邏輯單元號LUN
LUN ID由iSCSI目標裝置(Target)分配。iSCSI 啟動端(Initiator)裝置當前支援在每個目標裝置(Target)中匯出最多256個LUN。即最大支援16個target。
對於LUN,比較通俗的理解就是磁碟分割槽、LVM卷組、RAID等等。

在iSCSI通訊中,都有一個發起I/O請求的啟動端(Initiator)和響應請求並執行實際I/O操作的目標裝置(Target),我們能夠提供 BlockLevelI/O 給 Initiator 主機,其目的不外乎是“將硬碟的排線網路化”、“把Target 主機共享磁碟幻化成Initiator 主機的磁碟”以達成更大空間、更高 I/O 速度及具有冗餘與高延展度的應用。
Target 即“儲存裝置”(Storage Device),也就是存放資料的硬碟(以硬碟陣列居多),在使用iSCSI時,會在 iSCSI 儲存裝置上去建立 LUN(Logical Unit Number)來提供給具備 iSCSI Initiator 功能的主機來存取 資料的。你可以把Target主機看作是服務端,把Initiator主機看作是客戶端。LUN 好比是個“邏輯單位磁碟”,為追求效率、冗餘與延展性,這個 LUN 通常會是由數個實體磁碟( RAID 或 LVM 技術的技術實現)所組成。


iSCSI initiator發現iSCSI target的過程:
1、ISCSI initiator按照配置檔案/etc/iscsi/iscsid.conf中配置的相應專案利用iSCSI的發現機制在網路中收索目標裝置target
2、iSCSI target將返回有效的iqn名稱給iSCSI initiator
3、ISCSI target按照配置的驗證方式接受initiator的登入並返回目標裝置target標識
4、iSCSI initiator發生查詢請求給target請求查詢target的相關資訊
5、target響應initiator的查詢請求,並將裝置的有關資訊返回給initiator
6、initiator建立可以的目標裝置target列表

iSCSI裝置具有的特性:
1. 支援報頭和資料摘要
2. 支援兩種挑戰握手協議CHAP(ChallengeHandshake Authentication Protocol)的認證方式
3. 目標端支援R2T(ReadytoTransfer)流控制
4. 從RHEL4U2開始支援多通道(multipath)
5. 支援sendtargets發現機制
6. 支援動態目標端發現
7. 具備非同步事件通知入口
8. 支援即時資料更新
9. 支援動態裝置重配
10.支援自動掛接iSCSI技術
11.支援IPV6技術

iSCSI裝置名稱
iSCSI裝置在iSCSI啟動端(Initiator)匯入的時候,其核心將按當前的裝置情況給
iSCSI裝置分配一個本地SCSI裝置名(例如/dev/sda或/dev/sdb等),如果匯入的iSCSI
裝置已被分割槽,在匯入iSCSI裝置建立本地SCSI裝置的同時也會建立相應的分割槽裝置名
(例如/dev/sda1、/dev/sda5等等),但要主要的是此SCSI裝置名並不是每次匯入是都是
固定的,比如你的主機之前沒有/dev/sda裝置,你匯入了iSCSI裝置,其被核心命名
為/dev/sda;之後你將其取消了匯入,並重新掛接了一個熱插拔裝置(如U盤或行動硬碟),
這個熱插拔裝置佔據的/dev/sda裝置;你又從新匯入了iSCSI裝置,此時其被核心分配的
裝置名就成了 /dev/sdb。

伺服器端管理配置工具tgtadm的使用
tgtadm是一個模式化的命令,其常見的模式有target、logicalunit、account
1、模式target下的語法格式:
tgtadm --lld <driver> --mode target --op {new|delete|show|update|bind|unbind} [option]
其中driver一般為iscsi --op後面的引數表示要進行的操作
new:表示增加一個target,其new的語法格式為:--tid <id> --targetname <name>
delete:表示刪除一個target,其delete的語法格式為:delete --tid <id>
show:表示顯示所有的target,後面可以接某個target的id,只顯示某個target的資訊。其show的格式為:show [--tid <id>]
update:用來修改某個特定的target的引數的。其update的格式為:update --tid <id> --name <param> --value <value>
bind:用來將某個特定的initiator和target繫結在一起,表示只接受特定的initiator的請求。其bind的語法格式為: bind --tid <id> --initiator-address <address>
unbind:表示解綁的意思。其unbind的語法格式為:unbind --tid <id> --initiator-address <address>

2、模式logicalunit下的語法格式:
tgtadm --lld <driver> --mode logicalunit --op {new|delete} [option]
其中driver一般為iscsi --op後面的引數表示要進行的操作
new:表示新建一個lun,其new的語法格式為:new --tid <id> --lun <lun> --backing-store <device-path> --bstype <type> --bsoflags
delete:表示刪除一個LUN,其delete的語法格式為:delete --tid <id> --lun <lun>

3、模式account下的語法格式:
tgtadm --lld <driver> --mode account --op {new|delete|bind|unbind} [option]
其中driver一般為iscsi --op後面的引數表示要進行的操作
new:表示新建一個賬號和密碼,new的語法格式為:new --user <name> --password <pass>
delete:刪除某個已有的賬號,其格式為:delete --user <name>
bind:表示在某個特定的target上新增賬號,其格式為:bind --tid <id> --user <name> [--outgoing],如果使用了--outgoing選項,將被新增作為出去的賬號來使用。
unbind:表示在某個特定的target上刪除某個賬號。其格式為:account --op unbind --tid <id> --user <name>

在tgtadm命令中,某些長選項可以使用短選項來代理,如:
--lld=-L
--tid=-t
--lun=-l
--backing-store=-b
--initiator-address=-I
--targetname <targetname>=-T

客戶端的管理工具iscsiadm
iscsiadm是個模式化的工具,其模式可通過-m或--mode選項指定,常見的模式有discovery、node、fw、session、host、iface幾個。這些模式的主要功能如下:
discovery: 用於發現某伺服器是否有target輸出,以及輸出了哪些target;
node: 管理跟某target的關聯關係;
session:用於顯示所有的活動會話和連線。
fw:顯示所有的啟動韌體值。
host:顯示所有的iSCSI主機。
iface:顯示/var/lib/iscsi/ifaces目錄中的所有ifaces設定。

1、discovery模式下的語法格式
iscsiadm -m discovery [ -d debug_level ] [ -I iface -t type -p ip:port [-l ] ]
discovery模式下可用選項:
-d, --debug 顯示debug資訊,級別為0-8;
-l, --login 表示登入target的意思
-t, --type 這裡可以使用的型別為sendtargets(可簡寫為st)、slp、fw和 isns,此選項僅用於discovery模式,且目前僅支援st、fw和isns;其中st表示允許每個iSCSI target傳送一個可用target列表給initiator;
-p, --portal 指定target服務的IP和埠;
-m, --mode 可用的mode有discovery, node, fw, host iface 和 session

2、node模式下的語法格式
iscsiadm -m node [ -d debug_level ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ [ -T targetname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ]
node模式下可用選項:
-L ,--loginall 表示登入到所有發現的target裝置上。all表示登入到所有的target裝置上;manual表示手動登入;automatic表示自動登入。
-T, --targetname 用於指定target的名字
-u, --logout 從target裝置上登出
-s, --stats 顯示session統計資訊
-o, --op:指定針對discoverydb資料庫的操作,其僅能為new、delete、update、show和nonpersistent其中之一;
-I, --interface:指定執行操作的iSCSI介面,這些介面定義在/var/lib/iscsi/ifaces中;

3、session模式下的語法結構
iscsiadm -m session -s:顯示會話的相關資訊

客戶端配置檔案/etc/iscsi/iscsid.conf
這個檔案中的主要引數有如下:
node.startup 設定啟動方式,可選的引數有auotmatic 和manual
node.session.auth.authmethod 設定使用CHAP認證方式,預設為NONE
node.session.auth.username target端認證所需initiator提供的使用者
node.session.auth.password target端認證所需initiator提供的密碼
node.session.auth.username_in initiator端認證所需target提供的使用者
node.session.auth.password_in initiator端認證所需target提供的密碼
discovery.sendtargets.auth.authmethod 設定使用CHAP認證方式用以發現target端匯出的裝置,預設為NONE
discovery.sendtargets.auth.username 發現操作時target端認證所需initiator提供的使用者
discovery.sendtargets.auth.passwd 發現操作時target端認證所需initiator提供的密碼
discovery.sendtargets.auth.username_in 發現操作時initiator端認證所需target提供的使用者
discovery.sendtargets.auth.password_in 發現操作時initiator端認證所需target提供的密碼

客戶端的認證方式
客戶端的認證方式有2種:一種是基於ip認證的;另一種是基於使用者認證的,使用的認證協議為CHAP。同時iscsi-initiator-utils不支援discovery的認證。
對於使用者認證而言,必須先配置基於ip認證,然後才可以配置基於使用者認證。

轉載於:https://blog.51cto.com/xslwahaha/1617781