一、相關概念:
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封裝-->FC封裝-->FCoE封裝-->轉為以太網幀)在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-->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 <id> and <name>. <id> must not be zero.添加一個target,id号不能為0(0為保留,為本機所用);IQN,ISCSI Qualified Name)
注:IQN格式:iqn.yyyy-mm.<reserve domain name>: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 <lun> to the specific target with <id>,添加邏輯單元到指定的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`" >/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
<target iqn.2015-07.com.magedu:teststore.disk1>
backing-store /dev/sdb(這樣寫sdb和sdc會依次被識别為lun1和lun2)
backing-store /dev/sdc
initiator-address 192.168.41.0/24(IP認證)
incominguser iscsiuser iscsiuser(帳号密碼認證)
</target>
注:可将backing-store替換為direct-store,先按次序識别backing-store指定的硬碟,再按次序識别direct-strore指定的硬碟,backing-store優先級比direct-store優先級高(backing-store還可指定分區)
方式二:
<targetiqn.2015-07.com.magedu:teststore.disk1>
<backing-store /dev/sdb>
vender_id magedu
lun 5
</backing-store>
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,如需轉載請自行聯系原作者