ISCSI

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可以是任意的存儲設備,如下圖所示:

81741328

initiator和target的通信通過scsi協議,他的協議類似tcp/ip協議,分爲4層,不過只是工作在SCSI的設備上,如下圖所示:

82201578

ISCSI就是通過TCP/IP封裝的ISCSI報文,通過網絡傳送ISCSI的報文,實現遠程主機共享存儲的協議,他的數據傳輸類似VSFTP,保持兩條連接,一條會話連接,一條數據連接.


構建ISCSI

提示:

ISCSI是內核的驅動,構建ISCSI首先要有本地空閒的磁盤,並且基於TCP監聽在3260端口上,輸出塊設備,在每個initiator看來,ISCSI輸出的塊設備(lun)都是一整塊硬盤,由前面的經驗可知,工作在內核模式下的應用程序都需要一個用戶空間下的程序來幫助完成指令的輸入,而ISCSI的管理工具爲tgtadm.ISCSI作爲一個共享存儲,需要雙向的IP認證或用戶認證(用的少).

規劃:

84321765

安裝服務器端工具:

  1: yum install scsi-target-utils -y   #安裝服務器端工具

創建新分區,創建完成後使用 partx -a /dev/sdb重讀一下磁盤信息,並且不要格式化,這裏就不演示創建磁盤了

查看服務器安裝生成的scsi-target-utils文件

  1: rpm -ql scsi-target-utils
  2: /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> iscsi
  6: -m --mode <mode> ;<mode>: target, logical unit等
  7: -o --op <operation>;<operation>: new, show, delete, bind, unbind
  8: -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:server1
 13: -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    #刪除一個target
  2: 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,不是單個的lun
  2: 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, --login
  8: -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 和 session
 11: -T, --targetname=targetname  用於指定target的名字
 12: -u, --logout 
 13: -o, --op=OPEARTION:指定針對discoverydb數據庫的操作,其僅能爲new、delete、update、show和nonpersistent其中之一;
 14: -I, --interface=[iface]:指定執行操作的iSCSI接口,這些接口定義在/var/lib/iscsi/ifaces中;

安裝客戶端工具,客戶端工具並不是監聽套接字的,他是初始化內核模塊的,以及讓內核識別存儲空間的

  1: yum install iscsi-initiator-utils
  2: rpm -ql iscsi-initiator-utils
  3: ...
  4: /etc/iscsi/iscsid.conf   #配置文件,是下面iscsid所要用到的配置信息
  5: /etc/rc.d/init.d/iscsi   #服務腳本1,這兩個服務腳本都得運行
  6: /etc/rc.d/init.d/iscsid  #服務腳本2
  7: /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.iscsi 
  2: cat /etc/iscsi/initiatorname.iscsi 
  3: echo "InitiatorAlias=lidefu1" >> /etc/iscsi/initiatorname.iscsi 
  4: cat /etc/iscsi/initiatorname.iscsi 

啓動客戶端的iscsi和iscsid並且設置開機自動啓動,兩個節點都需要設置

  1: service iscsi start
  2: service iscsid start
  3: chkconfig iscsi on
  4: 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 -l
  2: 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/*   #刪除系統保存的信息


基於配置文件配置iscsi, /etc/tgt/target.conf
  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的名字,會自動根據這個名字綁定設備,和lun
  7:         backing-store /dev/sdb1       #後端設備
  8:         initiator-address 172.16.21.0/16  #授權給這個網段的設備訪問
  9: </target>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章