1、環境介紹
SCSI(Small Computer System Interface)是塊數據傳輸協議,在存儲行業廣泛應用,是存儲設備最基本的標準協議。從根本上說,iSCSI協議是一種利用IP網絡來傳輸潛伏時間短的SCSI數據塊的方法,ISCSI使用以太網協議傳送SCSI命令、響應和數據。ISCSI可以用我們已經熟悉和每天都在使用的以太網來構建IP存儲局域網。通過這種方法,ISCSI克服了直接連接存儲的局限性,使我們可以跨不同服務器共享存儲資源,并可以在不停機狀態下擴充存儲容量。
所需軟件與軟件結構
CentOS 將 tgt 的軟件名稱定義為 scsi-target-utils ,因此你得要使用 yum 去安裝他才行。至于用來作為 initiator 的軟件則是使用 linux-iscsi 的項目,該項目所提供的軟件名稱則為 iscsi-initiator-utils 。所以,總的來說,你需要的軟件有:
scsi-target-utils:用來將 Linux 系統仿真成為 iSCSI target 的功能;
iscsi-initiator-utils:掛載來自 target 的磁盤到 Linux 本機上。
那么 scsi-target-utils 主要提供哪些檔案呢?基本上有底下幾個比較重要需要注意的:
/etc/tgt/targets.conf:主要配置文件,設定要分享的磁盤格式與哪幾顆;
/usr/sbin/tgt-admin:在線查詢、刪除 target 等功能的設定工具;
/usr/sbin/tgt-setup-lun:建立 target 以及設定分享的磁盤與可使用的
客戶端等工具軟件。
/usr/sbin/tgtadm:手動直接管理的管理員工具 (可使用配置文件取代);
/usr/sbin/tgtd:主要提供 iSCSI target 服務的主程序;
/usr/sbin/tgtimg:建置預計分享的映像文件裝置的工具 (以映像文件仿真磁盤);
這次的實驗結構
(sdx1、sdy1是物理的磁盤通過lun連接到target虛擬的共享塊,在客戶端掛載這個塊。這里我們添加一塊硬盤sdb,創建sdb1(400m)和sdb2(500m))
2、server端配置
添加一塊磁盤后
復查一下
[root@100 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 59.5G 0 part
├─rhel-swap 253:0 0 2G 0 lvm [SWAP]
├─rhel-root 253:1 0 38.6G 0 lvm /
└─rhel-home 253:2 0 18.9G 0 lvm /home
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 400M 0 part
└─sdb2 8:18 0 500M 0 part
sr0 11:0 1 3.6G 0 rom /dvd
安裝target并加入開機自啟動
yum install -y target*
systemctl start target
systemctl enable target
配置target的ctl將sdb1和sdb2共享出去
(一)、block關聯磁盤
[root@100 ~]# targetcli
targetcli shell version 2.1.fb37
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> /backstores/block create block1 /dev/sdb
/dev/sdb /dev/sdb1 /dev/sdb2
...................................dev
/> /backstores/block create block1 /dev/sdb1
Created block storage object block1 using /dev/sdb1.
/> /backstores/block create block2 /dev/sdb2
Created block storage object block2 using /dev/sdb2.
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 2]
| | o- block1 .................. [/dev/sdb1 (400.0MiB) write-thru deactivated]#新建的block
| | o- block2 .................. [/dev/sdb2 (500.0MiB) write-thru deactivated]#新建的block
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 0]
o- loopback ..................................................... [Targets: 0]
/>
(二)、創建target
/> /iscsi create iqn.2018-10.20.com:disk
Created target iqn.2018-10.20.com:disk.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 2]
| | o- block1 .................. [/dev/sdb1 (400.0MiB) write-thru deactivated]
| | o- block2 .................. [/dev/sdb2 (500.0MiB) write-thru deactivated]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 1] #這里是創建tartet的目錄
| o- iqn.2018-10.20.com:disk ....................................... [TPGs: 1]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 0]
| o- luns ...................................................... [LUNs: 0]
| o- portals ................................................ [Portals: 1]
| o- 0.0.0.0:3260 ................................................. [OK]
o- loopback ..................................................... [Targets: 0]
(三)、創建lun關聯block和target
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 2]
| | o- block1 .................. [/dev/sdb1 (400.0MiB) write-thru deactivated]
| | o- block2 .................. [/dev/sdb2 (500.0MiB) write-thru deactivated]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 1]
| o- iqn.2018-10.20.com:disk ....................................... [TPGs: 1]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 0]
| o- luns ...................................................... [LUNs: 0]
| o- portals ................................................ [Portals: 1]
| o- 0.0.0.0:3260 ................................................. [OK]
o- loopback ..................................................... [Targets: 0]
/> iscsi/iqn.2018-10.20.com:disk/tpg1/acls create iqn.2018-10.20.com:xx
Created Node ACL for iqn.2018-10.20.com:xx
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 2]
| | o- block1 .................. [/dev/sdb1 (400.0MiB) write-thru deactivated]
| | o- block2 .................. [/dev/sdb2 (500.0MiB) write-thru deactivated]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 1]
| o- iqn.2018-10.20.com:disk ....................................... [TPGs: 1]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 1]
| | o- iqn.2018-10.20.com:xx ............................ [Mapped LUNs: 0]
| o- luns ...................................................... [LUNs: 0]
| o- portals ................................................ [Portals: 1]
| o- 0.0.0.0:3260 ................................................. [OK]
o- loopback ..................................................... [Targets: 0]
/> iscsi/iqn.2018-10.20.com:disk/tpg1/luns create /
/backstores/block/block1 /lib/ /sbin/
/backstores/block/block2 /lib64/ /srv/
/bin/ /media/ /sys/
/boot/ /mnt/ /tmp/
/dev/ /opt/ /usr/
/dvd/ /proc/ /var/
/etc/ /root/
/home/ /run/
..................................................storage_object
/> iscsi/iqn.2018-10.20.com:disk/tpg1/luns create /backstores/block/block
/backstores/block/block1 /backstores/block/block2
..................................................storage_object
/> iscsi/iqn.2018-10.20.com:disk/tpg1/luns create /backstores/block/block1
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2018-10.20.com:xx
/> iscsi/iqn.2018-10.20.com:disk/tpg1/luns create /backstores/block/block2
Created LUN 1.
Created LUN 1->1 mapping in node ACL iqn.2018-10.20.com:xx
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 2]
| | o- block1 .................... [/dev/sdb1 (400.0MiB) write-thru activated]
| | o- block2 .................... [/dev/sdb2 (500.0MiB) write-thru activated]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 1]
| o- iqn.2018-10.20.com:disk ....................................... [TPGs: 1]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 1] #添加了一條認證
| | o- iqn.2018-10.20.com:xx ............................ [Mapped LUNs: 2]
| | o- mapped_lun0 ............................ [lun0 block/block1 (rw)] #關聯lun
| | o- mapped_lun1 ............................ [lun1 block/block2 (rw)] #關聯lun
| o- luns ...................................................... [LUNs: 2]
| | o- lun0 ................................... [block/block1 (/dev/sdb1)]
| | o- lun1 ................................... [block/block2 (/dev/sdb2)]
| o- portals ................................................ [Portals: 1]
| o- 0.0.0.0:3260 ................................................. [OK]
o- loopback ..................................................... [Targets: 0]
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
至此服務器端就配置完了,詳細的配置可以到/etc/target/saveconfig.json修改
3、client端配置
(一)、安裝iscsi*
軟件包 iscsi-initiator-utils-6.2.0.873-29.el7.x86_64
軟件包 iscsi-initiator-utils-iscsiuio-6.2.0.873-29.el7.x86_64
[root@200 ~]# yum install -y iscsi*
(二)、加入開機自啟
[root@200 ~]# systemctl restart iscsid.service
[root@200 ~]# systemctl enable iscsid.service
(三)、做一個發現的操作,發現服務器共享的target名字是什么
[root@200 ~]# iscsiadm -m discovery -t st -p 192.168.137.100
192.168.137.100:3260,1 iqn.2018-10.20.com:disk
m模式mode-discovery, discoverydb.
t類型type must be sendtargets (or abbreviated as st), slp, isns or fw. Currently only sendtargets, fw, and iSNS is supported, see the DISCOVERY TYPES section.
p是IP:port
(四)、查看發現的條目
[root@200 ~]# iscsiadm -m discovery -p 192.168.137.100
# BEGIN RECORD 6.2.0.873-28
discovery.startup = manual
discovery.type = sendtargets #-t st
discovery.sendtargets.address = 192.168.137.100 #target服務端
discovery.sendtargets.port = 3260 #端口
discovery.sendtargets.auth.authmethod = None #認證沒有
discovery.sendtargets.auth.username =
discovery.sendtargets.auth.password =
discovery.sendtargets.auth.username_in =
discovery.sendtargets.auth.password_in =
discovery.sendtargets.timeo.login_timeout = 15 #登錄超時時間
discovery.sendtargets.use_discoveryd = No #沒有使用這個發現
discovery.sendtargets.discoveryd_poll_inval = 30
discovery.sendtargets.reopen_max = 5
discovery.sendtargets.timeo.auth_timeout = 45
discovery.sendtargets.timeo.active_timeout = 30
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# END RECORD
(五)、修改客戶端的acl并登錄
[root@200 ~]# iscsiadm -m node -T iqn.2018-10.20.com:disk -p 192.168.137.100 -l
Logging in to [iface: default, target: iqn.2018-10.20.com:disk, portal: 192.168.137.100,3260] (multiple)
Login to [iface: default, target: iqn.2018-10.20.com:disk, portal: 192.168.137.100,3260] successful.
[root@200 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 59.5G 0 part
├─rhel-swap 253:0 0 2G 0 lvm [SWAP]
├─rhel-root 253:1 0 38.6G 0 lvm /
└─rhel-home 253:2 0 18.9G 0 lvm /home
sdb 8:16 0 400M 0 disk
sdc 8:32 0 500M 0 disk
sr0 11:0 1 3.6G 0 rom /dvd
[root@200 ~]# cat /etc/iscsi/initiatorname.iscsi
#InitiatorName=iqn.1994-05.com.redhat:949f18f9ce84
InitiatorName=iqn.2018-10.20.com:xx ##剛才設置的acl條目
注:這個自動加載過來的磁盤重啟之后是自動加載過來的
4、客戶端掛載iscsi的盤
格式化sdb和sdc
[root@200 ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb isize=256 agcount=8, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=102400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@200 ~]# mkfs.xfs /dev/sdc
meta-data=/dev/sdc isize=256 agcount=8, agsize=16000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
創建掛載點并掛載
[root@200 ~]# mkdir /sdb
[root@200 ~]# mkdir /sdc
注:如果需要實時同步的話需要使用gfs集群文件系統
[root@200 ~]# cat /etc/fstab |tail -n 4
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /dvd iso9660 defaults 0 0
/dev/sdb /sdb xfs _netdev 0 0 #添加的條目
/dev/sdc /sdc xfs _netdev 0 0 #添加的條目
[root@200 ~]# # mount -a
[root@200 ~]# mount |tail -n 4
gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/sdb on /sdb type xfs (rw,relatime,seclabel,attr2,inode64,noquota,_netdev)
/dev/sdc on /sdc type xfs (rw,relatime,seclabel,attr2,inode64,noquota,_netdev)
[root@200 ~]#
5、總結
(一)、增加iscsi存儲
(1)發現iscsi存儲:iscsiadm
-m discovery -t st -p ISCSI_IP
(2)查看iscsi發現記錄:iscsiadm
-m node
(3)登錄iscsi存儲:iscsiadm
-m node -T LUN_NAME -p ISCSI_IP -l
(4)開機自動:
iscsiadm -m node –T LUN_NAME -p ISCSI_IP --op
update -n node.startup -v
automatic
(二)、刪除iscsi存儲
(1)登出iscsi存儲
iscsiadm -m node -T LUN_NAME -p ISCSI_IP -u
(2)對出iscsi所有登錄
iscsiadm -m node --logoutall=all
(3)刪除iscsi發現記錄:iscsiadm
-m node -o delete -T LUN_NAME -p ISCSI_IP