2012/08/26

Linux iSCSI 的 target and initiator 的設定 (CentOS6)


iSCSI

iSCSI 又稱為IP-SAN,是一種基於網際網路及SCSI-3協議下的存儲技術,由IETF提出,並於2003年2月11日成為正式的標準。與傳統的SCSI技術比較起來,iSCSI技術有以下三個革命性的變化:
把原來只用於本機的SCSI協同透過TCP/IP網路傳送,使連接距離可作無限的地域延伸;
連接的伺服器數量無限(原來的SCSI-3的上限是15);
由於是伺服器架構,因此也可以實現在線擴容以至動態部署。
iSCSI Qualified Name (IQN)
Format: The iSCSI Qualified Name is documented in RFC 3720, with further examples of names in RFC 3721. Briefly, the fields are:
From the RFC:
                   Naming     String defined by
      Type  Date    Auth      "example.com" naming authority
     +--++-----+ +---------+ +-----------------------------+
     |  ||     | |         | |                             |    
  
     iqn.1992-01.com.example:storage:diskarrays-sn-a8675309
     iqn.1992-01.com.example
     iqn.1992-01.com.example:storage.tape1.sys1.xyz
通訊 port : TCP 3260
iSCSI target(伺服器)

CentOS6 iSCSI target and initiator 的設定
流程:
需要有各儲存裝置 (這裡以 LVM 切割出一塊裝置做使用)
安裝 target 服務
啟動服務
到 initiator 端,將 target 的分享掛載起來

需要有各儲存裝置 (以 lvm 的裝置示範)
[root@server1 ~]# lvcreate -l 3 -n iscsi10  vgsrv
  Logical volume "iscsi10" created

--- Logical volume ---
  LV Name                /dev/vgsrv/iscsi10
  VG Name                vgsrv
  LV UUID                VcQj9X-yhOD-wMDY-Sh2b-9Z8X-r0Cj-h08rB0
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                96.00 MiB
  Current LE             3
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3
安裝 target 服務
# 安裝 scsi-target-utils
[root@server1 ~]# yum install scsi-target-utils
修改 targets 服務設定 (詳細請見 man 5 targets.conf)
# 修改 targets 設定 (Linux SCSI Target Configuration File)
[root@server1 ~]# vim /etc/tgt/targets.conf
# 在檔案最後面加入這一段  

# target 名稱遵循 IQN 規範,通常用這樣的格式即可

# 設定儲存裝置來源
backing-store /dev/vgsrv/iscsi10
# 設定可存取的 initiator 位置
initiator-address 192.168.123.0/24
# 登入的學生帳號密碼
incominguser student PaSsWoRd


啟動 tgtd 服務(Linux SCSI Target Administration Utility)
# 重新啟動 tgtd 服務
[root@server1 ~]# /etc/init.d/tgtd restart

# tgtd 預設開機啟動
[root@server1 ~]# chkconfig tgtd on
show tgtadm 顯示設定檔狀況並驗證(詳細說明 man 8 tgtadm)
# show tgtadm 顯示 target 設定檔狀況並驗證
[root@server1 ~]# tgtadm --mode target --op show
Target 1: iqn.2012-05.world.server:target0
    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
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 101 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/vgsrv/iscsi10 # 裝置代號
            Backing store flags:
    Account information:
        student  # 需要的登入帳號
    ACL information:
        192.168.123.0/24  # 可使用的主機存取控制
iSCSI Initiator(客戶端)

當有了 target 可以透過 initiator 探索 target 的資源,並且掛載使用。
到 initiator 端,將 target 的分享掛載起來,首要先探索伺服器提供 target 資源為何?
iscsiadm (open-iscsi administration utility) 詳細 man 8 iscsiadm
[root@desktop1 ~]# iscsiadm -m discovery -t st -p 192.168.123.194
Starting iscsid:                                           [  OK  ]
192.168.123.194:3260,1 iqn.2012-05.world.server:target0
加入預設登入密碼於設定檔內(因為剛剛在 target 有設定密碼,如果沒設定這段會在過程中發生錯誤)
# 因為 target 有設定密碼,所以需要設定這段.
[root@desktop1 ~]# vim /etc/iscsi/iscsid.conf
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
node.session.auth.authmethod = CHAP

# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
node.session.auth.username = student
node.session.auth.password = password
... 省略 ...
掛載 iscsi target ,這裡使用的是 -l 登入主機
[root@desktop1 ~]# iscsiadm -m node -T iqn.2012-05.world.server:target0 -p 192.168.123.194 -l
Logging in to [iface: default, target: iqn.2012-05.world.server:target0, portal: 192.168.123.194,3260]
Login to [iface: default, target: iqn.2012-05.world.server:target0, portal: 192.168.123.194,3260] successful.
找尋裝置代號需要透過 /var/log/message 的內容發現他掛載到那個裝置內,這裡是 /dev/sdb 這個裝置。
[root@desktop1 ~]# tail /var/log/messages
May  6 00:34:21 desktop1 kernel: scsi 4:0:0:0: Attached scsi generic sg2 type 12
May  6 00:34:21 desktop1 kernel: scsi 4:0:0:1: Direct-Access     IET      VIRTUAL-DISK     0001 PQ: 0 ANSI: 5
May  6 00:34:21 desktop1 kernel: sd 4:0:0:1: Attached scsi generic sg3 type 0
May  6 00:34:21 desktop1 kernel: sd 4:0:0:1: [sdb] 196608 512-byte logical blocks: (100 MB/96.0 MiB)
May  6 00:34:21 desktop1 kernel: sd 4:0:0:1: [sdb] Write Protect is off
May  6 00:34:21 desktop1 kernel: sd 4:0:0:1: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
May  6 00:34:21 desktop1 kernel: sdb: unknown partition table
May  6 00:34:21 desktop1 kernel: sd 4:0:0:1: [sdb] Attached SCSI disk
也可以透過 /dev/disk/by-path/ 目錄找尋載入的裝置名稱。
預設開機啟動掛載
[root@desktop1 ~]# chkconfig iscsi on
[root@desktop1 ~]# chkconfig iscsid on
掛到檔案系統使用,流程就和一般的硬碟使用方式一樣。需要格式化檔案系統、建立掛載點、掛載、寫入開機 /etc/fstab 等動作。
# 建立分割區
[root@desktop1 ~]# fdisk /dev/sdb
# 需要重開機後才可以發現這個分割區(partprobe 在 centos 6.3 還是不可以使用)

# 格式化為 ext4 檔案系統
[root@desktop1 ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204592 blocks
10229 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729

Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

# 使用 UUIS 方式掛載
[root@desktop1 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="66e276f3-fc47-472b-8037-acca7250c5e4" TYPE="ext4"

# 建立掛載點
[root@desktop1 ~]# mkdir /storage

# 寫入 /etc/fstab 確認開機啟動正常
[root@desktop1 ~]# vim /etc/fstab
... 略 ....
UUID=66e276f3-fc47-472b-8037-acca7250c5e4 /storage  ext4  _netdev  0 0

# 重新掛載所有檔案系統,並驗證。
[root@localhost ~]# mount -o remount -a
[root@localhost ~]# mount
... 略 ....
/dev/sdb1 on /storage type ext4 (rw,_netdev)
如果已經不需要使用,可以使用底下的方式移除
# -u 登出系統
[root@localhost ~]# iscsiadm -m node -T iqn.2012-05.world.server:target0 -p 192.168.123.194 -u
Logging out of session [sid: 2, target: iqn.2012-05.world.server:target0, portal: 192.168.123.194,3260]
Logout of [sid: 2, target: iqn.2012-05.world.server:target0, portal: 192.168.123.194,3260] successful.

# -o delete 刪除這個 node 在本機的記錄
[root@localhost ~]# iscsiadm -m node -T iqn.2012-05.world.server:target0 -p 192.168.123.194 -o delete
張貼留言