Linux下搭建iSCSI共享存储的方法 TGT 方式 CentOS6.9系统下

iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的、可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。

iSCSI分为服务端和客户端,服务端需要安装scsi target用来共享存储设备,客户端需要安装iscsi initiator用来连接target端,将target端共享的设备挂载到initiator本地,可以对其进行分区,格式化等操作,访问过程如下图:

一、iSCSI实现数据的访问需要的条件:

1、iSCSI客户端具有的特性:
iSCSI initiator是发起I/O操作的启动者;需要通过发现过程请求远端快设备;可以与target进行持久连接;在Linux系统中可以使用open-iscsi软件包来模拟实现;

2、iSCSI服务器端具有的特性:
iSCSI target是I/O操作的执行者;需要导出一个或多个块设备供启动者(initiator)使用;在Linux系统中可以使用两种target工具,分别为tgt,和targetcli,这里先介绍TGT的方法,TGT是Fujita Tomonori于2006年底将SCSI Target Framework (STGT/TGT) 引入Linux内核。它在内核中有一个库,可协助内核控制目标驱动程序,TGT是用户态实现的iscsi target,所有目标处理都在用户空间进行。在2010年底,LIO项目被选择来代替TGT作为内核态实现的iscsi target。当选择LIO替换TGT时,它的实现已经进行了调整,以允许TGT用户空态模块继续运行,因此TGT社区支持在内核中包含LIO。在Linux内核 2.6.38 之前都是TGT。

3、iSCSI 命名规则
iSCSI 使用全球唯一的名称标识 iSCSI 设备(目标或启动器)。此名称类似于与光纤通道设备相关联的全球名称 (WWN),可作为一种通用的设备识别方式使用。
iSCSI 名称有两种不同格式。第一种是通过iSCSI限定名以 iqn.开头通常称为“IQN 名称”。第二种是通过企业唯一标识符,以eui.开头也称为“EUI 名称”,此方法不常用。
有关 iSCSI 命名要求和字符串配置文件的更多详细信息,请参见 IETF 网站上的 RFC 3721 和 RFC 3722。

iSCSI 限定名
iSCSI 限定名采用 iqn.yyyy-mm.naming-authority:unique name 的形式,其中:
yyyy-mm :
表示“年份-月份“,是公司成立的年份和月份,这里的公司一般为安装软件的这个公司,当然了可以随意选个时间

naming-authority :
通常是公司的 Internet 域名的逆转格式。例如,pipci 公司的 iSCSI 限定名形式可能是 iqn.2018-01.cc.pipci.iscsi。此名称表示 pipci.cc域名于 2018 年 1 月注册,iscsi 是pipci.cc的子域,子域名可有可无。

unique name:
是希望使用的任何名称,如主机的名称或sn号。必须确保在冒号后面分配的任何名称都是唯一的,例如:

iqn.2018-01.cc.pipci.iscsi:host1
iqn.2018-01.cc.pipci.iscsi:name1
iqn.2018-01.cc.pipci.iscsi:sn1999

企业唯一标识符
企业唯一标识符采用 eui.<16 hex digits> 的形式。
例如,eui.0123456789ABCDEF。
16 位十六进制数字是 IEEE EUI(扩展唯一标识符)格式的 64 位数的文本表示形式。前 24 位是 IEEE 向特定公 司注册的公司 ID。后 40 位由持有该公司 ID 的实体分配,并且必须是唯一的。 在许多情况下,人们都会选择 IQN 格式,而不是 EUI 格式,因为 IQN 格式方便阅读,并且是一种更友好的名 称分配方式。


4、Logical Unit Number
每个在同一个target上的backing-store 称为逻辑单元号(LUN),LUN ID由iSCSI目标设备(Target)分配。iSCSI 启动端(Initiator)设备当前支持在每个目标设备(Target)中导出最多256个LUN,即最大支持16个target。

对于LUN的理解,比较通俗就是整个磁盘,磁盘分区、LVM卷组、RAID等等。在iSCSI通信中,都有一个发起I/O请求的启动端(Initiator)和响应请求并执行实际I/O操作的目标设备(Target),我们能够提供 BlockLevel I/O 给 Initiator 主机,其目的不外乎是“将硬盘的排线网路化”、“把Target 主机的共享磁盘幻化成Initiator 主机的磁盘”以达成更大空间、更高 I/O 速度及具有冗余与高延展度的应用。

Target 即储存设备(Storage Device),也就是存放数据的硬盘(以硬盘阵列居多),在使用iSCSI时,会在 iSCSI 储存设备上去建立 LUN来提供给具备 iSCSI Initiator 功能的主机来存取数据的。可以把Target主机看作是服务端,把Initiator主机看作是客户端。LUN 好比是个“逻辑单位磁碟”,为追求效率、冗余与延展性,这个 LUN 通常会是由数个实体磁碟( RAID 或 LVM 技术的技术实现)所组成。

二、iSCSI initiator发现iSCSI target的过程:

ISCSI initiator按照配置文件/etc/iscsi/iscsid.conf中配置的相应项目利用iSCSI的发现机制在网络中收索目标设备target
ISCSI target将返回有效的iqn名称给iSCSI initiator
ISCSI target按照配置的验证方式接受initiator的登录并返回目标设备target标识
ISCSI initiator发生查询请求给target请求查询target的相关信息
target响应initiator的查询请求,并将设备的有关信息返回给initiator
initiator创建可以的目标设备target列表

三、iSCSI设备的特性:

支持报头和数据摘要
支持两种挑战握手协议CHAP(ChallengeHandshake Authentication Protocol)的认证方式
目标端支持R2T(ReadytoTransfer)流控制
从RHEL4U2开始支持多通道(multipath)
支持sendtargets发现机制
支持动态目标端发现
具备异步事件通知入口
支持即时数据更新
支持动态设备重配
支持自动挂接iSCSI技术
支持IPV6技术

四、iSCSI设备名称
iSCSI设备在iSCSI启动端(Initiator)导入的时候,其内核将按当前的设备情况给iSCSI设备分配一个本地SCSI设备名(例如/dev/sda或/dev/sdb等),如果导入的iSCSI设备已被分区,在导入iSCSI设备建立本地SCSI设备的同时也会建立相应的分区设备名(例如/dev/sda1、/dev/sda5等等),但要注意的是此SCSI设备名并不是每次导入是都是固定的,比如你的主机之前没有/dev/sda设备,你导入了iSCSI设备,其被内核命名为/dev/sda;之后你将其取消了导入,并重新挂接了一个热插拔设备(如U盘或移动硬盘),这个热插拔设备占据的/dev/sda设备;你又从新导入了iSCSI设备,此时其被内核分配的设备名就成了/dev/sdb。

五、为什么要搭建iSCSI共享存储,因为穷!!!,如果有钱最好的方法是买一台真正的存储,因为没钱还要做很多需要共享存储才能测试的功能,比如 Oracle RAC ,虚拟化的HA等都需要一台共享存储,下面将介绍通过Linux 软件来实现iscsi目标器,从而自己搭建一台iscsi存储,组建iscsi

六、安装iscsi目标器tgt,由于CentOS 7上面已经废弃了原来的scsi-target-utils,如果想安装可以添加EPEL yum源后安装scsi-target-utils,这里我使用CentOS6.9来实现

--------------------------------------------------
[root@CentOS ~]# yum install  scsi-target-utils.x86_64
--------------------------------------------------

七、设置tgt服务开机启动同时启动tgt
--------------------------------------------------
[root@CentOS ~]# chkconfig tgtd on    #设置开机启动
[root@CentOS ~]# service tgtd start     #启动tgt
--------------------------------------------------

八、关闭防火墙或开启TCP 3260 端口,tgt通过TCP的3260端口来进行数据的传输


九、创建tgt共享资源
共享资源可以是分区(不需要格式化),整块硬盘或通过dd命令创建一个文件,以上的创建方法这里就不介绍了

十、创建目标器(target),我们需要通过命令tgtadm来创建目标器,同时把共享资源添加到目标器中,这样客户端的启动器才可以访问目标器上的存储资源,服务器端管理配置工具tgtadm的使用

tgtadm是一个高度模式化的命令,他们的模式很相近。有三个模式:target、logicalunit、account。指定模式时使用--mode选项。再使用--op来指定对应模式下的选项。另外,使用-lld指定driver,有两种driver:iscsi和iser,基本都会使用iscsi。

1、模式target下的语法格式:

tgtadm --lld  <driver>  --mode  target  --op  {new|delete|show|update|bind|unbind} [option]

其中driver一般为iscsi, –op后面的参数表示要进行的操作如下

new:     表示增加一个target,语法格式为:–tid < id > –targetname < name >
delete:    表示删除一个target,语法格式为:delete –tid < id >
show:      表示显示所有的target,后面可以接某个target的id,只显示某个target的信息。语法格式为:show [–tid < id >]
update:  用来修改某个特定的target的参数的,语法格式为:update –tid < id > –name < param > value < value >
bind:       用来将某个特定的initiator和target绑定在一起,表示只接受特定的initiator的请求,语法格式为:
bind –tid < id > –initiator-address < address >
unbind:  表示解绑的意思,语法格式为:unbind –tid < id > –initiator-address < address >

2、模式logicalunit下的语法格式:

tgtadm  --lld   < driver >  --mode    logicalunit   --op   {new|delete} [option]

其中driver一般为iscsi –op后面的参数表示要进行的操作

new:      表示新建一个lun,语法格式为:
new –tid < id > –lun < lun > –backing-store < device-path > –bstype < type > –bsoflags
delete:   表示删除一个LUN,语法格式为:delete –tid < id > –lun < lun >

3、模式account下的语法格式:

tgtadm  --lld   < driver >    --mode    account   --op   {new|delete|bind|unbind} [option]


其中driver一般为iscsi –op后面的参数表示要进行的操作

new:       表示新建一个账号和密码,语法格式为:new –user < name > –password < pass >
delete:   删除某个已有的账号,语法格式为:delete –user < name >
bind:   表示在某个特定的target上添加账号,语法格式为:bind –tid < id > –user < name > [–outgoing]
如果使用了–outgoing选项,将被添加作为出去的账号来使用
unbind:     表示在某个特定的target上删除某个账号,语法格式为:account –op unbind –tid < id > –user < name >

4、在tgtadm命令中,某些长选项可以使用短选项来代理,如:

 

 

 

十一、通过命令创建举例:
1、创建一个target
需要说明的是,下面的实验全是使用命令行工具tgtadm来实现的。但是修改配置文件然后使用tgt-admin也是一样可以的,且target数量多的时候,更建议使用配置为文件加载的方式。最重要的一点是,使用命令行方式创建的target及lun等是临时生效的,在target服务重启后就失效了,再手动建立它们是一件相当麻烦的事情。

如下,分别使用了长格式选项和短格式选项分别创建和显示target。注意:创建target时,tid不能是0,因为0是被系统保留的。
-----------------------------------------------------------------
[root@CentOS ~]# tgtadm  --lld  iscsi  --mode  target  --op  new  --tid  1  --targetname iqn.pipci.cc.iscsi:debian.tgt1
[root@CentOS ~]# tgtadm  -L  iscsi  -m  target  -o  show
Target 1: iqn.pipci.cc.iscsi:debian.tgt1
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
Backing store type: null
Backing store path: None
Backing store flags:
Account information:
ACL information:
[root@CentOS ~]#
-----------------------------------------------------------------
以上是第一个target的信息。从信息中可以看到:
创建完第一个target后自动就创建了一个LUN为0的logicalunit(以后简称lun),这是固定给每个target都使用的LUN。
此lun的类型是controller。
"backing store type"为null,即此lun没有向下扩展逻辑设备,因为它是lun控制器。也就是说这个LUN是保留作为lun控制器用的。
"I_T nexus information"记录的是initiator与此target的联结关系,nexus的意思就是联结、关联,在后文介绍initiator的时候会展示此处信息。

2、现在向此target添加一个lun,使用的是新插入的磁盘/dev/sdb1。当然,使用整个磁盘或通过dd命令创建的文件来做实验也可以。

-----------------------------------------------------------------
[root@CentOS ~]# tgtadm  -L  iscsi  -m  logicalunit  -o  new  -t  1  -l  1  -b  /dev/sdb1
[root@CentOS ~]# tgtadm  -L  iscsi  -m  target  -o  show
Target 1: iqn.pipci.cc.iscsi:debian.tgt1
System information:
Driver:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值