iSCSI(Internet Small Computer System Interface,发音为/ˈаɪskʌzi/),Internet小型计算机系统接口,又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术,由IETF提出,并于2003年2月11日成为正式的标准。与传统的SCSI技术比较起来,iSCSI技术有如下三个革命性的变化:html
iSCSI (Internet Small Computer Systems Interface), an Internet Protocol (IP)-based storage networking standard for linking data storage facilities. wiki前端
Linux SCSI target framework (tgt) aims to simplify various SCSI target driver (iSCSI, Fibre Channel, SRP, etc) creation and maintenance. Our key goals are the clean integration into the scsi-mid layer and implementing a great portion of tgt in user space.python
MainPage: http://stgt.sourceforge.net/
GitHub: https://github.com/fujita/tgt
Quickstart: https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guidelinux
The generic SCSI target subsystem for Linux (SCST) allows creation of sophisticated storage devices from any Linux box. Those devices can provide advanced functionality, like replication, thin provisioning, deduplication, high availability, automatic backup, etc.git
MainPage: http://scst.sourceforge.net/github
LinuxIO (LIO™) is the standard open-source SCSI target in Linux. It supports all prevalent storage fabrics, including Fibre Channel (QLogic, Emulex), FCoE, iEEE 1394, iSCSI (incl. Chelsio offload support), NVMe-OF, iSER (Mellanox InfiniBand), SRP (Mellanox InfiniBand), USB, vHost, etc.编程
MainPage: http://linux-iscsi.org/index.php/Main_Pagewindows
tgt 是一个用户态的 SCSI target 框架,在 GNU/Linux 内核直接集成 SCSI target 框架以前,这是一个绝对主流的框架。后端
优势:
1)简单,方便使用和维护。
2)另外已经有 ceph 的 target driver,只是须要作性能优化。
3)由于工做在用户态,因此即便挂掉了,也不会对其余运行的程序产生影响。
缺点:
1)支持的传输协议较少。
2)对 SCSI 协议支持比较简单,一些 cluster 中的特性好比 PR 等都不支持,因此基于 stgt 的方案不能在 cluster 中使。
3)因为是用户态框架,性能问题较差,根据网上的相关数据, tgt 在使用本地存储的状况下,性能相比后面会提到的 SCST、 LIO 等是有必定差距的。
SCST 的核心模块工做在内核里,能够支持经过系统模块(VFS、块层)访问的后端存储如块设备、文件设备以及 passthrough 的 scsi 设备。
优势:
1)支持更多传输协议。
2)针对性能作了特殊的优化。
3)除了基本的 SCSI 协议支持外,还有一些高级支持:
4)SCST 的开发者声称,它们的设计在健壮性和安全性方面更加符合 SCSI 标准。SCSI 协议要求,若是一个 initiator 要清除另外一个 initiator 的预留资源时,预留者必需要获得清除通知,不然,多个 initiator 均可能来改变预留数据,就可能会破坏数据。SCST 能够实现安全的预留、释放操做,避免相似事情发生。
5)SCST 也支持非对称逻辑卷分配(ALUA)。ALUA 容许 target 管理员来管理 target 的访问状态和路径属性。这让多路径路由机制能够选择最好的路径,从而根据 target 的访问状态,优化带宽的使用。换句话说,在多路径环境下,target 管理员能够经过改变访问状态来调整 initiator 的路径。
6)各大存储服务提供商都是基于 SCST。
7)提供更细粒度的访问控制策略以及 QoS 保证机制(限制 initiator 链接的个数)。
缺点:
1)结构复杂,二次开发成本较高。
2)工做在 kernel,若是挂了,会致使整个机器 down 掉,影响其余程序。
3)kernel 部分没有并入 linux,须要手工编译。
LIO 也即 Linux-IO,是目前 GNU/Linux 内核自带的 SCSI target 框架(自 2.6.38版本开始引入,真正支持 iSCSI 须要到 3.1 版本) ,对 iSCSI RFC 规范的支持很是好,包括完整的错误恢复都有支持。整个 LIO 是纯内核态实现的,包括前端接入和后端存储模块,为了支持用户态后端,从内核 3.17 开始引入用户态后端支持,即 TCMU(Target Core Module in Userspace)。
优势:
1)支持较多传输协议。
2)代码并入 linux 内核,减小了手动编译内核的麻烦。
3)提供了python版本的编程接口 rtslib。
4)LIO 在不断 backport SCST 的功能到 linux 内核,社区的力量是强大的。
5)LIO 也支持一些 SCST 没有的功能。如 LIO 还支持“会话多链接”(MC/S)。
6)LIO 支持最高级别的 ERL。
缺点:
1)不支持 AEN,因此 target 状态发生变化时,只能经过 IO或者用户手动触发以检测处理变化。
2)结构相对复杂,二次开发成本较高。
3)工做在内核态,出现问题会影响其余程序的运行。
本章节描述如何在 CentOS7 下安装 scsi-target-utils。
// 关闭防火墙 systemctl stop firewalld systemctl disable firewalld
setenforce 0
若是要使 selinux 配置永久生效:
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
安装 scsi-target-utils
# yum --enablerepo=epel -y install scsi-target-utils libxslt
查看版本
# tgtadm --version 1.0.55
//设置开机启动 systemctl enable tgtd //启动 systemctl start tgtd
# tgtadm --lld iscsi --mode system --op show | grep rbd rbd (bsoflags sync:direct)
若是有相似于上面的输出结果,说明你的tgt加载了rbd模块。该模块其实是一个名为bs_rbd.so的动态连接库。若是命令没有输出,则说明你的tgt还不支持rbd,你须要安装最新的tgt,或者直接下载编译最新的源码。
若是 tgt 不支持 rbd,能够经过源码编译安装。
yum -y install git git clone https://github.com/fujita/tgt.git
使得 tgt 可以编译bs_rbd模块
export CEPH_RBD=1
//先安装gcc yum -y install gcc //安装一些依赖 yum -y install librados2-devel librbd1-devel //进入源码根目录执行 make cd tgt make
该过程可能会出现以下信息
test -z "/usr/bin/xsltproc" || /usr/bin/xsltproc -o ... http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgtd.8.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgtadm.8.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgtimg.8.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgt-admin.8.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl targets.conf.5.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgt-setup-lun.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgtd.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgtadm.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgtimg.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgt-admin.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl targets.conf.5.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgt-setup-lun.8.xml
注:若是没有安装依赖,可能会出现以下问题
问题1:执行
yum -y install librados2-devel
bs_rbd.c:45:28: 致命错误:rados/librados.h:没有那个文件或目录 #include "rados/librados.h"问题2:执行
yum -y install librbd1-devel
bs_rbd.c:46:24: 致命错误:rbd/librbd.h:没有那个文件或目录 #include "rbd/librbd.h"问题3:执行
yum -y install libxslt
/bin/sh: /usr/bin/xsltproc: 没有那个文件或目录
make install
# tgtadm --version 1.0.74
systemctl restart tgtd tgtadm --lld iscsi --mode system --op show | grep rbd
# mkdir /var/lib/iscsi_disks # dd if=/dev/zero of=/var/lib/iscsi_disks/disk01.img count=0 bs=1 seek=6G # ll -h /var/lib/iscsi_disks 总用量 0 -rw-r--r--. 1 root root 6.0G 11月 5 18:00 disk01.img
vi /etc/tgt/targets.conf <target iqn.2018-11.com.example:imgtgt.targrt0> backing-store /var/lib/iscsi_disks/disk01.img initiator-address 192.168.0.0/24 </target>
编辑完成后,重启 tgt
systemctl restart tgtd
# tgtadm --lld iscsi --mode target --op show Target 1: iqn.2018-11.com.example:imgtgt.targrt0 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 6442 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /var/lib/iscsi_disks/disk01.img Backing store flags: Account information: ACL information: 192.168.0.0/24
# ceph osd pool create tgtpool 128 # rbd create --size 10240 tgtpool/image01 # rbd info tgtpool/image01 rbd image 'image01': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.ac726b8b4567 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten flags:
注意经过命令配置的 target,服务重启后会消失。
tgtadm --lld iscsi --mode target --op new --tid 2 --targetname iqn.2018-11.com.example:cephtgt.target0
若是要删除一个 target
tgtadm --lld iscsi --mode target --op delete --tid 2
建立一个logical unit(LUN)
tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 1 --backing-store tgtpool/image01 --bstype rbd
若是要删除一个 lun
tgtadm --lld iscsi --mode logicalunit --op delete --tid 2 --lun 1
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL or tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.0.120 or tgtadm --lld iscsi --mode target --op bind --tid 1 -I 10.168.0.0/24
除了命令,还能够经过配置文件来建立 target。
vi /etc/tgt/targets.conf <target iqn.2018-11.com.example:cephtgt.target0> bs-type rbd backing-store tgtpool/image01 initiator-address 192.168.0.0/24 </target>
编辑完成后,重启 tgt
systemctl restart tgtd
# tgtadm --lld iscsi --mode target --op show Target 2: iqn.2018-11.com.example:cephtgt.target0 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 10737 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rbd Backing store path: tgtpool/image01 Backing store flags: Account information: ACL information: ALL
参考连接:
SCST:几种经常使用iscsi target对比
使用tgt搭建一个基于rbd的SCSI target
经过iscsi协议使用ceph rbd
经过iscsi链接到CEPH的RBD(客户端包括windows和linux)
Configure iSCSI Target (tgt)