iSCSI(Internet Small Computer System Interface,發音爲/аɪskʌzi/),Internet小型計算機系統接口,又稱爲IP-SAN,是一種基於因特網及SCSI-3協議下的存儲技術,由IETF提出,並於2003年2月11日成爲正式的標準。與傳統的SCSI技術比較起來,iSCSI技術有如下三個革命性的變化:html
把原來只用於本機的SCSI協義經過TCP/IP網絡發送,使鏈接距離可做無限的地域延伸;node
鏈接的服務器數量無限(原來的SCSI-3的上限是15);linux
因爲是服務器架構,所以也能夠實如今線擴容以致動態部署。後端
+--------------------+ | +-------------------+ | [ iSCSI Target ] | 192.168.233.101 | 192.168.233.102 |[ iSCSI Initiator ]| | node01 +-----------------+-----------------+ node02 | | 192.168.233.132 | | | +--------------------+ +-------------------+
兩臺主機node01和node02, 都是Vmware出來的虛擬機,安裝CentOS 7
最小系統;centos
node01準備用來配置iSCSI target
,爲了配置多路徑,配有兩塊網卡eth0
和eth1
,ip分別是192.168.233.101
和192.168.233.132
;bash
node02用來配置iSCSI initiator
,只有一塊網卡eth0
,ip爲192.168.233.102
;服務器
node01和node02都帶有/dev/sdb
和/dev/sdc
兩塊硬盤,接下來的配置,將會把node01的/dev/sdb
做爲iSCSI塊設備共享給node02。網絡
關閉selinux
session
setenforce 0 sed -i '/^SELINUX=.*/ s//SELINUX=disabled/' /etc/selinux/config
關閉防火牆架構
systemctl stop firewalld.service systemctl disable firewalld.service
安裝epel
擴展包
yum install -y epel-release
yum --enablerepo=epel -y install scsi-target-utils
vi /etc/tgt/target.conf
添加以下配置
<target iqn.2016-06.airborne007.com:target00> # 把/dev/sdb做爲塊設備共享出去 backing-store /dev/sdb # 可選,iSCSI Initiator限制 initiator-address 192.168.233.102 # 可選,認證配置,username和password配置成你本身的信息 incominguser username password </target>
systemctl enable tgtd.service systemctl start tgtd.service
tgtadm --mode target --op show
結果以下:
Target 1: iqn.2016-06.airborne007.com:target00 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 Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 32212 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /dev/sdb Backing store flags: Account information: admin ACL information: 192.168.233.102
yum -y install iSCSI-initiator-utils
# vi /etc/iSCSI/initiatorname.iSCSI InitiatorName=iqn.2016-06.airborne007.com:target00
# vi /etc/iSCSI/iSCSId.conf # 如下配置,若是你target沒有配置ACL限制,能夠直接跳過,使用默認配置便可 # 57行:取消註釋 node.session.auth.authmethod = CHAP # 61,62行:取消註釋,用戶名和密碼設置成前面在target裏面設置好的 node.session.auth.username = username node.session.auth.password = password
# iSCSIadm -m discovery -t sendtargets -p 192.168.244.101 192.168.233.101:3260,1 iqn.2016-06.airborne007.com:target00
# iSCSIadm -m discovery -t sendtargets -p 192.168.233.132 192.168.233.132:3260,1 iqn.2016-06.airborne007.com:target00
# iSCSIadm -m node -o show # BEGIN RECORD 6.2.0.873-33 node.name = iqn.2016-06.airborne007.com:target00 node.tpgt = 1 node.startup = automatic node.leading_login = No ... node.conn[0].iSCSI.IFMarker = No node.conn[0].iSCSI.OFMarker = No # END RECORD # BEGIN RECORD 6.2.0.873-33 node.name = iqn.2016-06.airborne007.com:target00 node.tpgt = 1 node.startup = automatic node.leading_login = No ... node.conn[0].iSCSI.IFMarker = No node.conn[0].iSCSI.OFMarker = No # END RECORD
# iSCSIadm -m node --login iSCSIadm -m node --login Logging in to [iface: default, target: iqn.2016-06.airborne007.com:target00, portal: 192.168.233.101,3260] (multiple) Logging in to [iface: default, target: iqn.2016-06.airborne007.com:target00, portal: 192.168.233.132,3260] (multiple) Login to [iface: default, target: iqn.2016-06.airborne007.com:target00, portal: 192.168.233.101,3260] successful. Login to [iface: default, target: iqn.2016-06.airborne007.com:target00, portal: 192.168.233.132,3260] successful.
# iSCSIadm -m session -o show tcp: [1] 192.168.233.101:3260,1 iqn.2016-06.airborne007.com:target00 (non-flash) tcp: [2] 192.168.233.132:3260,1 iqn.2016-06.airborne007.com:target00 (non-flash)
# cat /proc/partitions major minor #blocks name 11 0 617472 sr0 8 0 20971520 sda 8 1 512000 sda1 8 2 20458496 sda2 8 16 31457280 sdb 8 32 31457280 sdc 253 0 18317312 dm-0 253 1 2097152 dm-1 8 48 31457280 sdd 8 64 31457280 sde
能夠看到,sdd
和sde
就是經過iSCSI掛載獲得的磁盤,此時經過fdisk -l
命令,你能夠發現這兩塊磁盤和node01的/dev/sdb
徹底同樣,爲了正常使用這塊磁盤,咱們還須要配置磁盤多路徑。
普通的電腦主機都是一個硬盤掛接到一個總線上,這裏是一對一的關係。而到了有光纖組成的SAN環境,或者由iSCSI組成的IPSAN環境,因爲主機和存儲經過了光纖交換機或者多塊網卡及IP來鏈接,這樣的話,就構成了多對多的關係。也就是說,主機到存儲能夠有多條路徑能夠選擇。主機到存儲之間的IO由多條路徑能夠選擇。每一個主機到所對應的存儲能夠通過幾條不一樣的路徑,若是是同時使用的話,I/O流量如何分配?其中一條路徑壞掉了,如何處理?還有在操做系統的角度來看,每條路徑,操做系統會認爲是一個實際存在的物理盤,但實際上只是通向同一個物理盤的不一樣路徑而已,這樣是在使用的時候,就給用戶帶來了困惑。多路徑軟件就是爲了解決上面的問題應運而生的。
多路徑的主要功能就是和存儲設備一塊兒配合實現以下功能:
故障的切換和恢復
IO流量的負載均衡
磁盤的虛擬化
爲了主機可使用 iSCSI 多路徑訪問存儲設備,咱們須要在主機上安裝多路徑設備映射器 (DM-Multipath)。多路徑設備映射器能夠實現主機節點和後端存儲之間的多個 I/O 路徑配置爲一個單一邏輯設備,從而能夠提供鏈路冗餘和提升性能。主機經過訪問包含多個 I/O 路徑的邏輯設備,就能夠有效提升後端存儲系統的可靠性。
yum install device-mapper-multipath
systemctl enable multipathd.service
須要multipath正常工做只須要以下配置便可,若是想要了解詳細的配置,請參考Multipath
# vi /etc/multipath.conf blacklist { devnode "^sda" } defaults { user_friendly_names yes path_grouping_policy multibus failback immediate no_path_retry fail }
systemctl start multipathd.service
# multipath -ll mpatha (360000000000000000e00000000010001) dm-2 IET ,VIRTUAL-DISK size=30G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 3:0:0:1 sdd 8:48 active ready running `- 4:0:0:1 sde 8:64 active ready running
此時,執行lsblk
命令就能夠看到多路徑磁盤mpatha
了:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part ├─centos-root 253:0 0 17.5G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk sdc 8:32 0 30G 0 disk sdd 8:48 0 30G 0 disk └─mpatha 253:2 0 30G 0 mpath sde 8:64 0 30G 0 disk └─mpatha 253:2 0 30G 0 mpath sr0 11:0 1 603M 0 rom
接下來,就能夠對mpatha
作分區、格式化和建立邏輯卷等各類磁盤操做了,此處不表。