iSCSI概述:

iSCSI技術是一種由IBM公司研究開發的,是一個供硬件設備使用的可以在IP協議的上層運行的SCSI指令集,這種指令集合可以實現在IP網絡上運行SCSI協議,使其能夠在諸如高速千兆以太網上進行路由選擇。iSCSI技術是一種新儲存技術,該技術是將現有SCSI接口與以太網絡(Ethernet)技術結合,使服務器可與使用IP網絡的儲存裝置互相交換資料。


iSCSI:Internet 小型計算機系統接口 (iSCSI:Internet Small Computer System Interface)。

Internet 小型計算機系統接口(iSCSI)是一種基於 TCP/IP的協議,用來建立和管理 IP 存儲設備、主機和客戶機等之間的相互連接,並創建存儲區域網絡(SAN)。SAN 使得 SCSI 協議應用於高速數據傳輸網絡成爲可能,這種傳輸以數據塊級別(block-level)在多個數據存儲網絡間進行。

SCSI 結構基於客戶/服務器模式,其通常應用環境是:設備互相靠近,並且這些設備由 SCSI 總線連接。iSCSI 的主要功能是在 TCP/IP 網絡上的主機系統(啓動器 initiator)和存儲設備(目標器 target)之間進行大量數據的封裝和可靠傳輸過程。此外,iSCSI 提供了在 IP 網絡封裝 SCSI 命令,且運行在 TCP 上。

完整的iSCSI系統的拓撲結構如下:

iscsi

iSCSI配置實現過程如下:


實驗系統環境如下:

操作系統: CentOS release 6.5 (Final)

director(iSCSI Target): 172.16.100.3/16 scsi-target-utils-1.0.24-10.el6.x86_64

node1(iSCSI Initiator) : 172.16.100.6/16  iscsi-initiator-utils.x86_64 0:6.2.0.873-10.el6

關閉防火牆:

iptables: Firewall is not running.

關閉SELINUX:

setenforce: SELinux is disabled


準備工作:

iSCSI可分享的設備類型有很多,包括鏡像文件(*.img)、分區(partition)、物理硬盤、raid設備、邏輯卷等,下面我們測試常用的幾種設備類型:

(1)準備共享的設備分區類型

# fdisk -l /dev/sdb 

Disk /dev/sdb: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

建立所需要的新分區大小爲20G:

# fdisk -l /dev/sdb 
Command (m for help): n  
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15665, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +20G

重新讀取分區表:

# partx -a /dev/sdb
# fdisk -l /dev/sdb1

Disk /dev/sdb1: 21.5 GB, 21484399104 bytes
255 heads, 63 sectors/track, 2611 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

(2)準備要共享的鏡像文件

在director的/srv目錄下創建一個1G大小的鏡像文件

# mkdir /srv/iscsi
# dd if=/dev/zero of=/srv/iscsi/disk1.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 36.8793 s, 29.1 MB/s
[[email protected] ~]# ll -lh /srv/iscsi/disk1.img 
-rw-r--r-- 1 root root 1.0G Aug 20 14:40 /srv/iscsi/disk1.img

wKiom1e3-_bhzLUQAAAmkFC66lQ010.png

(3)創建邏輯卷

創建一個大小爲10G的LV

# pvcreate /dev/sdc 
  Physical volume "/dev/sdc" successfully created
# vgcreate vg1 /dev/sdc 
  Volume group "vg1" successfully created
# lvcreate -L 20G -n iscsi vg1
  Logical volume "iscsi" created

wKiom1e3_y6B85MbAAA2B1zV-M4750.png


(4)準備共享的設備物理硬盤

添加一個大小爲120G的硬盤


配置director(iSCSI Target)

(1)安裝scsi-target-utils管理工具

CentOS自帶scsi-target-utils軟件包,使用該工具進行target配置:

# yum -y install scsi-target-utils
# chkconfig tgtd on
# service tgtd start
# ss -tunlp | grep tgt
tcp    LISTEN     0      128                   :::3260                 :::*      users:(("tgtd",1259,5),("tgtd",1262,5))
tcp    LISTEN     0      128                    *:3260                  *:*      users:(("tgtd",1259,4),("tgtd",1262,4))

(2)配置target有以下兩種方式:

第一種方式:使用tgtadm全命令工具創建;此命令工具配置的iscsi target系統重啓之後會丟失。

第二種方式:編輯/etc/tgt/targets.conf,編輯配置文件生成的iscsi target系統重啓之後不會丟失。


第一種使用target命令工具配置如下:

(1)創建一個target:

# tgtadm -L iscsi -o new -m target -t 1 -T iqn.2016.08.com.samlee:iscsi.disk

(2)查詢創建的target所有信息:

# tgtadm -L iscsi -m target -o show 
或:
# tgt-admin -show
Target 1: iqn.2016.08.com.samlee:iscsi.disk    ##target名稱,以及標識號
    System information: ##系統信息及狀態
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0        ##邏輯單元號;默認從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:         ##塊設備標記
    Account information:                ##授權用戶訪問
    ACL information:                    ##授權ip地址段訪問

(3)在target中添加分區設備

# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 -b /dev/sdb1

(4)在target中添加鏡像文件

# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 2 -b /srv/iscsi/disk1.img

(5)在target中添加lv邏輯卷

# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 3 -b /dev/vg1/iscsi

(6)在target中添加硬盤設備

# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 4 -b /dev/sdd

(7)給target授權允許172.16.0.0/16網絡訪問及iscsiuser用戶訪問,默認是不允許任何用戶訪問

# tgtadm -L iscsi -m account -o new --user iscsiuser --password iscsiuser
# tgtadm -L iscsi -m account -o bind --tid 1 --user iscsiuser
# tgtadm -L iscsi -m target -o bind -t 1 -I 172.16.0.0/16


第二種方式:編輯/etc/tgt/targets.conf

target主配置文件爲/etc/tgt/targets.conf,下面我們來設置改文件。
在該文件最後追加以下設置:

<target iqn.2016.08.com.samlee:iscsi.disk>
        backing-store /srv/iscsi/disk1.img
        backing-store /dev/sdb1
        backing-store /dev/vg1/iscsi
        backing-store /dev/sdd
        incominguser iscsiuser iscsiuser
        initiator-address 172.16.0.0/16
</target>


說明:

說明:
(1)iqn = iSCSI Qualified Name

(2)iSCSI target的名稱規則如下:
iqn.2016.08.com.samlee:iscsi.disk
iqn.年份-月份.域名反寫.設備識別

(2)每個在同一個target上的backing-store 稱爲邏輯單元號(Logical Unit Number,LUN),
 這個實驗中有4個LUN。



配置iSCSI Initiator

(1)安裝iSCSI客戶端工具

# yum -y install iscsi-initiator-utils

(2)設置開機自啓動

# chkconfig iscsi on
# chkconfig iscsid on

(3)配置initiator文件
initiator的配置文件位於/etc/iscsi/,該目錄下有兩個文件,initiatorname.iscsi 和iscsid.conf,其中iscsid.conf 是其配置文件,initiatorname.iscsi 是標記了initiator的名稱,我們做如下配置:

# echo "InitiatorName=`iscsi-iname -p iqn.2016.08.com.samlee:iscsi.disk`" > /etc/iscsi/initiatorname.iscsi
# echo "InitiatorAlias=node1.samlee.com" >> /etc/iscsi/initiatorname.iscsi

配置iscsid.conf文件開啓用戶認證:

# vim /etc/iscsi/iscsid.conf
啓用一下選項:
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser
node.session.auth.password = iscsiuser

啓動iscsi客戶端服務

# service iscsi start
# service iscsid start


(4)偵測target

如果我們事先不知道目標主機的target名稱,我們就需要進行偵測:

# iscsiadm -m discovery -t st -p 172.16.100.3
Starting iscsid:                                           [  OK  ]
172.16.100.3:3260,1 iqn.2016.08.com.samlee:iscsi.disk

參數選項說明:

-m discovery  //偵測target
-t sendtargets  //通過iscsi協議
-p IP:port  //指定target的IP和port,不寫port的話,默認爲3260

(5)查看nodes
iscsiadm 偵測到的結果會寫入/var/lib/iscsi/nodes/ 中,因此只需啓動/etc/init.d/iscsi 就能夠在下次開機時,自動連接到正確的target了

# ls /var/lib/iscsi/
ifaces  isns  nodes  send_targets  slp  static
# ls /var/lib/iscsi/send_targets/
172.16.100.3,3260
# ls -lR /var/lib/iscsi/nodes/
/var/lib/iscsi/nodes/:
total 4
drw------- 3 root root 4096 Aug 20 16:42 iqn.2016.08.com.samlee:iscsi.disk

/var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk:
total 4
drw------- 2 root root 4096 Aug 20 16:42 172.16.100.3,3260,1

/var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk/172.16.100.3,3260,1:
total 4
-rw------- 1 root root 1818 Aug 20 16:42 default

偵測信息都寫入了/var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk/172.16.100.3,3260,1/default文件中。

(6)連接target
查看目前系統上面所有的target

# iscsiadm -m node
172.16.100.3:3260,1 iqn.2016.08.com.samlee:iscsi.disk

登陸target

# iscsiadm -m node -T iqn.2016.08.com.samlee:iscsi.disk -P 172.16.100.3 -l
Logging in to [iface: default, target: iqn.2016.08.com.samlee:iscsi.disk, portal: 172.16.100.3,3260] (multiple)
Login to [iface: default, target: iqn.2016.08.com.samlee:iscsi.disk, portal: 172.16.100.3,3260] successful.

(6)查看磁盤狀態如下圖所示:

wKioL1e4HX_jNtLLAACMZuNH_xk003.png

現在可以看到,initiator 上面多了四塊硬盤,大小和target上的LUN一致。這時你就可以像使用本地磁盤一樣使用這些iSCSI設備。


測試應用如下:

(1)將/dev/sdb 和/dev/sdc 創建成LV掛載使用:

創建LV邏輯卷:

# pvcreate /dev/sdb /dev/sdc 
# vgcreate vg_iscsi /dev/sdb /dev/sdc 
# lvcreate -L 130G -n lv_iscsi vg_iscsi

wKioL1e6crvTUAQ-AABMW86SNdY055.png

格式化創建文件並掛載:

# mke2fs -t ext4 /dev/vg_iscsi/lv_iscsi
# mkdir /data
# vim /etc/fstab
/dev/vg_iscsi/lv_iscsi  /data                   ext4    defaults,_netdev        0 0
# mount -a

創建測試文件:

# touch  /data/iscsi{1..100}.txt
# ls /data/

wKiom1e6dWaB-BLdAABKp-KdnK0838.png

創建測試文件成功後,重啓客戶端:

# df -TH
# ls /data/

wKiom1e6duWxLYTBAABwozVCpVI476.png

以上爲iSCSI配置實現全過程。