SCSI-小型計算機系統接口(Small Computer System Interface):是一種計算機總線的接口,相較於IED的接口,有着磁盤轉速快,性能高,穩定等優勢,不過價錢也很貴,適用於企業級的存儲.SCSI是一種DAS(Direct Attached Storage:直接附加存儲)存儲的設備,他的總線有兩種類型:窄帶:能夠串行鏈接6個target設備和一個終結器,寬帶:能夠鏈接15個target設備和一個終結器.SCSI設備由一個initiator設備控制,initiator能夠完成的工做不少,除了驅動由內核完成之外,其餘全部的數據操做均可以有initiator完成,initiator後接多個target設備,每一個target設備也有較弱的控制能力,而每一個target設備上又可接多個lun設備,lun能夠是任意的存儲設備,以下圖所示:node
initiator和target的通訊經過scsi協議,他的協議相似tcp/ip協議,分爲4層,不過只是工做在SCSI的設備上,以下圖所示:web
ISCSI就是經過TCP/IP封裝的ISCSI報文,經過網絡傳送ISCSI的報文,實現遠程主機共享存儲的協議,他的數據傳輸相似VSFTP,保持兩條鏈接,一條會話鏈接,一條數據鏈接.數據庫
構建ISCSIvim
提示:後端
ISCSI是內核的驅動,構建ISCSI首先要有本地空閒的磁盤,而且基於TCP監聽在3260端口上,輸出塊設備,在每一個initiator看來,ISCSI輸出的塊設備(lun)都是一整塊硬盤,由前面的經驗可知,工做在內核模式下的應用程序都須要一個用戶空間下的程序來幫助完成指令的輸入,而ISCSI的管理工具爲tgtadm.ISCSI做爲一個共享存儲,須要雙向的IP認證或用戶認證(用的少).服務器
規劃:網絡
安裝服務器端工具:session
1: yum install scsi-target-utils -y #安裝服務器端工具
建立新分區,建立完成後使用 partx -a /dev/sdb重讀一下磁盤信息,而且不要格式化,這裏就不演示建立磁盤了dom
查看服務器安裝生成的scsi-target-utils文件tcp
1: rpm -ql scsi-target-utils2: /etc/rc.d/init.d/tgtd #服務程序3: ...4: /etc/tgt/targets.conf #配置文件5: /usr/sbin/tgt-admin #這個命令是使用上面的配置文件的6: ...7: /usr/sbin/tgtadm #命令行工具,重啓就失效8: ...
查看服務器tgtadm的命令使用幫助
1: man tgtadm #經常使用選項2: tgtadm [OPTIONS]... [-L --lld <driver>] [-o --op <operation>] [-m --mode <mode>]3: [-t --tid <id>] [-T --targetname <targetname>] [-l --lun <lun>]4: [-b --backing-store <path>] [-I --initiator-address <address>]5: -L --lld <driver> iscsi6: -m --mode <mode> ;<mode>: target, logical unit等7: -o --op <operation>;<operation>: new, show, delete, bind, unbind8: -t --tid <id>:指定target的ID;9: -T --targetname <targetname>:指定target的名稱10: target的命名機制:爲了保證全局以惟一,命名要遵循iqn規範11: iqn: iqn.yyyy-mm.reverse_domain.STRING[:substring]12: iqn.2014-04.com.magedu.web:server113: -l --lun <lun>:指定LUN的號碼;14: -b --backing-store <path>:關聯到某指定LUN上的後端存儲設備,能夠是分區,也能夠是磁盤;建議使用磁盤;15: -I --initiator-address <address>:指定受權訪問某target的IP地址來源;
啓動服務器tgtd
1: service tgtd start
建立一個服務器target
1: tgtadm -L iscsi -o new -m target -t 1 -T iqn.2014-04.com.lidefu.test1 #2: tgtadm -L iscsi -o show -m target
刪除一個target
1: tgtadm -L iscsi -o delete -m target -t 1 #刪除一個target2: tgtadm -L iscsi -o show -m target #查看咯
建立一個服務器lun
1: tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sdb2 #lun要從1號開始,由於0號lun是控制器2: tgtadm -L iscsi -o show -m target
刪除一個服務器的lun
1: tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 1
服務器設置IP認證,受權給172.16.21.0/24網段的IP訪問
1: tgtadm -L iscsi -o bind(unbind:解綁定) -m target -t 1 -I 172.16.21.0/24 #受權的是整個target,不是單個的lun2: tgtadm -L iscsi -o show -m target
ISCSI客戶端工具的命令使用
1: iscsiadm是個模式化的工具,其模式可經過-m或--mode選項指定,常見的模式有discovery、node、fw、session、host、iface幾個,若是沒有額外指定其它選項,則discovery和node會顯示其相關的全部記錄;session用於顯示全部的活動會話和鏈接,fw顯示全部的啓動固件值,host顯示全部的iSCSI主機,iface顯示/var/lib/iscsi/ifaces目錄中的全部ifaces設定。2:3: iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] [ -I iface -t type -p ip:port [ -l ] ]4: iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ]5:6: -d, --debug=debug_level 顯示debug信息,級別爲0-8;7: -l, --login8: -t, --type=type 這裏可使用的類型爲sendtargets(可簡寫爲st)、slp、fw和 isns,此選項僅用於discovery模式,且目前僅支持st、fw和isns;其中st表示容許每一個iSCSI target發送一個可用target列表給initiator;9: -p, --portal=ip[:port] 指定target服務的IP和端口;10: -m, --mode op 可用的mode有discovery, node, fw, host iface 和 session11: -T, --targetname=targetname 用於指定target的名字12: -u, --logout13: -o, --op=OPEARTION:指定針對discoverydb數據庫的操做,其僅能爲new、delete、update、show和nonpersistent其中之一;14: -I, --interface=[iface]:指定執行操做的iSCSI接口,這些接口定義在/var/lib/iscsi/ifaces中;
安裝客戶端工具,客戶端工具並非監聽套接字的,他是初始化內核模塊的,以及讓內核識別存儲空間的
1: yum install iscsi-initiator-utils2: rpm -ql iscsi-initiator-utils3: ...4: /etc/iscsi/iscsid.conf #配置文件,是下面iscsid所要用到的配置信息5: /etc/rc.d/init.d/iscsi #服務腳本1,這兩個服務腳本都得運行6: /etc/rc.d/init.d/iscsid #服務腳本27: /etc/rc.d/init.d/iscsid #上面的iscsid.conf使用到的配置信息8: /sbin/iscsi-iname #每個initiator爲了讓服務器端識別,都須要有本身的名字,保存在/etc/iscsi/initiatorname.iscsi下9: /sbin/iscsiadm #能夠查看有哪些lun或target可使用,客戶端工具10: /sbin/iscsid #11: ...
爲客戶端的Initiator命名和取別名,兩個節點別名分別是lidefu1和lidefu2
1: echo "InitiatorName=`iscsi-iname -p iqn.2014-04.com.lidefu`" > /etc/iscsi/initiatorname.iscsi2: cat /etc/iscsi/initiatorname.iscsi3: echo "InitiatorAlias=lidefu1" >> /etc/iscsi/initiatorname.iscsi4: cat /etc/iscsi/initiatorname.iscsi
啓動客戶端的iscsi和iscsid而且設置開機自動啓動,兩個節點都須要設置
1: service iscsi start2: service iscsid start3: chkconfig iscsi on4: chkconfig iscsid on
發現共享主機,在客戶端上執行命令
1: iscsiadm -m discovery -t st -p 172.16.21.1
登陸主機格式化掛載使用
1: iscsiadm -m node -T iqn.2014-04.com.lidefu.test1 -p 172.16.21.1 -l2: fdisk -l /dev/sd[a-z] #查看是否有新的磁盤3: fdisk /dev/sdc #對該磁盤分區4: mke2fs -t ext4 /dev/sdc1 #對該磁盤進行格式化5: 注:在服務器上看該磁盤沒有任何區別,仍是未格式化的狀態
注:這時候若是兩個客戶端同時掛載使用服務器端共享出來的磁盤,並寫數據,會致使數據不一致問題.嚴重時會崩潰.共享存儲不能同時被兩個主機掛載使用,由於他們修改的數據都是保存在內存中的,因此共享存儲使用單機文件系統時,毫不容許二者同時掛載,同時寫同一個文件的,否則會致使崩潰.
客戶端登陸過服務器端,之後的重啓均可以自動掛載是應爲,客戶端發現過的信息都保存了,以下:
1: ls /var/lib/iscsi/ #全部的信息都保存在這個目錄下2: ls /var/lib/iscsi/send_targets/ #此前發現過的服務器3: ls /var/lib/iscsi/ifaces/ #顯示鏈接是鎖使用的本地接口,4: ls /var/lib/iscsi/nodes/ #節點登陸信息5: 必要時能夠刪除這些信息,就不會自動掛載了
接上,若是手動刪會有影響,由於他已經生成了一些元數據,因此,需執行如下命令
1: iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 –u #先登出 #先登出2: iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 -o delete #刪除元數據3: rm -rf /var/lib/iscsi/* #刪除系統保存的信息
1: cd /etc/tgt/ #進入配置文件目錄2: cp targets.conf targets.conf.bak #備份文件,沒什麼好說的,請養成良好的習慣3: vim targets.conf #配置咯4:5: default-driver iscsi #默認驅動
6: <target iqn.2014-04.com.lidefu.test1> #target的名字,會自動根據這個名字綁定設備,和lun7: backing-store /dev/sdb1 #後端設備8: initiator-address 172.16.21.0/16 #受權給這個網段的設備訪問9: </target>