ISCSI Configuration
一、概述
1. Redhat iscsi driver
1.1 作用:提供主機通過ip傳輸存儲的能力
1.2 iscsi和FC比較
<a target="_blank" href="http://blog.51cto.com/attachment/201109/155308122.png"></a>
2. iscsi資料通路過程
2.1 用戶端發送scsi指令到遠端儲存設備(服務端target)
2.2 預設使用tcp/ip協定端口tcp:3260
2.3 用戶端(initiator)
2.3.1 通過discovery process方式通路請求到遠端存儲(指定存儲IP)
2.3.2 必需按照提供iscsi取得的協定
2.3.3 iscsi服務保證target裝置的持續性(iscsi每次啟動時都生效)
2.3.4 軟體包:iscsi-initiator-utils-*.rpm
2.4 伺服器端(target)
2.4.1 允許一到多個block裝置可不用戶端(initiator)通路
2.4.2 系統要求RHEL5.1以上版本
2.4.3 軟體包:scsi-target-utils-*.rpm
3. iscsi驅動功能
3.1 支援頭部和資料的加密
3.2 支援雙向CHAP認證
3.3 支援流量控制
3.4 支援多路徑
3.5 支援動态target的發現
3.6 支援target改變時異步同步
3.7 及時資料支援
3.8 動态驅動從配置
3.9 系統重新開機或可自動挂載
4. iscsi的裝置名
4.1. Linux會自動給iscsi配置設定一個裝置名
4.2. uuid和卷标的功能(這個不是很好的方法)
4.3. Udev;uuid和卷标時這個裝置名有可能在下次重新開機計算機的時候變化,是以最好使用udev。
5. iscsi的挂載
l 1. netfs服務解決了網絡服務啟動在iscsi服務之前,但iscsi在系統啟動後也能正常工作的問題。因為netfs在iscsi之後啟動,重新挂載網絡的挂載服務。
l 2. 寫入寫入/etc/fstab中
eg:
[root@station9 ~]# vim /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda2 swap swap defaults 0 0
/dev/sdb1 /data ext3 defaults,_netdev 0 0
#_netdev選型表示挂載網絡裝置,當有網絡時會重新挂載該裝置,保證當netfs服務未啟動時也能挂載。
6. iscsi target的命名
6.1. iscsi名稱要求是完整辨別IQN(iscsi qualified name)
6.2. 在全局上要求唯一
6.3 . IQN格式:iqn.<data_code>.<reversed_domain>.<string>[:<substring>]
6.3.1 要求類型iqn
6.3.2 data code:yyyy-mm
6.3.3 反轉dns域名:sales.example.com的IQN應該是:com.example.sales
6.3.4 自定義的唯一的磁盤名,建議通過":string"方式對分組
eg:
iqn.2011-09.com.example.sales:sata.rack2.disk
二、iscsi target配置(伺服器端)
1. 啟動tgtd服務
[root@station9 ~]#tgtd start
[root@station9 ~]#chkconf tgtd on
#啟動tgtd服務,在做下面的操作之前一定要啟動tgtd服務,否則會因為連接配接不上報錯
2. 建立target
[root@station9 ~]#tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2011-09:disk1
#建立id号為1的target,并命名為iqn.2011-09:disk1
3. 給target配置設定裝置
[root@station9 ~]#tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb1
#為id号為1的target配置設定裝置/dv/sdb1(也可為檔案),并為新裝置配置設定lun(邏輯單元号)。
4.綁定可通路target的IP
[root@station9 ~]#tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.32.0/24
#設定ACL通路權限,允許192.168.32.0/24網段可通路此target;允許所有可用-I ALL
#為保證系統生效,必須将以上指令寫入到開機腳本/etc/rc.d/rc.local中
5. 查詢target資訊
[root@station9 ~]# tgtadm --lld iscsi --mode target --op show
#查詢target,也可用tgt-admin -s
Target 1: iqn.2011-9:diskpub1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
#lun 0預設為控制器,配置設定lun時隻能從1開始
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: None
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 5124 MB
Backing store path: /dev/sdb1
Account information:
ACL information:
192.168.32.0/24
三、 移除target
1. 取消iscsi initiator綁定
[root@station9 ~]#tgtadm --lld iscsi --mod target --op unbind --tid 1 --initiator-address 192.168.32.0/24
2. 查詢要移除裝置的lun号
[root@station9 ~]# tgtadm --lld iscsi --mod target --op show
LUN: 0
#/dev/sdb1的lun号為1
3. 從target中移除裝置
[root@station9 ~]#tgtadm --lld iscsi --mod logicalunit --op delete --tid 1 –lun 1
#移除lun号為1的裝置/dev/sdb1
#lun為1的/dev/sdb1裝置已經移除
4. 移除target
[root@station9 ~]# tgtadm --lld iscsi --mod target --op delete --tid 1
#移除id号為1的target,即名稱為iqn.2011-9:diskpub1裝置被移除
四、 iscsi initiator配置(用戶端)
全局配置檔案:/etc/iscsi/iscsid.conf
1. 發現指定IP的target裝置。
[root@station2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.32.39:3260
192.168.32.39:3260,1 iqn.2011-9:diskpub1
# -p : iSCSI target 的IP,iSCSI預設使用的port 是3260
2. 連結(挂載)發現的target
[root@station2 ~]#iscsiadm -m node -T iqn.2011-9:diskpub1 -p 192.168.32.39:3260 -l
Logging in to [iface: default, target: iqn.2011-9:diskpub, portal: 192.168.32.39,3260]
Login to [iface: default, target: iqn.2011-9:diskpub, portal: 192.168.32.39,3260]: successful。
#-T : 指定target_iqn_name
-l: login,保證系統重新開機後,iscsi自動連結target裝置并生效。
3. 查詢是否連結
[root@station2 ~]# fdisk -l
Disk /dev/vda: 42.9 GB, 42991616000 bytes
255 heads, 63 sectors/track, 5226 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
/dev/vda2 14 5226 41873422+ 8e Linux LVM
Disk /dev/sda: 5124 MB, 5124317184 bytes
158 heads, 62 sectors/track, 1021 cylinders
Units = cylinders of 9796 * 512 = 5015552 bytes
Disk /dev/sda doesn't contain a valid partition table
#以上顯示/dev/sda裝置為iscsi連結裝置
4. Target端查詢是否連結
I_T nexus: 1
Initiator: iqn.1994-05.com.redhat:e3e44fad96d1
Connection: 0
IP Address: 192.168.32.32
#通過target端檢視iSCSI Initiator:192.168.32.32已經連接配接
五、 登出或移除iscsi initiator設定
1. 臨時登出
[root@station2 ~]# iscsiadm -m node -T iqn.2011-9:diskpub1 -p 192.168.32.39:3260 -u
Logging out of session [sid: 1, target: iqn.2011-9:diskpub1, portal: 192.168.32.39,3260]
Logout of [sid: 1, target: iqn.2011-9:diskpub1, portal: 192.168.32.39,3260]: successful
#-u: (logout) 臨時登出,重新iscsi服務後連結又會生效,
#顯示/dev/sda裝置删除了
[root@station2 ~]# service iscsi restart
Stopping iSCSI daemon:
iscsid 已死,但 pid 檔案仍存 [确定]
Starting iSCSI daemon: [确定]
[确定]
設定 iSCSI 目标:Logging in to [iface: default, target: iqn.2011-9:diskpub1, portal: 192.168.32.39,3260]
Login to [iface: default, target: iqn.2011-9:diskpub1, portal: 192.168.32.39,3260]: successful
[确定]
#以上顯示target裝置有重新連結了
#找到target裝置/dev/sda
2. 永久移除
[root@station2 ~]# iscsiadm -m node -T iqn.2011-9:diskpub1 -p 192.168.32.39:3260 -o delete
-o delete : 可以永久移除掉Target的連結,需重新啟動iSCSI生效.
六、 iscsi chap身份驗證
iscsi除了指定IP做ACL,還可以透過user/password (CHAP-Challenge Handshake Authentication Protocol(使用MD5的加密驗證) )來做身分驗證。
1. iscsi CHAP驗證種類
1.1 單向CHAP驗證:在此安全性等級,隻有目标Target會做驗證
1.2 互相( Mutual ) CHAP驗證:在此安全性等級,目标Target與啟動器Initiator皆會被彼此做驗證.
1.3 Reverse CHAP驗證:一般的CHAP使用one-way hash,密碼檔無法回朔,但是使用Reverse CHAP是可以的
2. iscsi單向CHAP驗證
預設iSCSI 采用了單向CHAP(Challenge Handshake Authentication Protocol) 的身分驗證方式,基本上是一種以MD5 的加密驗證方式.方式如下:
2.1. 在雙方(Target/Initiator) 建立連線後,Target 送出"challenge" 的訊息告知Initiator 要做身分驗證.
2.2. Initiator 會将使用者密碼(md5碼加密)給Target 端.
2.3. Target端将密碼和Initiator發送的密碼做比對,如果比對正确,這身份驗證即成立,否則中斷此次連結做.
2.4. 在正常連線過程中會不時重複做1~3 的CHAP 身分驗證.
3. iscsi單向CHAP配置
3.1. target端配置
3.1.1 建立target并為其配置設定裝置
[root@station9 ~]# tgtadm --lld iscsi --mod target --op new --tid=1 -T iqn.2011-09.com.example.station9:disk1
[root@station9 ~]# tgtadm --lld iscsi --mod logicalunit --op new --tid 1 --lun 1 -b /dev/sdb1
[root@station9 ~]# tgtadm --lld iscsi --mod target --op bind --tid 1 -I ALL
l 3.1.2 建立CHAP驗證帳号(與系統帳号無關)
[root@station9 ~]# tgtadm --lld iscsi --mode account --op new --user redhat --password redhat123
#建立帳号redhat密碼為redhat123,password 和username 的最大限制是256 字元
[root@station9 ~]# tgtadm --lld iscsi --mode account --op bind --tid 1 --user redhat
#将帳号redhat綁定到tid為1的target
Target 1: iqn.2011-09.com.example.station9:disk1
redhat
ALL
3.2. initiator端配置
3.2.1修改iscsi配置檔案,添加CHAP驗證帳号
[root@station2 ~]# vim /etc/iscsi/iscsid.conf
node.session.timeo.replacement_timeout = 20 #預設延遲時間120太長,
node.session.auth.authmethod = CHAP #開啟CHAP驗證
node.session.auth.username = redhat #CHAP帳号,與target中一樣
node.session.auth.password = redhat123
3.2.2 連結target
192.168.32.39:3260,1 iqn.2011-09.com.example.station9:disk1
[root@station2 ~]# iscsiadm -m node -T iqn.2011-09.com.example.station9:disk1 -p 192.168.32.39:3260 -l
Logging in to [iface: default, target: iqn.2011-09.com.example.station9:disk1, portal: 192.168.32.39,3260]
Login to [iface: default, target: iqn.2011-09.com.example.station9:disk1, portal: 192.168.32.39,3260]: successful
4. 互相(Mutual)HAP incoming / outgoing驗證
互相( Mutual ) CHAP驗證: CHAP的認證端可為Target(Incoming Authentication)或是Initiator(Outgoing Authentication)任一端來認證.也就是說Target(Incoming Authentication)是由Target端為Initiator認證.這樣的認證方式可以允許多個Initiator來連接配接到Target.而Initiator(Outgoing Authentication)是由Initiator來認證Target端。
剛剛已經設定過Incoming 的認證方式,現在要透過"tgtadm" 來建立Outgoing 的認證
4.1. target端建立outgong帳号
[root@station9 ~]# tgtadm --lld iscsi --op new --mode account --user out_redhat --password out_redhat123
[root@station9 ~]# tgtadm --lld iscsi --mode account --op bind --tid 1 --user out_redhat –outgoing
I_T nexus: 5
out_redhat (outgoing)
4.2. initiator配置
node.session.timeo.replacement_timeout = 20
node.session.auth.authmethod = CHAP
node.session.auth.username = redhat
node.session.auth.username_in = out_redhat
#initiator端驗證帳号,和target裝置的outgoing帳号一樣
node.session.auth.password_in = out_redhat123
七、 initiator配合udev自動挂載iscsi
1. 建立iscsi裝置資訊擷取腳本
[root@station2 scripts]# vim /etc/udev/scripts/iscsidev.sh
#!/bin/sh
# FILE: /etc/udev/scripts/iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
[ -e /sys/class/iscsi_host ] || exit 1
file="/sys/class/iscsi_session/session*/targetname"
target_name=$(cat ${file})
# This is not an open-scsi drive
if [ -z "${target_name}" ]; then
exit 1
fi
echo "${target_name##*.}"
2. 建立udev政策檔案
[root@station2 scripts]# vim /etc/udev/rules.d/99-iscsi.rules
KERNEL=="sd*",BUS=="scsi",PROGRAM=="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="Myiscsi%n"
#為iscsi裝置生成軟連接配接/dev/Myiscsi%n
3. 測試檢視
[root@station2 scripts]# iscsiadm -m node -T iqn.2011-09.com.example.station9:disk1 -p 192.168.32.39:3260 -u
Logging out of session [sid: 1, target: iqn.2011-09.com.example.station9:disk1, portal: 192.168.32.39,3260]
Logout of [sid: 1, target: iqn.2011-09.com.example.station9:disk1, portal: 192.168.32.39,3260]: successful
#取消iscsi target裝置挂載
[root@station2 scripts]# service iscsi restart
設定 iSCSI 目标:Logging in to [iface: default, target: iqn.2011-09.com.example.station9:disk1, portal: 192.168.32.39,3260]
Login to [iface: default, target: iqn.2011-09.com.example.station9:disk1, portal: 192.168.32.39,3260]: successful
#重新開機iscsi服務,重新挂載iscsi target裝置
[root@station2 scripts]# ll /dev/Myiscsi
lrwxrwxrwx 1 root root 3 09-22 22:06 /dev/Myiscsi -> sda
#udev政策配置生效
本文轉自netsword 51CTO部落格,原文連結:http://blog.51cto.com/netsword/671371