您的位置:首页 > 理论基础 > 计算机网络

iscsi详解&&配置

2015-09-28 13:28 645 查看
iSCSI详解

 iSCSI适配卡

  iSCSI适配卡大致分成两类,一为TOE HBA卡,一为iSCSI HBA卡,前者价格较便宜,后者效能极佳,但价格非常昂贵。代表性的厂商有Adaptec、Alacritech、Intel、LSI、Qlogic等,其中Intel专注于TOE HBA卡的开发。

 性能及成本

  就目前而言,iSCSI SAN在性能及成本上的高低与否,最主要的关键就在于ASIC芯片上。相对于便宜又大碗的Initiator驱动程序而言,价格不便宜的iSCSI ASIC却最能符合性能及速度上的需求,例如制造业或金融业的数据库,就需要较高的速度来运作,这时候采用内建ASIC芯片的iSCSI适配卡会是最佳选择。

  一般来说,随着ASIC芯片的有无,以及等级的高低,目前iSCSI Initiator可分为以下三种:

  1. iSCSI HBA卡:

  所谓iSCSI HBA卡就是采用内建SCSI指令及TOE引擎的ASIC芯片的适配卡,在三种iSCSI Initiator中,价格最贵,但性能最佳。目前价格已由一开始的1000美金,下降跌至500美元。对于有高效能应用需求的企业,或是公司内部主机CPU在1GHz以下者,最好采用iSCSI HBA卡,如此才能获得最好的性能。

  NetApp专家特别强调,SCSI HBA只能走iSCSI协议,而无法透过NFS或CIFS等文件系统协议与应用服务器沟通。

  2. iSCSI TOE卡:

  亦即只有内建TOE引擎的ASIC芯片适配卡,由于SCSI指令仍以软件方式运作,所以仍会吃掉些许的CPU资源。在三种iSCSI Initiator中,价格比iSCSI HBA便宜,但比Initiator 驱动程序贵,性能也居于两者之间。目前市面上Intel的TOE HBA仍要价高达150美金。

  但在各协议的支持上,TOE HBA卡可以同时支持iSCSI、NFS及CIFS协议

  3.iSCSI Initiator驱动程序

  目前不论是Microsoft Windows、IBM AIX、HP-UX、Linux、Novell Netware等各家操作系统,皆已陆续提供这方面的服务,其中以微软最为积极,也最全面。在价格上,比起前两种方案,远为低廉,甚至完全免费(例如微软)。但由于Initiator驱动程序工作时会耗费大量的CPU使用率及系统资源,所以性能最差。

  在此建议,最好是采用1GHz以上CPU的主机,如此才能获得较佳的效能表现,如果公司主机CPU在1GHz以下,那么最好不要采用。至于在各类协议的支持上,Initiator驱动程序可以同时支持iSCSI、NFS及CIFS协议。

一、iSCSI:Internet Small Computer System Interface

iSCSI技术是由IBM公司研究开发供硬件设备使用的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议。iSCSI是基于TCP/IP协议,将现有SCSI接口与以太网络(Ethernet)技术结合起来的一种网络存储技术,使服务器可与使用IP网络的储存装置互相交换资料。



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





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

1、iSCSI客户端具有的特性:

iSCSI initiator是发起I/O操作的启动者;

需要通过发现过程请求远端快设备;

可以与target进行持久连接;

在Linux系统中可以使用iscsi-initiator-utils软件包来模拟实现;

2、iSCSI服务器端具有的特性:

iSCSI target是I/O操作的执行者;

需要导出一个或多个块设备供启动者(initiator)使用;

在Linux系统中可以使用scsi-target-utils软件包来模拟实现;

3、iSCSI target设备名称

iSCSI target名称必须是全球唯一的,其格式为:

iqn.< yyyy-mm >.< tld.domain.some.host > [:< identifier >]

iqn.< 年份-月份 >.< 域名反写 > [: < 设备识别;可以是任意字符串 >]

iSCSI target名称必须是以iqn开头的

如:iqn.2015-03.com.baidu.www:Zw3l4S3dgnY

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。

六、服务器端管理配置工具tgtadm的使用

tgtadm是一个模式化的命令,其常见的模式有target、logicalunit、account

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命令中,某些长选项可以使用短选项来代理,如:

–lld = -L

–tid = -t

–lun = -l

–backing-store = -b

–initiator-address = -I

–targetname < targetname > = -T

七、客户端的管理工具iscsiadm

iscsiadm是个模式化的工具,其模式可通过-m或–mode选项指定,常见的模式有discovery、node、fw、session、host、iface几个。这些模式的主要功能如下:

discovery: 用于发现某服务器是否有target输出,以及输出了哪些target;

node: 管理跟某target的关联关系

session:用于显示所有的活动会话和连接

fw:显示所有的启动固件值

host:显示所有的iSCSI主机

iface:显示/var/lib/iscsi/ifaces目录中的所有ifaces设定

1、discovery模式下的语法格式

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


discovery模式下可用选项:

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

-l, –login 表示登录target的意思

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

-p, –portal 指定target服务的IP和端口;

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

2、node模式下的语法格式

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


node模式下可用选项:

-L ,–loginall 表示登录到所有发现的target设备上。all表示登录到所有的target设备上;manual表示手动登录;automatic表示自动登录。

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

-u, –logout 从target设备上登出

-s, –stats 显示session统计信息

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

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

3、session模式下的语法结构iscsiadm -m session -s:显示会话的相关信息

客户端配置文件/etc/iscsi/iscsid.conf 的主要参数如下:

node.startup                               ##设置启动方式,可选的参数有auotmatic和manual
node.session.auth.authmethod               ##设置使用CHAP认证方式,默认为NONE
node.session.auth.username target          ##service端认证所需initiator提供的用户
node.session.auth.password target          ##service端认证所需initiator提供的密码
node.session.auth.username_in initiator    ##client端认证所需target提供的用户
node.session.auth.password_in initiator    ##client端认证所需target提供的密码
discovery.sendtargets.auth.authmethod      ##设置使用CHAP认证方式用以发现target端导出的设备,默认为NONE
discovery.sendtargets.auth.username        ##发现操作时target端认证所需initiator提供的用户
discovery.sendtargets.auth.passwd          ##发现操作时target端认证所需initiator提供的密码
discovery.sendtargets.auth.username_in     ##发现操作时initiator端认证所需target提供的用户
discovery.sendtargets.auth.password_in     ##发现操作时initiator端认证所需target提供的密码


八、Initiator守护进程

open-iscsi包括两个守护进程iscsid和iscsi,其中iscsid是主进程,iscsi进程则主要负责根据配置,在系统启动时进行发起端(Initiator)到服务端(target)的登录,建立发起端与服务端的会话,使主机在启动后即可使用通过iSCSI提供服务的存储设备。

iscsid进程实现iSCSI协议的控制路径以及相关管理功能。例如守护进程(指iscsid)可配置为在系统启动时基于持久化的iSCSI数据库内容,自动重新开始发现(discovery)目标设备。

九、Initiator配置

initiator名称用来唯一标识一个iSCSI Initiator端;配置文件为/etc/iscsi/initiatorname.iscsi,命名规则可采用iqn-type格式,利用iscsi-iname命令可产出一个名称,将此名称输入到initiatorname.iscsi配置文件即可。

iSCSI Initiator的配置文件为/etc/iscsi/iscsid.conf,在iSCSI initiator的scsid进程启动和执行iscsiadm命令时,将读取这个配置文件的内容,获取与SCSI目标进行交互的相关信息,主要的配置内容包括:

CHAP Settings 组 (该组下的各个设置项主要用来指定Initiator与target验证方式及相关息 )

设置节点会话的验证模式

node.session.auth.authmethod = CHAP


CHAP(Challenge Handshake Authentication Protocol ),默认为不验证(none)

设置会话target验证initiator的CHAP用户名及对应的密码

node.session.auth.username = scott
node.session.auth.password = tiger


设置会话initiator验证target的用户名及其对应的密码

node.session.auth.username_in = username_in
node.session.auth.password_in = password_in


设置initiator发现target的验证模式,默认为不验证(none)

discovery.sendtargets.auth.authmethod = CHAP


设置发现会话(discovery session)target验证initiator的CHAP用户名及对应的密码

discovery.sendtargets.auth.username = scott
discovery.sendtargets.auth.password = tiger


设置发现会话(discovery session)initiator验证target的CHAP用户名及对应的密码

discovery.sendtargets.auth.username_in = username_in
discovery.sendtargets.auth.password_in = password_in


通过上述配置项,可以看到iSCSI的主要验证方式是CHAP,并且验证是双方向的,

超时(Timeouts)设置组:本组设置initiator与target端交互的时间限制。

重试(retry)设置组:本组设置iscsid重试登录节点的次数。

会话和设备排队深度(session and device queuedepth)设置组:设置session排队命令的数量,设置设备队列深度

iSCSI设置(iSCSI settings)组:启用或禁止R2T(Ready to Transmit)流控,启用后,initiator在发送任何数据前必须等待 一个R2T命令,默认为禁止(no);

node.session.iscsi.InitialR2T = Yes|no

启用或禁止立即数据(immediate data ),禁止后,initiator不随着SCSI命令PDU发送未请求的数据。默认为启用(Yes);

node.session.iscsi.ImmediateData = Yes|No

实例:initiator与target两台虚拟机的系统均为CentOS6.4_x86_64,挂载本地光盘yum安装相关软件包

一、target端配置

1、target服务端安装软件包:scsi-target-utils,主配置文件:/etc/tgt/targets.conf





2、启动服务守护进程,scsi-target监听的端口是: 3260



3、服务端新建一个target,查看创建的target,LUN0 是控制器,可以看到各个LUN的大小和磁盘路径



4、target中添加LUN,查看创建的target



5、设置基于IP的访问控制

tgtadm –lld iscsi –mode target –op bind –tid 1 –initiator-address ALL #所有Initiator都可以访问

tgtadm –lld iscsi –mode target –op bind –tid 1 –initiator-address 10.10.0.0/16 #该网段内的都可以访问



6、设置基于用户的访问控制

建立一个新的帐号;将帐号与target绑定;显示帐号信息



7、查看某个具体的target信息,可以使用



通过命令方式配置的target在重启服务器后会失效,也可以通过修改配置文件/etc/tgt/targets.conf的方式实现保存,系统开机后会自动读取。

二、initiator端配置

1、yum安装软件包并启动服务





2、修改配置文件,开启chap认证

[root@initiator ~]# vim /etc/iscsi/iscsid.conf



3、修改iscsi名称前缀到配置文件



4、发现目标设备,以下查询目标门户(Portal)为10.10.100.99:3260上的目标,查找成功后,返回相应的target ID



同时在 /var/lib/iscsi/send_targets 和 /var/lib/iscsi/nodes目录下记录相应的门户和节点信息。/var/lib/iscsi目录下的内容采用dbm数据库方式存储,所有版本的linux以及大多的unix都随系统带有一个基本的,但是却很高效的数据存储程序集合,被成为dbm数据库。适合于相对比较静态的索引化数据。其实就是一个索引化的文件存储系统。这些信息称之为initiator discoverydb,可以通过iscsiadm相关操作进行管理。使用iscsiadm -m node命令,可以查看到发现的节点记录。



5、登录节点



登录成功后在/sys/devices/platform/会生成一个hostX目录,包含session和connection信息



如果initiator端已经登录过此target,此时还需要先注销登录后重启iscsid服务,并在删除此前生成的database后重新发现target,并重新登入,过程如下:



服务器端可以查看登录情况



客户端查看session



6、测试

查看目标方的存储设备



格式化设备,并挂载测试





7、登出节点



Linux系统重启后,磁盘设备的名称可能会发生飘移,从而引起文件系统不能挂载上来或者不能正确挂载,使用UUID的方式进行挂载可以解决这个问题:

使用命令“tune2fs -l /dev/sdb”可以查到文件系统的UUID:

Filesystem UUID: ff6bd4a0-6985-4c3f-9008-11f7a5ecc299

然后在/etc/fstab中添加

UUID=ff6bd4a0-6985-4c3f-9008-11f7a5ecc299 /mnt ext4 default 0 0

替换掉原来的 /dev/sdb /mnt ext4 default 0 0

注:通过UUID来手动挂载磁盘

在/etc/fstab中添加 UUID=ff6bd4a0-6985-4c3f-9008-11f7a5ecc299 0 0

然后执行以下命令:

mount UUID=ff6bd4a0-6985-4c3f-9008-11f7a5ecc299

iscsi完全指南:http://www.cnblogs.com/tonyzhang/articles/1133333.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息