目 录CONTENT

文章目录

iSCSI 架构

简中仙
2020-05-09 / 0 评论 / 0 点赞 / 76 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-02-07,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

一、相关概念

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:

  • ①对性能要求一般的场景;
  • ②对存储空间利用率比较敏感的场景;
  • ③对成本比较敏感的场景;
  • ④应用环境很难预 估存储空间的场景
0

评论区