一、概述php
ISCSI ( internel small system computer interface):是基於TCP/IP網絡 的存儲技術,它利用TCP/IP網絡來存儲scsi命令,自己由於TCP/IP的特性,所以會架構便宜(IP 網絡設備價格遠比存儲網絡的價格要低),能夠從LAN擴展到WAN上面
IP-SAN是做爲存儲區域網絡的一種便宜的方案,但一般咱們建議是將IP-SAN 創建在一個單獨隔離的網絡上,而不是和日常的業務網絡一塊兒用(存儲網絡與業務網絡分離)html
iscsi協議自己不加密,只是在發起鏈接的時候有CHAP認證(包括單向認證和雙向認證),在互聯網上傳送並不安全,所以較少用在互聯網上,一般是做爲一個單獨的存儲網絡使用,另外也可使用LUKS linux unified key setup磁盤加密,這樣保證數據在傳送過程當中加密,但協議自己是沒有保護的,也可讓ipsec協議保護,由於ipsec自己有認證和加密的功能node
Iscsi使用TCP協議、默認使用3260端口linux
冗餘:vim
能夠用網卡綁定或者多徑來保證存儲訪問的高可用性windows
注意:bonding只是保證網卡到它鏈接的設備(一般是交換機)的高可用,可是多徑技術 (multi-path)是保證端到端的冗餘,所以多徑技術更高級。後端
iscsi相對於NFS 或者DAS HDD的好處在於:安全
1、對於DAS而言,服務器壞了,硬盤沒壞,也不能訪問了服務器
iscsi磁盤仍是可讓其餘客戶端訪問的網絡
二、NFS而言,擴容不容易
iscsi target 能夠1個,2個,3個,直接擴容,建立物理卷,將物理卷加入現存卷組,擴容邏輯卷,建立文件系統,加掛,但nfs有難度
三、要求網絡存儲,提供給多臺主機同時訪問,如集羣環境
iscsi協議
理解ISCSI協議重點是理解封裝的概念,SCSI命令經過 iscis協議封裝後在TCP/IP網絡上傳送,所以須要CPU資源來處理報文頭的封裝與解封裝(也有專用的iscsiHBA卡,不過價格較貴罷了)
iSCSI術語
IQN(iSCSI Qualified Name)用來識別iSCSI通訊的服務端和客戶端,格式是
iqn.yyyy-mm.com.reverse.domain:optional-extra-name
如主機名爲instructor.example.com。第一個分享的LV空間能夠是iqn.2013-10.com.example.instructor:lv1-my-first-lv
可選部分(含前面的冒號)加上能夠用於區分多個分享的設備,若有多個lv要分享的時候
target :iSCSI服務端叫target,target 分享LUN,logical unit ,一臺服務器能夠分享一個或者多個LUN
initiator:iSCSI客戶端叫initiator,能夠由軟硬件實現,一般軟件實現的較多(省錢)
node: iSCSI服務端,iSCSI客戶端都叫node
Portal :在iSCSI中,Portal是一個target或者initiator的IP,用於創建鏈接
iSNS: internet storage name service ,一個命名服務,用來讓initiator發現target,較少使用
二、安裝包
scsi-target-utils
iscsi-initiator-utils
scsi-target-utils包中的主要配置文件以及命令:
/etc/tgt/target.conf : 主要配置文件
/usr/sbin/tgt-admin : 在線查詢、刪除target等功能的命令
/usr/sbin/tgtd : 主要提供iscsi target服務的主程序
iscsi-initiator-utils中的主要配置文件以及命令:
/etc/iscsi/iscsid.conf : 主要配置文件
/sbin/iscsid : 啓動iscsi initiator的主要服務程序
/sbin/iscsiadm : 管理iscsi initiator的管理程序
/etc/intit.d/iscsid : 主要服務進程
/etc/init.d/iscsi : 啓動該腳本,可使發現過的iscsi target配置生效,通常直接使用該腳本便可,initiator未執行的話,會調用/etc/init.d/iscsid啓動initiator。
Target可作磁盤分享給Initiator使用的方式:
(1)大型文件(dd命令生成)(2) 磁盤陣列、磁盤或者磁盤分區等真實磁盤(3)使用LVM中的邏輯卷LV
三、tgtadm命令詳解
[root@ser ~]# tgtadm -h
Usage: tgtadm [OPTION]Linux SCSI Target Framework Administration Utility, version 1.0.24
--lld <driver> --mode(模式) target --op(操做) new --tid <id> --targetname <name> 注:tid不能爲0,0默認保留給本機--lld <driver> --mode target --op delete [--force] --tid <id>--lld <driver> --mode target --op show--lld <driver> --mode target --op show --tid <id>--lld <driver> --mode target --op update --tid <id> --name <param> --value <value> //更改目標參數--lld <driver> --mode target --op bind(綁定) --tid <id> --initiator-address <address>--lld <driver> --mode target --op bind --tid <id> --initiator-name <name>--lld <driver> --mode target --op unbind(解除綁定) --tid <id> --initiator-address <address>--lld <driver> --mode target --op unbind --tid <id> --initiator-name <name>--lld <driver> --mode logicalunit(邏輯磁盤塊) --op new --tid <id> --lun <lun> \--backing-store <path> --bstype <type> --bsoflags <options>--lld <driver> --mode logicalunit(邏輯單元) --op delete --tid(tid號) <id> --lun(邏輯單元) <lun>--lld <driver> --mode account(帳戶) --op new --user <name> --password <pass>--lld <driver> --mode account --op delete --user <name>--lld <driver> --mode account --op bind --tid <id> --user <name> [--outgoing]--lld <driver> --mode account --op unbind --tid <id> --user <name>--control-port <port> use control port <port>--help display this help and exit
tgtadm模式化命令:
--mode
經常使用模式:target、logicalunit、account
target --op
new 、delete、show、update、bind、unbind
logicalunit --op //邏輯單元塊(能夠是一個卷、一個磁盤、一個RAID、一個LVM),必定要在target的基礎上建立lun,併爲lun分配一個單元號
new 、delete
account --op //賬號綁定
new、delete、bind、unbind
--lld //設備塊地址
--tid //指定tid號,target的編號。不可爲0,0保留給當前主機使用的。
--lun //指定邏輯單元號
--backing-store //指定後端存儲
--user //指定用戶名
--password //指定密碼
targetname(target命名):
iqn.yyyy-mm.<reversed domain name>[:identifier]
例如:iqn.2014-12.com.wgmml:t
t:是描述,能夠是硬盤所在機房機櫃位置。注以時間後域名段要反寫。如上
例:
服務端:
# tgtadm --lld iscsi --mode target --op new --targetname iqn.2014.12.com.ser:dosk1 --tid 1
//新建一個target,target名爲iqn.2014.12.com.ser:dosk1 ,tid爲1
# tgtadm --lld iscsi --mode target --op show //查看當前主機target
注:一個target上最多有32個lun
# tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb
//在tid爲1的target上建立新lun並鏈接存儲設備(sdb爲新加的硬盤)
# tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address 10.1.1.0/24
//綁定10.1.1.0/24網段可訪問tid爲1的target
客戶端:
# iscsi-iname //顯示initatorname
iqn.1994-05.com.redhat:c42a4a9748db
# iscsi-iname -p iqn.1994-05.com.wgmml //命令更改initator端名
iqn.1994-05.com.wgmml:35536bb7a6
#vim /etc/iscsi/initiatorname.iscsi //保存initator名的文件,也能夠在此文件建立別名
# echo "InitiatorName=`iscsi-iname -p iqn.2014.12.com.wgmml`" > /etc/iscsi/initiatorname.iscsi
//iscsi-iname -p修改後的InitiatorName永久保存到initiatorname.iscsi 文件
# iscsiadm -h
iscsiadm -m discoverydb [ -hV ] [ -d debug_level ] [-P printlevel] [ -t type -p ip:port -I ifaceN ... [ -Dl ] ] | [ [ -p ip:port -t type] [ -o operation ] [ -n name ] [ -v value ] [ -lD ] ]
iscsiadm -m discovery [ -hV ] [ -d debug_level ] [-P printlevel] [ -t type - p ip:port -I ifaceN ... [ -l ] ] | [ [ -p ip:port ] [ -l | -D ] ]
iscsiadm -m node [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ -S ] [ [ -T targetname -p ip:port -I ifaceN ] [ -l | -u | -R | -s] ] [ [ -o operation ] [ -n name ] [ -v value ] ]
iscsiadm -m session [ -hV ] [ -d debug_level ] [ -P printlevel] [ -r sessionid | sysfsdir [ -R | -u | -s ] [ -o operation ] [ -n name ] [ -v value ] ]
iscsiadm -m iface [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -I ifacename | -H hostno|MAC ] [ [ -o operation ] [ -n name ] [ -v value ] ] [ -C ping [ -a ip ] [ -b packetsize ] [ -c count ] [ -i interval ] ]
iscsiadm -m fw [ -l ]
iscsiadm -m host [ -P printlevel ] [ -H hostno|MAC ] [ -C chap [ -o operation ] [ -v chap_tbl_idx ] ]
iscsiadm -k priority
iscsiadm模式化命令
-m
經常使用模式:discovery|node|session|iface
discovery:發現某服務器是否有target輸入,以及輸出哪些target;
node:管理跟某target的關聯關係,創建關聯、斷開關聯。。。
session:會話管理
iface:端口管理
例:
# iscsiadm -m discovery -d 2 -t st -p 10.1.1.2
10.1.1.2:3260,1 iqn.2014.12.com.wgmml:disk1
//查看10.1.1.2主機共享的target及端口,發現完後會在/var/lib/iscsi/send_targets/下顯示記錄,不想使用是須要刪除。
# iscsiadm -m node -T iqn.2014.12.com.wgmml:disk1 -p 10.1.1.2 -l
//掛載登陸 10.1.1.2target服務器 iqn.2014.12.com.wgmml:disk1磁盤
四、實例一:target端共享一個10G的硬盤塊,硬盤路徑爲/dev/sdb,target端ip:10.1.1.2 Initiator端ip:10.1.1.3
Target端:
[root@ser ~]# yum install scsi-target-utils //YUM安裝scsi target端
[root@ser ~]# service tgtd start //啓動服務
[root@ser ~]# netstat -na |grep 3260 //查看是否啓動
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN tcp 0 0 :::3260 :::* LISTEN
[root@ser ~]# tgtadm --lld iscsi --mode target --op new --targetname iqn.2014.12.disk1 --tid 1 //建立一個新的target,命名爲 iqn.2014.12.disk1 ,target的tid爲1
[root@ser ~]# tgtadm --lld iscsi --mode target --op show //查看本機的target基本信息,包括target名及target下Lun信息、磁盤大小等信息
[root@ser ~]# tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb //在tid爲1的target下建立新lun並鏈接logicalunit
[root@ser ~]# tgtadm --lld iscsi --mode target --op show //查看新lun是否添加成功
[root@ser ~]# tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL //target設置訪問權限容許任意訪問
[root@ser ~]# tgtadm --lld iscsi --mode target --op unbind --tid 1 -I ALL //任意訪問不安全,刪除任意訪問權限
注:爲target分配任意存儲設備後,須要設置訪問權限控制後纔可使用。
[root@ser ~]# tgtadm --lld iscsi --mode target --op bind --tid 1 -I 10.1.1.0/24 //設置指定網段可訪問
注: 訪問控制列表可以使用「tgtadm --lld iscsi --mode target --op show」下的「ACL information」查看
Initiator端:
Linux:
[root@initiator ~]# yum install iscsi-initiator-utils //安裝initiator端
[root@initiator ~]# iscsiadm -m discovery -t sendtargets -p 10.1.1.2 //發現網絡中可用的target
Starting iscsid: [ OK ]
10.1.1.2:3260,1 iqn.2014.12.disk1
[root@initiator ~]# iscsiadm -m node -T iqn.2014.12.disk1 -p 10.1.1.2 -l //登陸可用target會話
Logging in to [iface: default, target: iqn.2014.12.disk1, portal: 10.1.1.2,3260] (multiple)
Login to [iface: default, target: iqn.2014.12.disk1, portal: 10.1.1.2,3260] successful.
[root@initiator ~]# fdisk -l //查看是否多了一個10G的磁盤
windows:
運行iSCSi發起程序
在目標裏填寫Target的地址並點擊快速鏈接(需等待一段時間加載驅動)
磁盤管理中查看是否鏈接成功
實驗二:開機自動建立
Target端:
# vim /etc/tgt/targets.conf
<target iqn.2014.12.com.wgmml.target1> //targetname名
backing-store /dev/sdb //target共享的磁盤
initiator-address 10.1.1.2/24 //有訪問控制權限的網段
</target>
實例三: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 iq.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
[root@station9 ~]# tgtadm --lld iscsi --mode target --op show
3.2. initiator端配置
3.2.1修改iscsi配置文件,添加CHAP驗證賬號
[root@station2 ~]# vim /etc/iscsi/nf
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
[root@station2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.32.39:3260
192.168.32.39:3260,1 iq.example.station9:disk1
[root@station2 ~]# iscsiadm -m node -T iq.example.station9:disk1 -p 192.168.32.39:3260 -l
Logging in to [iface: default, target: iq.example.station9:disk1, portal: 192.168.32.39,3260]
Login to [iface: default, target: iq.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
[root@station9 ~]# tgtadm --lld iscsi --mode target --op show
4.2. initiator配置
[root@station2 ~]# vim /etc/iscsi/iscsid.conf
node.session.timeo.replacement_timeout = 20
node.session.auth.authmethod = CHAP
node.session.auth.username = redhat
node.session.auth.password = redhat123
node.session.auth.username_in = out_redhat
#initiator端驗證賬號,和target設備的outgoing賬號同樣
node.session.auth.password_in = out_redhat123