一、相关概念
iSCSI(Internet Small Computer System Interface),Internet小型计算机系统接口,又称为IP-SAN,是由IBM 下属的两大研发机构一一加利福尼亚AImaden和以色列Haifa研究中心共同开发的,是一个供硬件设备使用的、可在IP协议上层运行的SCSI指令集,是一种开放的基于IP协议的工业技术标准。一种基于因特网及SCSI-3协议下的存储技术,于2003年2月11日成为正式的标准
iSCSI使用 TCP/IP 协议(一般使用TCP端口860和3260)。 本质上,iSCSI 让两个主机通过 IP 网络相互协商然后交换SCSI命令。这样一来,iSCSI 就是用广域网仿真了一个常用的高性能本地存储总线,从而创建了一个存储局域网(SAN)。不像某些 SAN 协议,iSCSI 不需要专用的电缆;它可以在已有的交换和 IP 基础架构上运行。然而,如果不使用专用的网络或者子网( LAN 或者 VLAN ),iSCSI SAN 的部署性能可能会严重下降
两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装置
-
iSCSI target
:就是iSCSI的server,可以是一个物理磁阵;也可以是软件实现的iSCSI server。有硬件方式实现的iSCSI target,例如iSCSI的hba卡和带isoe(iSCSI offload engine)网卡(硬件上将iSCSI 包接包和封包) -
iSCSI initiator
:就是iSCSI的客户端,它可以是一个软件,也可以是一个硬件。如果是软件在linux上,用户态实现的是tgt框架(linux scsi target frame);还有一种内核太实现的架构是iet(iSCSI enterprise target)。在centos上目前已经默认安装了tgt了。 -
iqn
(iSCSI qualified name):initiator和target通过iqn号来逻辑寻址。一个iqn号由四部分组成:iqn.日期.域名:域名组织分配的名字
例如:iqn.2000-01.com.synology:Synology.Target-1.826d6a066b
-
LUN
:全称是Logical Unit Number,中文名是逻辑单元号。LUN是在存储设备上可以被应用服务器识别的独立存储单元。一个LUN的空间来源于存储池Pool,Pool的空间来源于组成磁盘阵列的若干块硬盘。从应用服务器的角度来看,一个LUN可以被视为一块可以使用的硬盘。例如,在Linux系统中,它在/dev/rdsk、/dev/dsk目录下有相应的设备名称;在Windows系统中,格式化后的新LUN会对应一个类似于D E F的盘符。 -
Thick LUN
:中文名是传统非精简LUN,是LUN类型的一种,支持虚拟资源分配,能以较为简便的方式进行创建、扩容和压缩操作。Thick LUN在创建完成后就会从存储池Pool中分配满额的存储空间,即LUN的大小完全等于分配的空间。因此,它拥有较高的可预测性。 -
Thin LUN
:中文名是精简LUN,也是LUN类型的一种,支持虚拟资源分配,能够以较简便的方式进行创建、扩容和压缩操作。Thin LUN在创建的时候,可以设置一个初始分配容量。创建完成后,存储池Pool只会分配这个初始容量大小的空间剩余的空间仍然放在存储池中。当Thin LUN已分配的存储空间的使用率达到阈值时,存储系统才会再从Pool中划分一定的配额给Thin LUN。如此反复,直到达到Thin LUN最初设定的全部容量。因此,它拥有较高的存储空间利用率。
二、配置
在SAN中,主机一般都是Initiator,存储设备则是Target。
1、Target的配置
# yum -y install targetd targetcli # 下载相关软件
# systemctl start target # 启动target
# systemctl enable target # 开机自启动target
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.
# systemctl status target # 查看target状态
● target.service - Restore LIO kernel target configuration
Loaded: loaded (/usr/lib/systemd/system/target.service; enabled; vendor preset: disabled)
Active: active (exited) since Sat 2020-05-09 23:45:30 CST; 15s ago
Main PID: 8155 (code=exited, status=0/SUCCESS)
May 09 23:45:30 target systemd[1]: Starting Restore LIO kernel target configuration...
May 09 23:45:30 target target[8155]: No saved config file at /etc/target/saveconfig.json, ok, exiting
May 09 23:45:30 target systemd[1]: Started Restore LIO kernel target configuration.
# systemctl start firewalld.service # 开启防火墙
# firewall-cmd --add-port=3260/tcp --permanent # 防火墙永久开启tcp:3260端口(Target默认采用TCP:3260端口)
success
# firewall-cmd --reload # 重新载入配置
success
# firewall-cmd --list-ports # 查看开启的端口
3260/tcp
# targetcli # 执行targetcli工具(如果报错,可以执行yum -y install python-rtslib命令安装所缺包)
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb49
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> /backstores/block create server0.disk1 /dev/sdc # 指定要发布的磁盘,(server0.disk1是给/dev/sdc转化成块的名字)
Created block storage object server0.disk1 using /dev/sdc.
/> /iscsi create iqn.2020-05.com.admin:disk1 # 创建iqn名字即创建ISCSI对象
Created target iqn.2020-05.com.admin:disk1.
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.2020-05.com.admin:disk1/tpg1/acls create iqn.2020-05.com.admin:client1 # 设置ACL即将ISCSI对象与客户端IP或主机名绑定(iqn.2020-05.com.admin:client1是initiator的名字,需要在客户端中设置)
Created Node ACL for iqn.2020-05.com.admin:client1
/> /iscsi/iqn.2020-05.com.admin:disk1/tpg1/luns create /backstores/block/server0.disk1 # 创建LUN并绑定块
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2020-05.com.admin:client1
2、initiator的配置
# yum -y install iscsi-initiator-utils # 安装工具
# vim /etc/iscsi/initiatorname.iscsi # 给initiator命名
InitiatorName=iqn.2020-05.com.admin:client1
# systemctl start iscsi # 启动服务
# systemctl enable iscsi # 开机自启动服务
# systemctl status iscsi # 查看状态
● iscsi.service - Login and scanning of iSCSI devices
Loaded: loaded (/usr/lib/systemd/system/iscsi.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Condition: start condition failed at Sat 2020-05-09 23:58:31 CST; 11s ago
Docs: man:iscsiadm(8)
man:iscsid(8)
# iscsiadm -m discovery -t st -p 192.168.1.60 # 发现存储
192.168.1.60:3260,1 iqn.2020-05.com.admin:disk1
# iscsiadm -m discovery -t st -p 192.168.1.60 -l # 登录存储/连接target
192.168.1.60:3260,1 iqn.2020-05.com.admin:disk1
Logging in to [iface: default, target: iqn.2020-05.com.admin:disk1, portal: 192.168.1.60,3260] (multiple)
Login to [iface: default, target: iqn.2020-05.com.admin:disk1, portal: 192.168.1.60,3260] successful.
# lsscsi # 验证iscsi连接,查看是否得到外界硬盘
[0:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda
[2:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0
[3:0:0:0] disk LIO-ORG server0.disk1 4.0 /dev/sdb
# yum -y install gdisk # 下载gdisk分区工具
# gdisk /dev/sdb # 给外界硬盘分区
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
# mkfs.xfs /dev/sdb1 # 格式化分区
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310655 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242619, 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
# mkdir /mnt/iscsi # 创建挂载目录
# mount /dev/sdb1 /mnt/iscsi/ # 临时挂载
# df -hT /mnt/iscsi/ # 查看存储
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 xfs 20G 33M 20G 1% /mnt/iscsi
# vim /etc/fstab # 永久挂载
/dev/sdb1 /mnt/iscsi xfs defaults,_netdev 0 0
# mount -a # 刷新配置
3、部分命令解释
iqn.2020-05.com.admin:disk1
- iqn:表示此名称将使用域作为其标识符,
- yyyy-mm:拥有域名的第一个月
- com.xxx :逆向域名
- optional_string:以冒号为前缀的可选字符串,根据需要分配
iscsiadm -m discovery -t st -p 192.168.1.60 -l
iscsiadm是基于命令行的iscsi管理工具,提供了对iSCSI节点、会话、连接以及发现记录的操作。
参数 | 说明 |
---|---|
-m {discovery、node、session、iface} | 发现某服务器是否有target输出,以及输出了哪些target、管理跟某target的关联关系、会话管理、接口管理 |
-d{0-8} | 打印调试信息,有0到8这9个等级 |
-t | 这里可以使用的类型为sendtargets(可简写为st)、slp、fw和isns,此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个iSCSI target发送一个可用target列表给initiator |
-T | 用于指定target的名字 |
-p | 指定target服务的IP和端口,-p 192.168.1.60:3260 |
-o | 指定针对discoverydb数据库的操作,其仅能为new、delete、update、show和nonpersistent其中之一 |
-I | 指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中 |
-l | 登录节点 |
-u | 登出节点(服务器) |
三、Thick LUN与Thin LUN的区别
1、空间分配上的区别
Thick LUN在创建时会分配所有需要的空间
Thin LUN是一种按需分配的空间组织方法,它在创建时存储池不会分配所有需要的空间,而是根据使用情况动态分配。二者的空间分配区别如下图所示:
2、空间回收的区别
注:这里的空间回收指的是释放存储池Pool中的资源,并且这些资源可以被其他LUN使用。
Thick LUN没有空间回收的概念,因为它在创建时就占用存储池中所有分配给它的空间,即使Thick LUN中的数据被删除,存储池中分配给它的空间还是被占用,不能被其他的LUN使用。但是如果手动删除不再使用的Thick LUN,则对应的空间会被回收。
Thin LUN不仅能够做到空间占用率增大时自动分配新的存储空间,而且当Thin LUN中的文件删除时也可以实现空间的释放,从而实现存储空间的反复利用,大大提高存储空间的利用率。Thin LUN的空间回收如下图所示:
3、性能的区别
Thick LUN由于在一开始就会拥有所分配的空间,所以Thick LUN在顺序读写的时候拥有较高的性能,但是会造成空间资源的浪费。
Thin LUN由于是实时分配空间,每次扩容时,需要重新增加容量,后台重新格式化,这个时候性能会受到一定影响,而且每次分配空间可能会导致硬盘中存储空间不连续,这样硬盘读写数据时在寻找存放位置上花费的时间会较多,会在顺序读写时对性能有一定影响。
4、使用场景的区别
Thick LUN:
- ①对性能要求较高的场景
- ②对存储空间利用率不太敏感的场景
- ③对成本要求不太高的场景
Thin LUN:
- ①对性能要求一般的场景;
- ②对存储空间利用率比较敏感的场景;
- ③对成本比较敏感的场景;
- ④应用环境很难预 估存储空间的场景
评论区