简介
iSCSI(Internet Small Computer System Interface,发音为/ˈаɪskʌzi/),Internet小型计算机系统接口,又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术,由IETF提出,并于2003年2月11日成为正式的标准。与传统的SCSI技术比较起来,iSCSI技术有以下三个革命性的变化:
1 把原来只用于本机的SCSI协义透过TCP/IP网络发送,使连接距离可作无限的地域延伸;
2 连接的服务器数量无限(原来的SCSI-3的上限是15);
3 由于是服务器架构,因此也可以实现在线扩容以至动态部署。
作为对比:我们之前学习的共享出来的文件系统叫做nfs,现在共享出来的设备(磁盘)叫iscsi。
基本概念
名词 | 说明 |
---|---|
ACL | 访问权限控制列表,用来验证客户端启动器的访问,通常是客户端 iSCSI 启动器的 IQN 名称 |
IQN | 用于标识单个 iSCSI 目标和启动器的唯一名称(全部小写) |
WWN | 用于标识单个光纤通道端口和节点的唯一编号 |
TARGET | iSCSI 服务器上的存储资源 |
LUN | iSCSI 服务器上的块设备 |
initiator(启动器) | 以软件或硬件实施的 iSCSI 客户端 |
NODE | 单个 iSCSI 启动器或者目标 |
TPG | 启动器或者目标上的单个 IP 连接地址 |
Portal | 网络接口及端口 |
注意:IQN 的格式为:iqn.年份-月份.com|cn|net|org.域名:自定义标识,如:iqn.2018-05.com.test:desktop;其中的字母均应为小写,即使输入时包含大写,命令执行后,系统会自动转换成小写。
服务端的存储类型
类型 | 说明 |
---|---|
block | 块设备,磁盘驱动器、磁盘分区、逻辑卷、以及服务器上定义的任何 b 类型的设备文件 |
fileio | 在服务器上生成的一个指定大小的文件,类似于虚拟机中的虚拟磁盘 |
pscsi | 物理 SCSI,通常不使用 |
ramdisk | 内存盘,其中存储的数据在服务器重启后将全部丢失 |
以上四种类型在 iSCSI 管理中都归到 backstores 项下,其结构示例为:
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 0]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 0]
o- loopback ..................................................... [Targets: 0]
如何配置iscsi共享存储服务
在服务端:
- 第一步:安装targetcli划分磁盘用于iscsi服务,并开启服务。
yum install targetcli -y
systemctl start target
- 第二步:在磁盘划分设备用于共享
fdisk -l ##查看可以进行划分的设备
fdisk /dev/vdb ##在设备上面划分一个分区,划分一个500M的设备/dev/vdb1 准备将这个设备共享出去
partprobe ##同步分区表
targetcli ##开始划分准备共享出去的设备
- 第三步:创建新的 iSCSI Target,添加已创建的磁盘分区作为 Backstore, 并且仅限于 initiname 为 iqn.2018-05.com.test:desktop 的客户端使用。
1、进入 targetcli 管理界面并列出现有项目:
[root@server ~]# targetcli
targetcli shell version 2.1.fb34
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 0]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 0]
o- loopback ..................................................... [Targets: 0]
2、添加已创建的二个磁盘分区到 Backstores 项下:
/> /backstores/block create westos:storage1 /dev/vdb1
Created block storage object westos:storage1 using /dev/vdb1.
3、创建新的 Target:
/> /iscsi create iqn.2019-05.com.westos:storage1
Created target iqn.2019-05.com.westos:storage1.
Created TPG 1.
4、添加 Backstores 磁盘到 LUN 项下,用于将共享target与真实设备相关联
/> /iscsi/iqn.2019-05.com.westos:storage1/tpg1/luns create /backstores/block/westos:storage1
Created LUN 0.
5、设置共享设备target密码:(访问权限控制列表,用来验证客户端启动器的访问)
/> /iscsi/iqn.2019-05.com.westos:storage1/tpg1/acls create iqn.2019-05.com.westos:key1
Created Node ACL for iqn.2019-05.com.westos:key1
Created mapped LUN 0.
6、添加本机 IP ,用于开启网络共享,默认开启的端口是:3260
/> /iscsi/iqn.2019-05.com.westos:storage1/tpg1/portals create 172.25.254.125
Using default IP port 3260
Created network portal 172.25.254.125:3260.
7、查看刚刚的所有设置,完成后退出:
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 1]
| | o- westos:storage1 ........... [/dev/vdb1 (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.2019-05.com.westos:storage1 ............................... [TPGs: 1]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 1]
| | o- iqn.2019-05.com.westos:key1 ...................... [Mapped LUNs: 1]
| | o- mapped_lun0 ................... [lun0 block/westos:storage1 (rw)]
| o- luns ...................................................... [LUNs: 1]
| | o- lun0 .......................... [block/westos:storage1 (/dev/vdb1)]
| o- portals ................................................ [Portals: 1]
| o- 172.25.254.125: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
8、注意关闭火墙。
在客户端:
- 第一步:安装使用共享磁盘的服务,才可以使用别人的磁盘,这里安装iscsi启动器
yum install iscsi-initiator-utils.x86_64 -y
systecmtl start iscsid.service
- 第二步:查看服务端是否开启iscsi共享服务:
[root@client ~]# iscsiadm -m discovery -t st -p 172.25.254.125
172.25.254.125:3260,1 iqn.2019-05.com.westos:storage1
说明已经开启成功
- 第三步:编辑配置文件
vim /etc/iscsi/initiatorname.iscsi
写入刚刚设置的密码:InitiatorName=iqn.2019-05.com.westos:key1
- 第四步:重启服务
systecmtl restart iscsid.service
- 第五步:登录iscsi共享服务
[root@client ~]# iscsiadm -m node -T iqn.2019-05.com.westos:storage1 -p 172.25.254.125 -l
Logging in to [iface: default, target: iqn.2019-05.com.westos:storage1, portal: 172.25.254.125,3260] (multiple)
Login to [iface: default, target: iqn.2019-05.com.westos:storage1, portal: 172.25.254.125,3260] successful.
- 第六步:查看本地磁盘,可以看到/dev/sda 其实是服务器上面共享出来的/dev/vdb1
[root@client ~]# fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00013f3e
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 20970332 10484142+ 83 Linux
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 524 MB, 524288000 bytes, 1024000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 4194304 bytes
- 第七步:此时可以在客户端使用该设备进行划分并挂载文件系统。
fdisk /dev/sda #对共享设备进行划分
mkfs.xfs /dev/sda1 #格式化文件系统
mount /dev/sda1 /mnt/ #进行挂载设备,有可能挂载不上,因为autofs的影响
systemctl stop autofs.service #关闭autofs服务
mount /dev/sda1 /mnt/ #重新挂载成功
df ##查看成功
- 第八步:进入对应的挂载目录,就可以创建文件了
[root@client mnt]# ls
[root@client mnt]# touch iscsifile
[root@client mnt]# ls
iscsifile
在另一台客户端(真机):
既然是共享设备,那么我们肯定需要多台客户端可以对iscsi共享设备进行操作。我们想实现在另外的客户端,也可以看到共享设备里的文件。
- 第一步: 修改配置文件
vim /etc/iscsi/initiatorname.iscsi
,写入acl认证密码:
InitiatorName=iqn.2019-05.com.westos:key1
- 第二步:查看iscsi服务是否共享,并登录iscsi共享设备。
iscsiadm -m discovery -t st -p 172.25.254.125
iscsiadm -m node -T iqn.2019-05.com.westos:storage1 -p 172.25.254.125 -l
- 第三步:查看设备列表
fdisk -l
,发现多了一个设备。并进行挂载mount /dev/sdd1 /mnt/
- 第四步:进入对应的挂载目录,发现刚刚别的客户端共享的文件iscsifile。
[root@foundation2 ~]# cd /mnt/
[root@foundation2 mnt]# ls
iscsifile
客户端实现持久挂载
- 第一步:查看 UUID (因为共享设备的名字会变,不稳定,因此用uuid)
[root@client mnt]# blkid
/dev/vda1: UUID="9bf6b9f7-92ad-441b-848e-0257cbb883d1" TYPE="xfs"
/dev/sr0: UUID="2016-10-19-18-32-06-00" LABEL="RHEL-7.3 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda1: UUID="6d296a81-2baa-4b65-8eb0-c159bd9a7fa4" TYPE="xfs"
- 第二步:编辑配置文件
vim /etc/fstab
UUID=6d296a81-2baa-4b65-8eb0-c159bd9a7fa4 /mnt xfs defaults,_netdev 0 0
##_netdev(网络设备,启动网络才挂载,不然可能开不了机)
- 第三步:reboot 重启,存在bug,可能需要强制关机再重启。
- 第四步:df 查看 又可能受之前的autofs影响,所以可以关闭autofs,umount -a ,mount -a 成功。
[root@client ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3223136 7250764 31% /
devtmpfs 927060 0 927060 0% /dev
tmpfs 942648 80 942568 1% /dev/shm
tmpfs 942648 17028 925620 2% /run
tmpfs 942648 0 942648 0% /sys/fs/cgroup
/dev/sda1 98988 5280 93708 6% /mnt
成功!
客户端卸载 iSCSI Target
出于种种目的,如:磁盘扩容、客户端不再使用 iSCSI 进行数据存储、客户端布署其他应用而不再使用原应用等等,就需要将已经挂载的 iSCSI Target 进行卸载,并出于信息安全的目的,删除已经保存的服务端的相关信息,这时就需要进行下面的操作。
- 第一步:
yum install tree
安装树形查看目录的软件 - 第二步:
tree /var/lib/iscsi/
树形查看目录
[root@client mnt]# tree /var/lib/iscsi/
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
│ └── iqn.2019-05.com.westos:storage1
│ └── 172.25.254.125,3260,1
│ └── default
├── send_targets
│ └── 172.25.254.125,3260
│ ├── iqn.2019-05.com.westos:storage1,172.25.254.125,3260,1,default -> /var/lib/iscsi/nodes/iqn.2019-05.com.westos:storage1/172.25.254.125,3260,1
│ └── st_config
├── slp
└── static
10 directories, 2 files
- 第三步:彻底删除相关信息
iscsiadm -m node -T iqn.2019-05.com.westos:storage1 -p 172.25.254.125 -u
##取消登陆
Logging out of session [sid: 1, target: iqn.2019-05.com.westos:storage1, portal: 172.25.254.125,3260]
Logout of [sid: 1, target: iqn.2019-05.com.westos:storage1, portal: 172.25.254.125,3260] successful.
fdisk -l 发现设备不见了
tree /var/lib/iscsi 但信息依然在
systemctl restart iscsi 重启服务
fdisk -l 设备又出现了
iscsiadm -m node -T iqn.2019-05.com.westos:storage1 -p 172.25.254.125 -o delete
##彻底删除,否则重启服务,iscsi 会再次自动登陆设备
服务端删除 iSCSI Target 及 Backstores
- targetcli 进入iscsi,进行清除配置。
/> clearconfig
As a precaution, confirm=True needs to be set
/> clearconfig confirm=True
All configuration cleared
/> ls
o- / ......................................................... [...]
o- backstores .............................................. [...]
| o- block .................................. [Storage Objects: 0]
| o- fileio ................................. [Storage Objects: 0]
| o- pscsi .................................. [Storage Objects: 0]
| o- ramdisk ................................ [Storage Objects: 0]
o- iscsi ............................................ [Targets: 0]
o- loopback ......................................... [Targets: 0]
/>