在CentOS7上配置iSCSI

iSCSI使用TCP/IP協(xié)議對存儲使用的SCSI指令進(jìn)行封裝,使得可通過TCP/IP網(wǎng)絡(luò)訪問持久化存儲。本文在CentOS7上對iSCSI的配置和使用進(jìn)行介紹。

1. 實驗環(huán)境

  • 虛擬化軟件:

  • 實驗虛機(jī):

    • iscsi-disks: 192.168.56.20 (iSCSI target,提供存儲設(shè)備),默認(rèn)配置1個cpu,1G內(nèi)存。
    • iscsi-host: 192.168.56.21 (iSCSI initiator,訪問iSCSI設(shè)備的主機(jī)),默認(rèn)配置1個cpu,1G內(nèi)存。
  • 安裝和管理網(wǎng)絡(luò):192.168.56.0/24,該網(wǎng)絡(luò)為VirtualBox的Host-Only網(wǎng)絡(luò),支持物理機(jī)和VirtualBox虛機(jī)間的互相訪問。

2. 克隆項目并啟動上述虛擬機(jī)

本文中的實驗僅涉及一個主機(jī)節(jié)點和一個存儲節(jié)點。

$ git clone https://github.com/lprincewhn/iscsi.git
$ cd iscsi
$ vagrant up

虛擬機(jī)啟動完畢后可使用以下用戶登陸:

  • root/vagrant
  • vagrant/vagrant

3. 創(chuàng)建虛擬磁盤

使用root用戶登陸iscsi-disks,使用losetup來創(chuàng)建實驗用的存儲設(shè)備。

Step 1 創(chuàng)建大文件用于支持虛擬存儲設(shè)備

[root@iscsi-disks ~]# dd if=/dev/zero of=/lun1.img bs=1M count=1024           
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.29056 s, 469 MB/s

為了避免Selinux權(quán)限問題,建議不要將文件創(chuàng)建在/root目錄下。

Step 2 創(chuàng)建loop設(shè)備

[root@iscsi-disks ~]# losetup -f
/dev/loop0
[root@iscsi-disks ~]# losetup /dev/loop0 /lun1.img
[root@iscsi-disks ~]# losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /lun1.img

Step 3 安裝iSCSI target軟件包并啟動服務(wù)

[root@iscsi-disks ~]# yum -y install targetcli
[root@iscsi-disks ~]# systemctl enable target && systemctl start target

Step 4 在targetcli命令行中創(chuàng)建存儲設(shè)備

[root@iscsi-disks ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> /backstores/block create ib_vol1 /dev/loop0          # 創(chuàng)建Block
Created block storage object ib_vol1 using /dev/loop0.

/> /iscsi create iqn.2016-06.com.iscsi-disks:iscsi-disks   # 定義存儲節(jié)點
Created target iqn.2016-06.com.iscsi-disks:iscsi-disks.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

/> /iscsi/iqn.2016-06.com.iscsi-disks:iscsi-disks/tpg1/acls create iqn.2016-06.com.iscsi-host:iscsi-host # 將訪問主機(jī)加入設(shè)備ACL,這樣主機(jī)才能訪問到這個設(shè)備
Created Node ACL for iqn.2016-06.com.iscsi-host:iscsi-host

/> /iscsi/iqn.2016-06.com.iscsi-disks:iscsi-disks/tpg1/luns create /backstores/block/ib_vol1   # 使用Block定義存儲節(jié)點上的lun
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2016-06.com.iscsi-host:iscsi-host
/> ls    # 查看上述創(chuàng)建的內(nèi)容及關(guān)系
o- / ..................................................................... [...]
  o- backstores .......................................................... [...]
  | o- block .............................................. [Storage Objects: 1]
  | | o- ib_vol1 .................... [/dev/loop0 (1.0GiB) write-thru activated]
  | |   o- alua ............................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ................... [ALUA state: Active/optimized]
  | o- fileio ............................................. [Storage Objects: 0]
  | o- pscsi .............................................. [Storage Objects: 0]
  | o- ramdisk ............................................ [Storage Objects: 0]
  o- iscsi ........................................................ [Targets: 1]
  | o- iqn.2016-06.com.iscsi-disks:iscsi-disks ....................... [TPGs: 1]
  |   o- tpg1 ........................................... [no-gen-acls, no-auth]
  |     o- acls ...................................................... [ACLs: 1]
  |     | o- iqn.2016-06.com.iscsi-host:iscsi-host ............ [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ........................... [lun0 block/ib_vol1 (rw)]
  |     o- luns ...................................................... [LUNs: 1]
  |     | o- lun0 .............. [block/ib_vol1 (/dev/loop0) (default_tg_pt_gp)]
  |     o- portals ................................................ [Portals: 1]
  |       o- 0.0.0.0:3260 ................................................. [OK]
  o- loopback ..................................................... [Targets: 0]

注:同一臺主機(jī)可以創(chuàng)建多個target,每個target包含自己的lun和主機(jī),實現(xiàn)主機(jī)組和lun的綁定
如下圖中定義了iscsi-disks和linuxha兩個target,其中iscsi-disks中的lun0(block/ib_vol1)只允許iscsi-host訪問,linuxha中的lun0(block/ha_vol1)只運(yùn)行ha-host1訪問,

o- iscsi ........................................................ [Targets: 2]
| o- iqn.2016-06.com.iscsi-disks:iscsi-disks ....................... [TPGs: 1]
| | o- tpg1 ........................................... [no-gen-acls, no-auth]
| |   o- acls ...................................................... [ACLs: 1]
| |   | o- iqn.2016-06.com.iscsi-host:iscsi-host ............ [Mapped LUNs: 1]
| |   |   o- mapped_lun0 ........................... [lun0 block/ib_vol1 (rw)]
| |   o- luns ...................................................... [LUNs: 1]
| |   | o- lun0 .............. [block/ib_vol1 (/dev/loop0) (default_tg_pt_gp)]
| |   o- portals ................................................ [Portals: 1]
| |     o- 0.0.0.0:3260 ................................................. [OK]
| o- iqn.2016-06.com.iscsi-disks:linuxha ........................... [TPGs: 1]
|   o- tpg1 ........................................... [no-gen-acls, no-auth]
|     o- acls ...................................................... [ACLs: 1]
|     | o- iqn.2016-06.com.ha-host1:ha-host1 ................ [Mapped LUNs: 1]
|     |   o- mapped_lun0 ........................... [lun0 block/ha_vol1 (rw)]
|     o- luns ...................................................... [LUNs: 1]
|     | o- lun0 .............. [block/ha_vol1 (/dev/loop1) (default_tg_pt_gp)]
|     o- portals ................................................ [Portals: 1]
|       o- 0.0.0.0:3260 ................................................. [OK]

Step 5 放通防火墻

如果啟用了防火墻,則需要放通以下端口:

# iptables -I INPUT 1  -p tcp --dport 3260 -j ACCEPT
# service iptables save   #該命令需要安裝iptables-services軟件包

4. 讓主機(jī)發(fā)現(xiàn)存儲設(shè)備

Step 1 安裝iSCSI initiator軟件包

[root@iscsi-host ~]# yum -y install iscsi-initiator-utils

Step 2 修改配置文件/etc/iscsi/initiatorname.iscsi

在其中定義主機(jī)Initiator的名字:

InitiatorName=iqn.2016-06.com.iscsi-host:iscsi-host

此處定義的Initiator名字要和在存儲節(jié)點中定義ACL時使用的主機(jī)名字一致。

Step 3 通過IP發(fā)現(xiàn)存儲節(jié)點

[root@iscsi-host ~]# iscsiadm -m discovery -t sendtargets -p 192.168.56.20
192.168.56.20:3260,1 iqn.2016-06.com.iscsi-disks:iscsi-disks
[root@iscsi-host ~]# iscsiadm -m node -o show
# BEGIN RECORD 6.2.0.874-2
node.name = iqn.2016-06.com.iscsi-disks:iscsi-disks
node.tpgt = 1
node.startup = automatic
node.leading_login = No
...
# END RECORD

Step 4 從主機(jī)發(fā)起iscsi登陸

  • 方法一:使用指令登陸
[root@iscsi-host ~]# iscsiadm -m node --login                             
Logging in to [iface: default, target: iqn.2016-06.com.iscsi-disks:iscsi-disks, portal: 192.168.56.20,3260] (multiple)
Login to [iface: default, target: iqn.2016-06.com.iscsi-disks:iscsi-disks, portal: 192.168.56.20,3260] successful.
[root@iscsi-host ~]# iscsiadm -m session -o show
tcp: [1] 192.168.56.20:3260,1 iqn.2016-06.com.iscsi-disks:iscsi-disks (non-flash)

如果之前發(fā)現(xiàn)了多個target,此處可用--targetname指定登陸的target。

  • 方法二:iscsi.service會進(jìn)行自動登陸,直接啟動該服務(wù)即可
[root@iscsi-host ~]# systemctl start iscsi && systemctl enable iscsi

登陸后可使用fdisk發(fā)現(xiàn)新存儲設(shè)備:

[root@iscsi-host ~]# fdisk -l
...
Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 126976 bytes

Step 5 使用新存儲設(shè)備

新的存儲設(shè)備可以當(dāng)成普通硬盤使用,如創(chuàng)建文件系統(tǒng)并掛載到主機(jī)目錄中:

[root@iscsi-host ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@iscsi-host ~]# mount /dev/sdb /mnt
[root@iscsi-host ~]# cd /mnt
[root@iscsi-host mnt]# ls
[root@iscsi-host mnt]# touch abcd
[root@iscsi-host mnt]# ls
abcd

5. iscsi服務(wù)和iscsid服務(wù)的關(guān)系

安裝iscsi-initiator-utils后,系統(tǒng)新增了兩個iscsi相關(guān)的服務(wù),分別是iscsi.service和iscsid.service。

真正用于iscsi登陸的服務(wù)是iscsi.service,他啟動時會同時啟動iscsid.service,并且登陸完成后iscsi.service的進(jìn)程將自動退出,由iscsid.service繼續(xù)監(jiān)控iscsi設(shè)備的狀態(tài)。

[root@iscsi-host ~]# systemctl status iscsi
?? iscsi.service - Login and scanning of iSCSI devices
   Loaded: loaded (/usr/lib/systemd/system/iscsi.service; enabled; vendor preset: disabled)
   Active: active (exited) since Tue 2018-04-17 07:57:07 UTC; 3min 21s ago
     Docs: man:iscsid(8)
           man:iscsiadm(8)
  Process: 1179 ExecStart=/sbin/iscsiadm -m node --loginall=automatic (code=exited, status=0/SUCCESS)
  Process: 1176 ExecStart=/usr/libexec/iscsi-mark-root-nodes (code=exited, status=0/SUCCESS)
 Main PID: 1179 (code=exited, status=0/SUCCESS)
[root@iscsi-host ~]# systemctl status iscsid      
?? iscsid.service - Open-iSCSI
  Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
  Active: active (running) since Tue 2018-04-17 07:57:07 UTC; 36s ago
    Docs: man:iscsid(8)
          man:iscsiadm(8)
 Process: 1168 ExecStop=/sbin/iscsiadm -k 0 2 (code=exited, status=0/SUCCESS)
 Process: 1181 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS)
Main PID: 1183 (iscsid)
  CGroup: /system.slice/iscsid.service
          ?à?¤1182 /usr/sbin/iscsid
          ???¤1183 /usr/sbin/iscsid

Apr 17 07:57:07 iscsi-host systemd[1]: Starting Open-iSCSI...
Apr 17 07:57:07 iscsi-host systemd[1]: Failed to read PID from file /var/run/...nt
Apr 17 07:57:07 iscsi-host iscsid[1182]: iSCSI daemon with pid=1183 started!
Apr 17 07:57:07 iscsi-host systemd[1]: Started Open-iSCSI.
Apr 17 07:57:08 iscsi-host iscsid[1182]: Could not set session4 priority. REA...d.
Apr 17 07:57:08 iscsi-host iscsid[1182]: Connection4:0 to [target: iqn.2016-0...ow
Hint: Some lines were ellipsized, use -l to show in full.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • feisky云計算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,355評論 0 5
  • 這部電影是安妮海瑟薇主要的,看完電影腦海中想的就是:為什么會有這么好看的人啊!嫉妒使我丑陋!很喜歡里面關(guān)于愛情的故...
    87f8a3e128b7閱讀 415評論 0 0
  • 愛情好似早餐 等在路口 便宜可口 不用開口 規(guī)矩照舊 我努力迎合你胃口 你卻不再光顧檔口 我以為你與某場 百年一遇...
    夾餡鍋鍋閱讀 196評論 0 0
  • 一切都是原來的樣子,可又感覺那么陌生! 床頭燈的黃暈映照著天花板,各色花紋的投射里光影斑駁,四維的墻壁沒有大的變化...
    瘋讀閱讀 353評論 1 0

友情鏈接更多精彩內(nèi)容