ISCSI简介

ISCSI(Internet Small Computer System Interface,Internet 小型计算机系统接口)是一种由IBM公司研究开发的IP SAN技术,它是通过 TCP/IP 网络传输 SCSI 指令的协议,让 SCSI 命令通过网络传送到远程 SCSI 设备上,而 SCSI 协议只能访问本地的 SCSI 设备。

iSCSI 使用客户/服务器模型。客户端称为 initiator,服务器端称为 target。
iSCSI 是传输层之上的协议,使用 TCP 连接建立会话。在 initiator 端的 TCP 端口号随机选取, target 的端口号默认是 3260。

  • Initiator:通常指用户主机系统,用户产生 SCSI 请求,并将 SCSI 命令和数据封装到 TCP/IP 包中发送到 IP 网络中。
  • Target:通常存在于存储设备上,用于转换 TCP/IP 包中的 SCSI 命令和数据。

这里选用的SCSI target的架构是SCST

SCST简介

SCST是Generic SCST Target Subsystem forLinux的简称,意为Linux通用SCSI目标子系统,是Linux SCSI目标子系统的一种实现。它为SCST Target Driver和Linux内核之间提供了一个统一的接口,同时提供Linux内核与存储后端的句柄连接,连接真实或模拟的存储后端与目标驱动程序。

SCST由三部分构成:scst、iscsi-scst和scstadmin

1. SCST

SCST在Linux内核层和SCSI目标驱动层之间提供统一的、持久的接口,它尽可能地简化了目标驱动的开发。SCST支持如下5种I/O模式:

    (1).pass-through:此模式下,initiators的SCSI命令将不被修改地直接传给Target端的SCSI硬件。
    (2).fileio:默认情况下SCST的导出模式是fileio,它允许使用文件系统上的文件或者块设备作为虚拟的SCSI设备或光驱。Fileio模式可以充分利用Linux的cache。NV_CACHE是fileio的一种模式,它可以提供最好的性能。
    (3).blockio:绕开系统的page-cache(页面缓存)直接bio。该模式适用于后端存储设备比较高端或者不需要caching的应用或者需要大量块级吞吐的环境。
    (4).user space:在SCST环境中使用用户空间的虚拟SCSI设备模拟执行。
    (5).performance:不与底层的SCSI设备发生实际的数据传输,只提供直接的性能改进措施。

2.iSCSI-SCST

目标驱动,与设备驱动程序一起工作。主要负责接收主机命令,维护目标端和启动段的传输通道,并根据命令处理状态向主机返回信息。在Initiator看来,Target就是一个专属的SCSI Host,将用户分配的LUN或DISK映射成为远程可访问的虚拟设备。
目前为止SCST支持的Target驱动包括:iSCSI-SCST、FC Target、FCoE Target、SAS、InfiniBand和并行的SCSI设备。

3. scstadmin

scstadmin是SCST的配置和管理脚本,它可以接受命令行输入或者直接读取SCST的配置文件(/etc/scst.conf)来管理scst。

环境准备:

节点 系统 IP
target CentOS7.2 192.168.26.200
initiator1 Windows 7 192.168.26.128
initiator2 CentOS7.2 192.168.26.201

安装步骤如下:

一、target安装SCST服务:

1.配置前关闭所有主机的防火墙和安全性策略

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.下载源代码包( http://scst.sourceforge.net/downloads.html )

svn checkout svn://svn.code.sf.net/p/scst/svn/trunk scst-trunk

iSCSI网络磁盘共享_第1张图片

3.保证代码包编译不出错,应该预先安装一些包

yum install gcc perl-ExtUtils-MakeMaker perl-Data-Dumper -y
rpm -ivh kernel-devel-3.10.0-514.el7.x86_64.rpm
这里的kernel-devel的版本要与系统的kernel版本对应,uname -r

4.共享磁盘

mkdir /mnt/vd1
mkdir /mnt/vd2
mount /dev/sdb1 /mnt/vd1
mount /dev/sdc1 /mnt/vd2
chmod -R 777 /mnt/*

5.安装SCST服务

cd scst-trunk
make help  #根据所需的包进行编译
#编译安装scst
make scst
make scst_install

#编译安装iscsi
make iscsi
make iscsi_install

#安装scstadm
make scstadm_install

6.配置

cp scst-trunk/iscsi-scst/etc/scst.conf /etc/
vi /etc/scst.conf
   HANDLER vdisk_fileio {
    DEVICE disk01 {
        filename /dev/sdb1    #磁盘1
        nv_cache 1
    }
    DEVICE disk02 {
        filename /dev/sdc1    #磁盘2
        nv_cache 1
    }
}

    TARGET_DRIVER iscsi {
    enabled 1

    TARGET iqn.2006-10.net.vlnb:tgt {
        LUN 0 disk01
        LUN 1 disk02

        enabled 1
    }
}

7.启动SCST服务

chkconfig scst on
systemctl start scst.service

8.查看scst组件

lsmod |grep scst

iSCSI网络磁盘共享

Initiator端发起服务

Windows:

控制面板—->管理工具—->iSCSI发起程序
iSCSI网络磁盘共享_第2张图片

在目标中填入安装scst主机的ip ,快速连接
iSCSI网络磁盘共享_第3张图片
iSCSI网络磁盘共享_第4张图片
iSCSI网络磁盘共享_第5张图片
打开磁盘管理可以看到2块共享磁盘
iSCSI网络磁盘共享_第6张图片

Linux

1.用lsblk命令查看磁盘的状况

iSCSI网络磁盘共享_第7张图片

2.安装并启动iscsi

yum install -y iscsi-initiator-utils 
systemctl start iscsi  
chkconfig iscsi on 

3.发现target目标

iscsiadm -m discovery -t sendtargets -p 192.168.26.200:3260 

iSCSI网络磁盘共享

4.登录发现的目标节点

iscsiadm -m node -T iqn.2006-10.net.vlnb:tgt -p 192.168.26.200:3260  -l

iSCSI网络磁盘共享

5.再次用lsblk命令查看磁盘状况

iSCSI网络磁盘共享_第8张图片