什么是ISCSI

   iSCSI(iSCSI = internet Small Computer System Interface )小型计算机接口。是由IEETF开发的网络存储标准,目的是为了用IP协议将存储设备连接在一起。通过在IP网上传送SCSI命令和数据,ISCSI推动了数据在网际之间的传递,同时也促进了数据的远距离管理。由于其出色的数据传输能力,ISCSI协议被认为是促进存储区域网(SAN)市场快速发展的关键因素之一。因为IP网络的广泛应用, ISCSI能够在LAN、WAN甚至internet上进行数据传送,使得数据的存储不再受地域的现在。

  ISCSI技术的核心是在TCP/IP网络上传输SCSI协议,是指用TCP/IP报文、和ISCSI报文封装SCSI报文,使得SCSI命令和数据可以在普通以太网络上进行传输,如下图:

wKiom1NWhaHBU9c5AAG4b88MTU0283.jpg



iSCSI 协议定义了在 TCP/IP 网络发送、接收 block(数据块)级的存储数据的规则和方法。发送端将SCSI命令和数据封装到 TCP/IP 包中再通过网络转发,接收端收到 TCP/IP 包 之后,将其还原为SCSI命令和数据并执行,完成之后将返回的SCSI命令和数据再封装到 TCP/IP 包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就象访问本地的 SCSI设备一样简单。

  iSCSI可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。用户可使用标准的千兆级以太网传输协议,通过Cat5线缆和任意的交换机产品,将服务器与磁盘阵列连接在一起,并且能够提供接近FC SAN的性能。

  iSCSI集SCSI、以太网和TCP/IP等技术于一身,支持iSCSI技术的服务器和存储设备能够直接连接到现有的IP交换机和路由器上,具有低廉、开放、大容量、传输速度高、安全等诸多优点,最适合需要在网络上存储和传输大量数据的应用环境,比如广电视频制作和媒资系统,视频监控系统,IPTV系统,数据备份系统,以及许多的对IOPS和带宽性能要求不是还很高的数据库存储系统、大容量文件存储系统

iSCSI工作机制
iSCSI的工作流程是iSCSI协议在网络上封包和解包的过程。在网络的一端,数据包被封装成包括TCP/IP头、iSCSI识别包和SCSI数据三部分内容,传输到网络另一端时,这三部分内容分别被顺序地解开。iSCSI系统由一块SCSI卡发出一个SCSI命令,命令被封装到第四层的信息包中并发送。接收方从信息包中抽取SCSI命令并执行,然后把返回的SCSI命令和数据封装到IP信息包中,并将它们发回到发送方。系统抽取数据或命令,并把它们传回SCSI子系统。所有这一切的完成都无需用户干预,而且对终端用户是完全透明的。为了保证安全,iSCSI有自己的上网登录操作顺序。在它们首次运行的时候,启动器(initiator)设备将登录到目标设备中。任何一个接收到没有执行登录过程的启动器的iSCS:如下图:

wKiom1NWk8jT1DXvAALo3shfZ48923.jpg

前提:

Linux下配置iscsi所使用的命令:

一、服务端配置管理工具tgtadm的使用:

tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...

(1)、添加一个新的 target 且其ID为 [id], 名字为 [name].

--lld [driver] --op new --mode target --tid=[id] --targetname [name]

(2)、显示所有或某个特定的target:

--lld [driver] --op show --mode target [--tid=[id]]

(3)、向某ID为[id]的设备上添加一个新的LUN,其号码为[lun],且此设备提供给initiator使用。[path]是某“块设备”的路径,此块设备也可以是raid或lvm设备。lun0已经被系统预留。

--lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]

(4)、删除ID为[id]的target:

--lld [driver] --op delete --mode target --tid=[id]

(5)、删除target [id]中的LUN [lun]:

-lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]

(6)、定义某target的基于主机的访问控制列表,其中,[address]表示允许访问此target的initiator客户端的列表:

--lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]

(7)、解除target [id]的访问控制列表中[address]的访问控制权限:

--lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]

二、iscsiadm工具的使用:

iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] [ -I iface -t type -p ip:port [ -l ] ]

iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ]


-d, --debug=debug_level   显示debug信息,级别为0-8;

-l, --login

-t, --type=type  这里可以使用的类型为sendtargets(可简写为st)、slp、fw和 isns,此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个iSCSI target发送一个可用target列表给initiator;

-p, --portal=ip[:port]  指定target服务的IP和端口;

-m, --mode op  可用的mode有discovery, node, fw, host iface 和 session

-T, --targetname=targetname  用于指定target的名字

-u, --logout

-o, --op=OPEARTION:指定针对discoverydb数据库的操作,其仅能为new、delete、update、show和nonpersistent其中之一;

-I, --interface=[iface]:指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中;

了解了这么多现在就具看一看Linux是怎么配置iscsi的:

准备三台主机分别是:

      一台共享主机:172.16.24.100 主机名为。control.edu.com

      两个客户端  :172.16.24.6   主机名为:node1.edu.com

                    172.16.26.7   主机名为:node2.edu.com

注意:主机名要能够解析,时间要保持同步,最好做到双机互信,操作过程前面的博文有介绍。

准备所需要的安装包:

共享主机端:scsi-target-utils

客户端    :iscsi-initiator-utils

一、共享主机端的操作:

  1. 安装上scsi-target-utils

   [root@control ~]# yum -y install scsi-target-utils

2. 在磁盘上创建两个新分区:

wKiom1NXGbrAlPH9AANh1pxAq0k631.jpg

3. 查看一下分区的结果:

wKioL1NXGieRg1GCAAJIO5kP77o199.jpg

以上是我们创建好的分区,一个为sda2 20G, 一个为sda5 30G

4 .启动共享端服务:

wKioL1NXGw3wOiXeAABeToNngUo043.jpg

5.查看一现进程是否运行起来了:

[root@control ~]# ss -tnlp

wKiom1NXHLHwGzGUAAGuz8bknuk379.jpg

注:target的命名机制:为了保证全局以惟一,命名要遵循iqn规范

   iqn: iqn.yyyy-mm.reverse_domain.STRING[:substring]

6 . 创建一个target:

[root@control ~]# tgtadm -L iscsi -o new -m target -t 1 -T iqn.2014-04.com.edu.test:1

7 . 创建LUN

[root@control ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sda3

[root@control ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 2 -b /dev/sda5

8 . 开放给172.26.0.0/16网络中的主机访问:

[root@control ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 172.16.0.0/16

9 .查看一下创建的结果:

wKiom1NXIBPjWgo5AAKoxD6elJA378.jpg

到此我们共享端就配置好了,接下来我们配置客户端能够访问:

注:这里配置了两个客户端是为了验证,一个客户端挂载了,另一个客户端同样也可以挂载,如果你不是做实验,没必要配置两个客户端,以下两端所执行的命令都一样,只是在一个客户端上演示。

  1. 安装上 iscsi-initiator-utils

[root@node1 ~]# yum -y install iscsi-initiator-utils

2 .每一个要连入ISCSI的主机都要有自已的别名,这个文件就保存在/etc/iscsi/initiatorname.iscsi文件中,这种名称都得是iqn格式

wKioL1NXIyqgXyx5AAGMFtAKeCM200.jpg3 .现在就可以启动服务了

wKiom1NXI6HSNShRAACNxdZPoHY717.jpg

4 .启动完成之后就可以使用如下命令接和提供共享的主机了:

wKiom1NXKuKR9zRGAAEj_yotx2k092.jpg

显示接入成功,到此我们就可以对共享出来的主机进行分区格式化了,以后的过程就简单了,跟上面的分区没有区别。好了到此介绍完毕。