天天看點

V 6 iSCSI

一、相關概念:

computer architecture計算機體系結構

<a href="http://s3.51cto.com/wyfs02/M01/78/0A/wKioL1Z0pjqD4oF5AABkLKTH6ZQ305.jpg" target="_blank"></a>

如圖:

north bridge以上是核心系統(核心單元)

south bridge以下是外圍總線(I/O系統,提供輔助性功能)

USB device和IDE device能提供持久性存儲,若從這些裝置上讀寫資料時,要先加載至記憶體中,CPU是在記憶體中進行處理

IDE存儲總線(連接配接裝置的數量少,一個控制器上隻能連接配接一主一從兩個裝置,主機闆上提供的IDE口也很難有很多,IDE在設計上實作協定資料單元PDU封裝的能力很差,并且經此總線将資料以塊方式傳輸至裝置上時需要大量的CPU時鐘周期參與(CPU要花大量時間進行讀或寫的操作)在非常繁忙的伺服器上這并不适合)

SCSI工業總線(總體性能比IDE及SATA要快,連接配接總線的擴充卡adapter(HBA卡,host base adapter),這個卡内置的控制晶片,來完成協定資料單元的封裝,這樣大大降低了對CPU時鐘周期的占用,使得CPU解脫出來可完成其它工作)

SCSI(small computersystem interface,SCSI是一種IO技術;規範了一種并行的I/O總線和相關的協定;資料傳輸是以塊的方式進行;實作了裝置無關性、多裝置并行、高帶寬、低系統開銷)

SCSI總線通過SCSI控制器來和硬碟之類的裝置進行通信;SCSI控制器邏輯上可分為一個任務管理單元和多個邏輯單元(LU,logical unit);LUN,LU number是為了使用和描述更多裝置及對象而引進的一個方法,每個target上最多有32個LUN,一個LUN對應一個邏輯裝置

SCSI總線(寬總線(16個口,15個連接配接裝置,最後一個連接配接終結器terminate);窄總線(共8口,7個口連接配接裝置,另一個口用于terminate))

SCSI總線和SAS總線的差別:

SCSI總線(并行,一根線纜供多個裝置連接配接(多個裝置共享同一根線纜),以ultra320為例速率320MB/s)

SAS總線(串行,serial attachedSCSI,擴充卡上有多個口,每個口連接配接一個裝置,另還有擴充口expander可連接配接多個裝置(類似邏輯分區的概念),速率達到6Gbps,0.75GB/s)

注:SCSI總線,線纜長度有限,僅能共享有限個主機

SAN(storage area network,有些場景需要多個裝置為多個主機同時使用,且要能傳輸更長的距離,能夠傳輸SCSI封包并能路由到目标裝置并存儲,這種網絡結構叫SAN)

SAN(high performance)和NAS(low performance)的差別:

FS(SAN的FS在本地(可建立分區、格式化);NAS的FS在server-side(是檔案伺服器))

block I/O(SAN在client-side和server-side都有;NAS僅server-side有)

<a href="http://s2.51cto.com/wyfs02/M02/78/0B/wKiom1Z0pj-iMFjSAACuk-qvMYU556.jpg" target="_blank"></a>

<a href="http://s4.51cto.com/wyfs02/M02/78/0A/wKioL1Z0plzTTBmeAABCFrytliA662.jpg" target="_blank"></a>

SCSI協定是分層的(分層的好處,某一個層次可以随意替換,而不至影響全局),從上至下依次為:

common access method;

scsi device-type specific command set;(不同裝置類型的特有指令集,如CD光牒、硬碟等)

shared command set;(公共指令集,如存儲、讀取等)

transport protocol;

physical interconnects;(将SCSI封包通過某一種線纜傳輸(從源到目的所用的傳輸媒體,所傳輸的封包格式))

注:SCSI封包(從上至下依次封裝各種首部,如在資料上封裝特有指令集、公共指令集)通過線纜傳輸(早期使用ATAPi);實體媒體不同,傳輸的方式就不同,隻要将相應的實體層替換為其它媒體類型即可,如将ATAPi替換為iSCSI或FC或FCoE

FC代價高昂(fiber channel,不能利用現有網絡,需重建光網絡,主機的光口要與FC SWITCH的光口綁定,工作機制不是IP這種方式,是光網絡傳輸機制,另需要專門的管理人員學習相關協定及裝置管理知識,整套裝置及各部件價格不菲)

FCoE(FC over ethernet,基于以太網的FC,且僅能在以太網上傳輸(雙絞線)不能在公網上傳輸,封包(data經SCSI封裝--&gt;FC封裝--&gt;FCoE封裝--&gt;轉為以太網幀)在ethernet上傳輸,注意不經TCP/IP封裝,商業,symmetix公司,非開源,使用此種方式要求以太網至少是10Gbps(萬兆))

iSCSI(internet SCSI,開源,利用現有的TCP/IP網絡傳輸SCSI封包,基于IP封包實作分組傳送,通過某個服務監聽在某個socket上,c/s架構,client(initiator)發起請求,server(target)随時接收請求并給予響應)

注:iSCSI與FCoE傳輸性能差别不大

注:storage protocol(FC、iSCSI、FCoE、SAS)

<a href="http://s3.51cto.com/wyfs02/M00/78/0B/wKiom1Z0pmDwizvyAAB1-zQuE78109.jpg" target="_blank"></a>

<a href="http://s1.51cto.com/wyfs02/M01/78/0B/wKiom1Z0pnjTeHbaAACIhekp3G8644.jpg" target="_blank"></a>

client-side:

如圖:SCSI driver封裝SCSI Cmds,iSCSI driver封裝iSCSI指令,這些驅動可以以硬體(不占用CPU時間,性能高,OS核心直接交由裝置驅動處理,而不經由軟體方式工作的核心子產品)或軟體(性能差)方式運作,适合client上安裝的基于iSCSI的TCP/IP網卡有(性能從高到低依次為):

iSCSI HBA卡(内建SCSI指令及TOE引擎的ASIC晶片的适配卡,性能最佳,價格昂貴,CPU占用率10%)

iSCSI TOE卡(内建TOE引擎的ASIC晶片适配卡,但SCSI指令由軟體方式運作,iSCSI指令在硬體中完成,CPU占用率40%)

iSCSI initiator驅動程式(完全軟體方式運作,性能最差)

server-side:

iSCSI協定的服務(使用者空間的守護程序)監聽在某個socket上(tcp/3260port)

iSCSI session(同ssh一樣,連接配接建立後通道會一直存在)

iSCSI connection(每發送一次資料就是一個iSCSI connection)

注:server-side隻需提供iscsi功能(很多公司銷售的iscsi裝置是極簡化的OS,僅提供iscsi的基本功能和管理工具,OS在TCP/IP網絡和iscsi方面做了各種優化,是以性能好)

<a href="http://s1.51cto.com/wyfs02/M00/78/0A/wKioL1Z0ppnQYe7wAABtF7GHmbg986.jpg" target="_blank"></a>

注:若封包由client--&gt;server,server檢視ip首部是否本機,若是則接收,再檢視tcp首部的目标port是否3260,若是則交由使用者空間的scsi服務,scsi服務(iscsi驅動)接收到封包檢視指令發現是個存儲指令,調用本地的硬體裝置驅動程式進行存儲(這裡特殊的是為提高scsi的工作性能,scsi服務工作在核心中)

注:scsi指令隻是由iscsi或scsi完成資料存取控制機制的,若本地的裝置不是scsi裝置,則調用或交由對應的硬碟驅動程式來完成

二、操作(環境rhel5.8 32bit 2.6.18):

scsi-target-utils(server-side工具,target,隻是工具,真正服務是在核心中完成)

iscsi-initiator-utils(client-side驅動,initiator)

(1)server-side(node4)建立共享,client-side(node{1,2})使用共享存儲(基于IP認證)

server-side(node4):

[root@node4 ~]# fdisk /dev/sdb(+5G,不要格式化)

[root@node4 ~]# partprobe /dev/sdb

[root@node4 ~]# yum -y install scsi-target-utils

[root@node4 ~]# rpm -ql scsi-target-utils

/etc/rc.d/init.d/tgtd

/etc/sysconfig/tgtd

/etc/tgt/targets.conf

/usr/sbin/tgt-admin(Linux SCSI Target Configuration Tool,直接用于編輯配置檔案)

/usr/sbin/tgtadm(Linux SCSI Target Administration Utility指令行管理工具,建立target、建立lun、IP認證等)

[root@node4 ~]# service tgtd start

正在啟動 SCSI target daemon:                             [确定]

[root@node4 ~]# netstat -tnlp | grep tgtd

tcp       0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      4863/tgtd          

tcp       0      0 :::3260                     :::*                        LISTEN      4863/tgtd 

[root@node4 ~]# chkconfig tgtd on

[root@node4 ~]# chkconfig --list tgtd

tgtd               0:關閉      1:關閉      2:啟用      3:啟用      4:啟用      5:啟用      6:關閉

[root@node4 ~]# tgtadm -h(模式化指令,常用模式target、logicalunit、account)

#tgtadm --lld iscsi --mode target --op new--tid ID_NUM --targetname IQN(add a new target with &lt;id&gt; and &lt;name&gt;. &lt;id&gt; must not be zero.添加一個target,id号不能為0(0為保留,為本機所用);IQN,ISCSI Qualified Name)

注:IQN格式:iqn.yyyy-mm.&lt;reserve domain name&gt;:identifier(reserve domain name中各段要倒寫,如iqn.2015-07.com.magedu:tstore.disk1)

#tgtadm --lld iscsi --mode target --op show(show all the targets)

#tgtadm --lld iscsi --mode logicalunit --op new --tid ID_NUM --lun LUN --backing-store PATH(add a new logicalunit with &lt;lun&gt; to the specific target with &lt;id&gt;,添加邏輯單元到指定的target上,一個target上最多32個LUN)

#tgtadm --lld iscsi --mode target --op bind–tid ID_NUM --initiator-address ADDRESS(enable the target toaccept the specific initiators将允許使用此裝置的client位址與target綁定,基于IP認證)

注:

--op new|delete|show|update|bind|unbind

--lld(-L),--mode(-m),--op(-o),--tid(-t),--targetname(-T),--lun(-l),--backing-store(-b),--initiator-address(-I)

[root@node4 ~]# tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2015-07.com.magedu:teststore.disk1

[root@node4 ~]# tgtadm --lld iscsi --mode target --op show

[root@node4 ~]# tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb

[root@node4 ~]# tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address 192.168.41.0/24(基于IP認證)

……

       LUN: 0

       LUN: 1

           Online: Yes

   Account information:

   ACL information:

       192.168.41.0/24

client-side(node1):

[root@node1 ~]# rpm -ql iscsi-initiator-utils(系統預設已安裝此包)

/etc/iscsi

/etc/iscsi/iscsid.conf

/etc/logrotate.d/iscsiuiolog

/etc/rc.d/init.d/iscsi(啟動此項,iscsi會自動啟動iscsid)

/etc/rc.d/init.d/iscsid

/sbin/iscsi-iname(此指令會生成每一個initiator的名稱)

/sbin/iscsiadm(open-iscsi administration utility,initiator端的管理工具)

/var/lib/iscsi/ifaces(此目錄記錄通過哪個網卡連接配接target)

/var/lib/iscsi/nodes(此目錄下記錄建立關系的target端node的相關資訊)

/var/lib/iscsi/send_targets(此目錄下記錄與target建立關系的目錄,目錄名為target端的IP和端口)

[root@node1 ~]# echo"InitiatorName=`iscsi-iname -p iqn.2015-07.com.magedu`" &gt;/etc/iscsi/initiatorname.iscsi (生成指定字首的initiator名稱,另此配置檔案還可添加别名,如InitiatorAlias=node1.magedu.com)

[root@node1 ~]# cat/etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2015-07.com.magedu:62bf666dd2

[root@node1 ~]# iscsiadm -h(模式化的指令,常用的模式discovery、node)

#man iscsiadm

#iscsiadm -m discovery [-d DEBUG_LEVEL] -t TYPE -p IP(發現指定伺服器是否有target輸出或輸出了哪些target;DEBUG_LEVEL有0-8;TYPE四種,sendtargets通常使用此種簡寫為st、slp、isns、fw;-p,--portal入口,指定target伺服器的IP位址)

#iscsiadm -m node -T TARGET_NAME -p IP -l|-u(建立或解除與指定的target間的關聯關系;-l,--login;-u,--logout)

[root@node1 ~]# iscsiadm -m discovery -t st -p 192.168.41.134

192.168.41.134:3260,1iqn.2015-07.com.magedu:teststore.disk1

[root@node1 ~]# iscsiadm -m node -T iqn.2015-07.com.magedu:teststore.disk1 -p 192.168.41.134 -l

Logging in to [iface: default, target:iqn.2015-07.com.magedu:teststore.disk1, portal: 192.168.41.134,3260] (multiple)

Login to [iface: default, target:iqn.2015-07.com.magedu:teststore.disk1, portal: 192.168.41.134,3260]successful.

[root@node1 ~]# fdisk -l(可查到關聯到本機的裝置,可進行格式化)

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

[root@node1 ~]# fdisk /dev/sdb(+2G)

[root@node1 ~]# mkdir /mydata

[root@node1 ~]# mkfs.ext3 /dev/sdb1

[root@node1 ~]# mount /dev/sdb1 /mydata

[root@node1 ~]# cd /mydata

[root@node1 mydata]# touch a.txt

[root@node1 mydata]# ls

a.txt lost+found

client-side(node2):執行與node1相同的操作,更改此node的InitiatorName,啟動服務,發現target、與target建立關聯關系、挂載裝置

[root@node2 ~]# cd /mydata

[root@node2 mydata]# touch b.txt

[root@node2 mydata]# ls

b.txt lost+found

[root@node2 mydata]# cd

[root@node2 ~]# cd /var/lib/iscsi

[root@node2 iscsi]# ls

ifaces isns  nodes  send_targets slp  static

[root@node2 iscsi]# ls send_targets/192.168.41.134,3260/

iqn.2015-07.com.magedu:teststore.disk1,192.168.41.134,3260,1,default  st_config

注:以上操作,兩node使用的是單機FS,若兩個node同時挂載使用,某一node新建立的一個檔案,在另一node有可能會看不到(因為還在記憶體中尚未同步到磁盤);若兩node同時編輯磁盤中的同一檔案,儲存後FS會崩潰

(2)基于使用者名密碼認證(CHAP為雙向認證,challenge hand authentication protocol,挑戰式握手認證協定,以下舉例是單向認證(server-side建立帳号密碼,要求client認證))

client-side(node{1,2}):

[root@node1 mydata]# vim /etc/iscsi/iscsid.conf

node.startup = automatic

node.leading_login = No

# CHAP Settings

node.session.auth.authmethod = CHAP

node.session.auth.username = iscsiuser(server-side建立的使用者名和密碼,要求client認證)

node.session.auth.password = iscsiuser

#node.session.auth.username_in = username_in(client建立的使用者名和密碼,要求server-side認證)

#node.session.auth.password_in = password_in

#discovery.sendtargets.auth.username = username(關于發現的使用者名和密碼認證,openiscsi不支援此項,忽略)

#discovery.sendtargets.auth.password = password

[root@node1 ~]# cd

[root@node1 ~]# iscsiadm -m node -T iqn.2015-07.com.magedu:teststore.disk1 -p 192.168.41.134 -u(--logout,解除關聯關系)

 [root@node1~]# iscsiadm -m node -T iqn.2015-07.com.magedu:teststore.disk1 -p 192.168.41.134 -o delete(-o delete,将有關與target上建立關聯關系的相關檔案删除,若不删除重新開機服務後會自動登入到此target)

[root@node1 ~]# rm -rf /var/lib/iscsi/send_targets/

[root@node4 ~]# tgtadm --lld iscsi --mode target --op show(確定已開啟IP認證,檢視ACL information,因為iscsi-initiator不支援discovery認證,通過IP認證先發現後,再用帳号密碼認證)

Account information:

[root@node4 ~]# tgtadm -h

[root@node4 ~]# tgtadm --lld iscsi --mode account --op new --user iscsiuser --password iscsiuser

[root@node4 ~]# tgtadm --lld iscsi --mode account --op bind --tid 1 --user iscsiuser

[root@node4 ~]# tgtadm --lld iscsi --mode account --op show

Account list:

iscsiuser

       iscsiuser

[root@node1 ~]# service iscsi restart(no records found表示沒有任何與target關聯的裝置)

iscsiadm: No matching sessions found……

Setting up iSCSI targets: iscsiadm: Norecords found

                                                          [  OK  ]

注:認證失敗提示如下:iscsiadm: Could not login to [iface: default, target:iqn.2015-07.com.magedu:teststore.disk1, portal: 192.168.41.134,3260].

iscsiadm: initiator reported error (24 -iSCSI login failed due to authorization failure)

iscsiadm: Could not log into all portals

注:client-side重新開機服務後會自動登入并關聯到target;server-side重新開機服務後要想永久有效要編輯配置檔案/etc/tgt/targets.conf

(3)編輯server-side配置檔案/etc/tgt/targets.conf

[root@node4 ~]# vim /etc/tgt/targets.conf

方式一:

default-driver iscsi

&lt;target iqn.2015-07.com.magedu:teststore.disk1&gt;

   backing-store /dev/sdb(這樣寫sdb和sdc會依次被識别為lun1和lun2)

   backing-store /dev/sdc

   initiator-address 192.168.41.0/24(IP認證)

   incominguser iscsiuser iscsiuser(帳号密碼認證)

&lt;/target&gt;

注:可将backing-store替換為direct-store,先按次序識别backing-store指定的硬碟,再按次序識别direct-strore指定的硬碟,backing-store優先級比direct-store優先級高(backing-store還可指定分區)

方式二:

&lt;targetiqn.2015-07.com.magedu:teststore.disk1&gt;

   &lt;backing-store /dev/sdb&gt;

       vender_id magedu

       lun 5

   &lt;/backing-store&gt;

   incominguser iscsi iscsi

   initiator-address 192.168.41.131

   initiator-address 192.168.41.132

注意:第二種方式可指定lun号,每一個backing-store段都要包起來

[root@node4 ~]# service tgtd restart(使用第二種方式的配置檔案,重新開機服務)

停止 SCSI target daemon:                                 [确定]

Target 1:iqn.2015-07.com.magedu:teststore.disk1

   System information:

       Driver: iscsi

       State: ready

   I_T nexus information:

   LUN information:

           Type: controller

           SCSI ID: IET     00010000

           SCSI SN: beaf10

           Size: 0 MB, Block size: 1

           Removable media: No

            Prevent removal: No

           Readonly: No

           Backing store type: null

           Backing store path: None

           Backing store flags:

       LUN: 5

           Type: disk

           SCSI ID: IET     00010005

           SCSI SN: beaf15

           Size: 10737 MB, Block size: 512

           Prevent removal: No

           Backing store type: rdwr

           Backing store path: /dev/sdb

       iscsi

       192.168.41.131

       192.168.41.132

本文轉自 chaijowin 51CTO部落格,原文連結:http://blog.51cto.com/jowin/1726250,如需轉載請自行聯系原作者