V 6 iSCSI
V 6 iSCSI
?
一、相關概念:
computer architecture計算機體系結構
如圖:
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有)
SCSI協議是分層的(分層的好處,某一個層次可以隨意替換,而不至影響全局),從上至下依次為:
common access method;
scsi device-type specific command set;(不同設備類型的特有命令集,如光盤、硬盤等)
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)
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方面做了各種優化,所以性能好)
注:若報文由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認證)
[root@node4 ~]# tgtadm --lld iscsi --mode target --op show
……
???????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/
?
server-side(node4):
[root@node4 ~]# tgtadm --lld iscsi --mode target --op show(確保已開啟IP認證,查看ACL information,因為iscsi-initiator不支持discovery認證,通過IP認證先發現后,再用帳號密碼認證)
Account information:
???ACL information:
???????192.168.41.0/24
[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
[root@node4 ~]# tgtadm --lld iscsi --mode target --op show
???Account information:
???????iscsiuser
???ACL information:
???????192.168.41.0/24
?
client-side(node{1,2}):
[root@node1 ~]# service iscsi restart(no records found表示沒有任何與target關聯的設備)
iscsiadm: No matching sessions found……
Setting up iSCSI targets: iscsiadm: Norecords found
??????????????????????????????????????????????????????????[? OK? ]
[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.
注:認證失敗提示如下: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
</target>
注意:第二種方式可指定lun號,每一個backing-store段都要包起來
[root@node4 ~]# service tgtd restart(使用第二種方式的配置文件,重啟服務)
停止 SCSI target daemon:?????????????????????????????????[確定]
正在啟動 SCSI target daemon:?????????????????????????????[確定]
[root@node4 ~]# tgtadm --lld iscsi --mode target --op show
Target 1:iqn.2015-07.com.magedu:teststore.disk1
???System information:
???????Driver: iscsi
???????State: ready
???I_T nexus information:
???LUN information:
???????LUN: 0
???????????Type: controller
???????????SCSI ID: IET???? 00010000
???????????SCSI SN: beaf10
???????????Size: 0 MB, Block size: 1
???????????Online: Yes
???????????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
???????????Online: Yes
???????????Removable media: No
???????????Prevent removal: No
???????????Readonly: No
???????????Backing store type: rdwr
???????????Backing store path: /dev/sdb
???????????Backing store flags:
???Account information:
???????iscsi
???ACL information:
???????192.168.41.131
???????192.168.41.132
?
轉載于:https://blog.51cto.com/jowin/1726250
總結
- 上一篇: linux下通过rsync+inotif
- 下一篇: 开源跳板机(堡垒机)Jumpserver