目录

 

一、iSCSI 介绍

1. iSCSI 定义

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. 由于是服务器架构,因此也可以实现在线扩容以至动态部署。

iSCSI (Internet Small Computer Systems Interface), an Internet Protocol (IP)-based storage networking standard for linking data storage facilities. wiki

  • Initiator: an iSCSI client
  • Target: an iSCSI server

2. 几种常见的 iSCSI Target

  • STGT

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.

MainPage: http://stgt.sourceforge.net/

GitHub: https://github.com/fujita/tgt

Quickstart: https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guide

  • SCST

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.

MainPage: http://scst.sourceforge.net/

  • LIO

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_Page

3. 优缺点比较

(1)STGT

tgt 是一个用户态的 SCSI target 框架,在 GNU/Linux 内核直接集成 SCSI target 框架之前,这是一个绝对主流的框架。

优点

1)简单,方便使用和维护。

2)另外已经有 ceph 的 target driver,只是需要做性能优化。

3)因为工作在用户态,所以即使挂掉了,也不会对其他运行的程序产生影响。

缺点

1)支持的传输协议较少。

2)对 SCSI 协议支持比较简单,一些 cluster 中的特性比如 PR 等都不支持,所以基于 stgt 的方案不能在 cluster 中使。

3)由于是用户态框架,性能问题较差,根据网上的相关数据, tgt 在使用本地存储的情况下,性能相比后面会提到的 SCST、 LIO 等是有一定差距的。

(2)SCST

SCST 的核心模块工作在内核里,可以支持通过系统模块(VFS、块层)访问的后端存储如块设备、文件设备以及 passthrough 的 scsi 设备。

优点

1)支持更多传输协议。

2)针对性能做了特殊的优化。

3)除了基本的 SCSI 协议支持外,还有一些高级支持:

  • SCST支持永久性预留(Persistent Reservation, PR);这是一个用于高可用集群中的存储设备的 I/O 隔离与存储设备故障切换、接管的特性。通过使用 PR 命令,initiator 可以在一个 target 上建立、抢占、查询、重置预留策略。在故障接管过程中,新的虚拟资源可以重置老的虚拟资源的预留策略,从而让故障切换更快、更容易地进行。
  • SCST 可以使用异步事件通知(AEN)来通告会话状态的变更。AEN 是一个 SCSI target 用来向 initiator 进行 target 端的事件告知的协议特性,即使在没有服务请求的时候也可以进行。于是 initiator 就可以在 target 端发生事件时,如设备插入、移除、调整尺寸或更换介质时,可以得到通知。这让 initiator 可以以即插即用的方式看到 target 的变化。

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,需要手工编译。

(3)LIO

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。

1. 关闭防火墙

// 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

2. 关闭selinux

setenforce 0

如果要使 selinux 配置永久生效:

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

3. 通过 yum 安装 tgt

(1)安装 scsi-target-utils

安装 scsi-target-utils

# yum --enablerepo=epel -y install scsi-target-utils libxslt

查看版本

# tgtadm --version
1.0.55

(2)启动 tgtd 服务

//设置开机启动
systemctl enable tgtd //启动
systemctl start tgtd

(3)查看是否支持 rbd

# tgtadm --lld iscsi --mode system --op show | grep rbd
rbd (bsoflags sync:direct)

如果有类似于上面的输出结果,说明你的tgt加载了rbd模块。该模块实际上是一个名为bs_rbd.so的动态链接库。如果命令没有输出,则说明你的tgt还不支持rbd,你需要安装最新的tgt,或者直接下载编译最新的源码。

4. 源码编译安装 tgt

如果 tgt 不支持 rbd,可以通过源码编译安装。

(1)clone 源码

yum -y install git

git clone https://github.com/fujita/tgt.git

(2)设置 CEPH_RBD 变量

使得 tgt 能够编译bs_rbd模块

export CEPH_RBD=1

(3)make

//先安装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: 没有那个文件或目录

(4)执行 make install

make install

(5)成功后查看版本

# tgtadm --version
1.0.74

(6)再次查看是否支持 rbd

systemctl restart tgtd
tgtadm --lld iscsi --mode system --op show | grep rbd

 

三、使用 img 作为 target

1. 创建 img

# 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

2. 通过配置文件来创建 target

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

3. 查看激活的 target

# 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

 

四、使用 rbd 作为 target

1. 创建 rbd 池和 image

# 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:

2. 通过命令来创建 target

注意通过命令配置的 target,服务重启后会消失。

(1)创建一个 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

(2)创建一个 lun

创建一个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

(3)设置 IP 访问限制

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

3. 通过配置文件来创建 target

除了命令,还可以通过配置文件来创建 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

4. 查看激活的 target

# 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

 

五、连接验证

1. 使用 ISCSI 客户端连接

2. 进入磁盘管理查看

参考链接

SCST:几种常用iscsi target对比

使用tgt搭建一个基于rbd的SCSI target

通过iscsi协议使用ceph rbd

通过iscsi连接到CEPH的RBD(客户端包括windows和linux)

Configure iSCSI Target (tgt)

CentOS7 下安装 iSCSI Target(tgt) ,使用 Ceph rbd的更多相关文章

  1. centOS7下安装GUI图形界面

    1.如何在centOS7下安装GUI图形界面 当你安装centOS7服务器版本的时候,系统默认是不会安装GUI的图形界面程序,这个需要手动安装CentOS7 Gnome GUI包. 2.在系统下使用命 ...

  2. MariaDB Centos7 下安装MariaDB

    Centos7 下安装MariaDB by:授客 QQ:1033553122 1.下载安装文件 rpm包为例,对于标准服务器安装,至少需要下载client,shared,serve文件(安装时如果少了 ...

  3. Centos7 下安装以及使用mssql

    Centos7下安装以及使用Mssql,在这下面玩,主要是发现linux环境下的mysql非常的小,小到只有169M,这在windows上面,动撤几个G的安装文件,会让你直接打消使用MSSQL的勇气, ...

  4. CentOS7 下 安装 supervisor以及使用

    CentOS7 下 安装 supervisor 以及使用 手动安装 [注] linux环境必须安装 python 1.获取supervisor包:[https://pypi.python.org/py ...

  5. Linux CentOs7 下安装 redis

    Linux CentOs7 下安装 redis 请将以下命令放入linux命令行中运行 如果安装过程前没有安装GCC请先安装  命令如下 $ yum install gcc-c++ $ wget ht ...

  6. Centos7下安装配置Redsocks

    Redsocks是一个开源的网络程序,代码依赖开源的libevent网络库.Redsocks允许你将所有TCP连接重定向到SOCKS或HTTPS代理,比如Shadowsocks(Centos7下安装配 ...

  7. CentOS7下安装SVN服务端

    CentOS7下安装SVN服务 1. yum命令即可方便的完成安装# sudo yum install subversion 测试安装是否成功:# svnserve --version 更改svn的默 ...

  8. CentOS7下安装MySQL并配置远程连接

    一.CentOS7下安装MySQL数据库 CentOS7默认的安装包里面已经没有 MySQL-Server安装包了,远程镜像中也没有了. 默认的是MariaDB (MySQL的一个分支,开发这个分支的 ...

  9. Docker学习笔记3:CentOS7下安装Docker-Compose

    Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 安装Docker-Compose之前,请先安装 python-pip,请参考我的另一篇博文CentOS7下安装python-p ...

随机推荐

  1. day37(类加载器)

    类的加载器:将class文件加载到JVM中执行这个文件. Java中将类加载器分成三类: 引导类加载器:     JAVA_HOME/jre/lib/rt.jar | 扩展类加载器:     JAVA ...

  2. Oracle EBS主界面的Top Ten List

    http://blog.csdn.net/pan_tian/article/details/7749128 Top Ten List的数据保存在表FND_USER_DESKTOP_OBJECTS中,登 ...

  3. 如何让cxgrid既能充满又能根据内容进行宽度调整?

    如何让cxgrid既能充满又能根据内容进行宽度调整? 原创 2009年02月25日 10:10:00 2793 1.选中cxgridview,在属性中找OptionsView--->ColumA ...

  4. 分形之希尔伯特-皮亚诺(Hilbert-Peano)曲线

    1890年,意大利数学家皮亚诺(Peano G)发明能填满一个正方形的曲线,叫做皮亚诺曲线.后来,由希尔伯特作出了这条曲线,又名希尔伯特曲线.Hilbert-Peano曲线是一种分形图形,它可以画得无 ...

  5. 调试 .NET Framework 源代码、.DotNetCore源码

    调试 .NET Framework 源代码..DotNetCore源码 如何调试 .NET Framework 源代码 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件 .NE ...

  6. VS的一些实用快捷键及小技巧(不断更新)

    在未选中文本的情况下: ctrl+x 剪贴并删除当前的行,可以用于快速删除整行代码 ctrl+c 复制当前行的代码 ctrl+l 删除当前行 组合键,需要按两次: ctrl+k,ctrl+c 注释当前 ...

  7. 迁移桌面程序到MS Store(2)——Desktop App Converter

    迁移传统桌面程序到MS Store的另一种方式是使用Desktop App Converter工具.虽然本篇标题包含了Desktop App Converter(以下简称DAC),实际上我是来劝你别用 ...

  8. 背水一战 Windows 10 (57) - 控件(集合类): ListViewBase - 增量加载, 分步绘制

    [源码下载] 背水一战 Windows 10 (57) - 控件(集合类): ListViewBase - 增量加载, 分步绘制 作者:webabcd 介绍背水一战 Windows 10 之 控件(集 ...

  9. ArrayBlockingQueue源码解析(1)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注意:在阅读本文之前或在阅读的过程中,需要用到ReentrantLock,内容见<第五章 Reentr ...

  10. 一个简单文本分类任务-EM算法-R语言

    一.问题介绍 概率分布模型中,有时只含有可观测变量,如单硬币投掷模型,对于每个测试样例,硬币最终是正面还是反面是可以观测的.而有时还含有不可观测变量,如三硬币投掷模型.问题这样描述,首先投掷硬币A,如 ...