利用ISCSI存儲技術構建IP存儲網絡

本文重點介紹如何構建一個PC構架的iSCSI存儲系統,這裏咱們選擇一個普通的、性能優良的、可支持多塊磁盤的PC服務器做爲iSCSI target,而且選擇一個成熟穩定的iSCSI target軟件iscsitarget,基本配置環境如表1所示:
表1node

  這裏將Target主機第三塊硬盤(硬盤標識爲/dev/sdc)做爲iSCSI共享磁盤,硬盤大小爲10G,分別共享給一臺windows主機和一臺Linux主機,基本結構如圖1所示:linux

圖1
 數據庫

下面開始詳細介紹iSCSI網絡存儲的搭建過程。windows

1、安裝iSCSI target軟件
安裝iscsitarget軟件是在Target主機上進行的,即上面設定的192.168.12.246主機,這裏咱們選擇的target軟件是iscsitarget,讀者能夠從http://iscsitarget.sourceforge.net下載相應的版本,這裏下載的是iscsitarget-1.4.20.1.tar.gz,接着開始進行編譯安裝:
[root@iscsi-target iscsi]#tar -xzvf iscsitarget-1.4.20.1.tar.gz
[root@iscsi-target iscsi]#cd iscsitarget-1.4.20.1
[root@iscsi-target iscsitarget-1.4.20.1]#make
[root@iscsi-target iscsitarget-1.4.20.1]#make install
 Iscsitarget安裝完畢後,會建立/etc/iet/目錄,此目錄下有Iscsitarget的相關配置文件,接着就能夠啓動Iscsitarget服務了,啓動或關閉Iscsitarget服務的命令以下:
[root@iscsi-target iscsi]# service iscsi-target       
Usage: /etc/init.d/iscsi-target {start|stop|restart|condrestart|status}
若是要讓iscsi-target服務開機自動運行,需執行以下操做:
[root@iscsi-target iscsi]#chkconfig --level 35 iscsi-target on
到此爲止,iscsitarget安裝完成。服務器

2、配置一個簡單的iSCSI target
 iSCSI Enterprise Target的主配置文件爲/etc/iet/ietd.conf,此文件中的選項默認所有被註釋掉了,有須要用到這些選項時,再將註釋去掉便可。
 打開ietd.conf文件,首先找到相似以下行:
#Target iqn.2001-04.com.example:storage.disk2.sys1.xyz
此選項表示該iSCSI Target的命名,先將前面的「#」號去掉, Target的命名在同一子網內應該是惟一的,標準命名方式爲:
iqn.yyyy-mm.<reversed domain name>[:identifier]
其中:
 iqn:表示「iSCSI Qualified Name」,簡稱iqn。
 yyyy-mm:表示年份-月份。這裏是2001-04。
 reversed domain name:表示倒過來的域名,這裏是com.example。
 identifier:表示識別代碼,這裏是storage.disk2.sys1.xyz。
接下來,就是要設定 LUN(Logical Unit Number),找到相似以下行:
#Lun 0 Path=/dev/sdb,Type=fileio,ScsiId=xyz,ScsiSN=xyz
將前面的「#」號去掉,「Lun 0 Path=/dev/sdb」表示塊設備號爲0,映射的磁盤爲/dev/sdb,「Type」值fileio是默認的,能夠用於磁盤、file和LVM, 這裏設定的是「fileio」,主要用來對一個磁盤進行存儲共享。讀者能夠根據本身狀況將Path改成須要共享的存儲分區的設備標識。這裏假定共享的設備 標識爲/dev/sdb。
至此,一個簡單的iSCSI Target已經配置完畢了,最後啓動iscsi-target服務:
[root@iscsi-target iscsi]# service iscsi-target start網絡

3、在windows上配置iSCSI Initiator
 下面的操做是在Initiator的windows主機上進行,即IP爲192.168.12.136主機。
微軟對iSCSI Initiator的支持至關完備,讀者能夠免費從微軟網站得到iSCSI Initiator軟件,網址是http://www.microsoft.com/WindowsServer2003/technologies/storage/iscsi/default.mspx
,本章實例下載的版本是Initiator-2.08-build3825-x86fre.exe,接下來開始說明如何讓windows鏈接iSCSI Target。
 安裝完成iSCSI Initiator後,在桌面上會發現啓動圖標,啓動Microsoft iSCSI Initiator後,選擇第二個分頁標籤「Discovery」,而後在「Target Portals」部分點擊「Add」按鈕,跳出「Add Target Portal」窗口,如圖2所示:
 session

圖2
 dom

在此窗口下填寫iSCSI Target的ip地址和端口,iSCSI Target地址就是上面設定的Target主機的地址,iSCSI Target的端口默認是3260,除非有特殊設定,填寫完成,點擊OK按鈕。
接下來,選擇第三個分頁標籤「Targets」,如圖3所示,能夠看到,iSCSI Initiator已經檢測到了iSCSI Target的名稱,可是此時的iSCSI Target還處於「inactive」狀態,點擊下方「Log On」按鈕,而後彈出「Log On to Target」窗口,接着按下「OK」按鈕來激活Target,此時iSCSI Target已經從「inactive」狀態變爲「Connected」狀態。如圖4和圖5所示:tcp

 

圖3
 ide

圖4

 
圖5
 

到此爲止,windows系統已經識別了iSCSI Target提供的共享磁盤分區,經過windows的磁盤管理器能夠看到新增長的磁盤分區,如圖6所示:


 
圖6
 

如今就可使用windows的磁盤管理功能對這塊共享磁盤進行分區、格式化以及掛載等操做了。

4、在Linux上配置iSCSI Initiator
 下面的操做是在Initiator的Linux主機上進行,即IP爲192.168.12.26主機。
1 安裝Linux版本iSCSI Initiator
如今的主流Linux發行版本默認都自帶了iSCSI Initiator,即Open-iSCSI,若是系統沒有安裝,只需經過光盤找到iscsi-initiator-utils- 6.2.0.871-0.16.el5.i386.rpm包,經過rpm方式安裝便可,固然也能夠經過yum進行自動安裝,操做以下:
[root@ Initiator iscsi]#yum install iscsi*
安裝完成後,會生成/etc/iscsi主程序配置目錄,其它相關文件的安裝位置爲:
/etc/iscsi/iscsid.conf
/etc/rc.d/init.d/iscsi
/etc/rc.d/init.d/iscsid
/sbin/iscsi-iname
/sbin/iscsiadm
/sbin/iscsid
/sbin/iscsistart
/var/lib/iscsi
/var/lib/iscsi/ifaces
/var/lib/iscsi/isns
/var/lib/iscsi/nodes
/var/lib/iscsi/send_targets
/var/lib/iscsi/slp
/var/lib/iscsi/static
/var/lock/iscsi
接下來須要啓動Initiator服務,操做以下:
[root@ Initiator iscsi]# service iscsi start
 

2 iSCSI Initiator目錄功能介紹
 /sbin/iscsiadm命令
 在iSCSI Initiator安裝完成後,會生成/sbin/iscsiadm命令,此命令是用來管理(更新、刪除、插入、查詢)iSCSI配置數據庫文件的命令行 工具,用戶可以用它對iSCSI nodes、sessions、connections和discovery records進行一系列的操做。
 /var/lib/iscsi/send_targets目錄
 在此目錄下,會生成一個或多個以iSCSI存儲服務器IP和端口命名的文件夾,文件名爲「iSCSI Target IP,端口號」(例如「192.168.12.246,3260」)。
 /var/lib/iscsi/nodes目錄
 在此目錄下,會生成一個或多個以iSCSI存儲服務器上的Target名命名的文件夾,在該文件夾下有一個文件名爲「iSCSI portal IP,端口號」 (例如「192.168.12.246,3260」)的配置參數文件,該文件是iSCSI initiator登陸iSCSI target時要使用的參數,而這些參數的設置是從/etc/iscsi/iscsi.conf中的參數繼承而來的,能夠經過iscsiadm命令對某一 個參數文件進行更改。
 

3 在linux上執行iSCSI  Target發現
 可使用以下指令向 iSCSI Target 主機查詢劃分了哪些lun:
iscsiadm -m discovery --type sendtargets --portal IP
 或者
iscsiadm -m discovery -t sendtargets -p IP
例如:
[root@ Initiator iscsi ]# iscsiadm -m discovery -t sendtargets -p 192.168.12.246:3260                                         
192.168.12.246:3260,1 iqn.2001-04.com.example:storage.disk2.sys1.xyz
能夠看出,「iqn.2001-04.com.example:storage.disk2.sys1.xyz」就是iSCSI Target的名稱。因爲在配置iSCSI Target時,沒有作任何限制,所以全部的客戶端主機都容許鏈接iSCSI Target共享出來的磁盤。
須要說明的是:當成功執行一次Target發現後,iSCSI Initiator就會將查詢紀錄寫到/var/lib/iscsi/send_targets對應目錄下。所以,對於Target發現只需執行一次便可。
接着經過iscsiadm指令與iSCSI Target 主機創建鏈接,也就是登陸iSCSI Target:
iscsiadm -m node -T <target-name> -p <ip-address>:<port> --login
或者
iscsiadm -m node -T [target-name] -p [ip-address] -l
這裏的「-T」後面跟target名稱,「ip-address」是target主機的IP地址,「port」是target主機的端口號,默認是3260。
例如:
[root@ Initiator iscsi ]#iscsiadm -m node -T iqn.2001-04.com.example:storage.disk2.sys1.xyz -p 192.168.12.246 -l
Logging in to [iface: default, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.12.246,3260]
Login to [iface: default, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.12.246,3260]: successful
若是有多個Target主機時,能夠經過以下命令一次登陸全部的targets:
[root@ Initiator iscsi ]#iscsiadm -m node --loginall=all
這裏須要說明的是,經過執行Target發現操做,其實已經與iSCSI Target 主機創建了鏈接,此時若是再次執行iscsiadm命令與Target 主機創建鏈接的話,會提示「iscsiadm: initiator reported error (15 - already exists)」錯誤,因此須要先斷開與iSCSI Target 主機的鏈接,執行以下指令,斷開Initiator 與iSCSI Target 主機的鏈接:
iscsiadm -m node -T [target-name] -p [ip-address] -u
 例如:
[root@ Initiator iscsi ]#iscsiadm -m node -T iqn.2001-04.com.example:storage.disk2.sys1.xyz -p 192.168.12.246  -u
Logging out of session [sid: 2, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.12.246,3260]
Logout of [sid: 2, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.12.246,3260]: successful
 當iSCSI Initiator與iSCSI Target鏈接成功後,還能夠經過以下命令查看iSCSI session信息:
[root@ Initiator iscsi ]#iscsiadm -m session –i
例如:
[root@ Initiator iscsi ]#iscsiadm -m session –i
iSCSI Transport Class version 2.0-871
version 2.0-871
Target: iqn.2001-04.com.example:storage.disk2.sys1.xyz
        Current Portal: 192.168.12.246:3260,1
        Persistent Portal: 192.168.12.246:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:fd37f211e3a
                Iface IPaddress: 192.168.12.26
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 1
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
                ************************
                Negotiated iSCSI params:
                ************************
                HeaderDigest: None
                DataDigest: None
                MaxRecvDataSegmentLength: 262144
                MaxXmitDataSegmentLength: 8192
                FirstBurstLength: 65536
                MaxBurstLength: 262144
                ImmediateData: Yes
                InitialR2T: Yes
                MaxOutstandingR2T: 1
                ************************
                Attached SCSI devices:
                ************************
                Host Number: 32 State: running
                scsi32 Channel 00 Id 0 Lun: 0
                        Attached scsi disk sdb          State: running
 

4 管理共享磁盤
 首先經過fdisk命令查看共享過來的磁盤標識,也能夠經過dmesg命令查看系統是否定到了共享的iSCSI磁盤,操做以下:
[root@ Initiator iscsi ]#fdisk -l
Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14       38913   312464250   8e  Linux LVM

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System/dev/sdb1               1         609     4891761   83  Linux/dev/sdb2             610        1305     5590620   83  Linux 從fdisk輸出可知,iscsi共享磁盤標識爲/dev/sdb,大小10.7G,下面就能夠經過fdisk命令對這個磁盤進行從新分區、格式化、建立文件系統等操做了。

相關文章
相關標籤/搜索