V 6 iSCSI

本文涉及的产品
简介:

 

一、相关概念:

computer architecture计算机体系结构

wKioL1Z0pjqD4oF5AABkLKTH6ZQ305.jpg

如图:

north bridge以上是核心系统(核心单元)

south bridge以下是外围总线(I/O系统,提供辅助性功能)

USB deviceIDE device能提供持久性存储,若从这些设备上读写数据时,要先加载至内存中,CPU是在内存中进行处理

IDE存储总线(连接设备的数量少,一个控制器上只能连接一主一从两个设备,主板上提供的IDE口也很难有很多,IDE在设计上实现协议数据单元PDU封装的能力很差,并且经此总线将数据以块方式传输至设备上时需要大量的CPU时钟周期参与(CPU要花大量时间进行读或写的操作)在非常繁忙的服务器上这并不适合)

SCSI工业总线(总体性能比IDE及SATA要快,连接总线的适配器adapterHBA卡,host base adapter),这个卡内置的控制芯片,来完成协议数据单元的封装,这样大大降低了对CPU时钟周期的占用,使得CPU解脱出来可完成其它工作)

 

SCSIsmall computersystem interfaceSCSI是一种IO技术;规范了一种并行的I/O总线和相关的协议;数据传输是以块的方式进行;实现了设备无关性、多设备并行、高带宽、低系统开销)

SCSI总线通过SCSI控制器来和硬盘之类的设备进行通信;SCSI控制器逻辑上可分为一个任务管理单元和多个逻辑单元(LUlogical unit);LUNLU number是为了使用和描述更多设备及对象而引进的一个方法,每个target上最多有32LUN,一个LUN对应一个逻辑设备

SCSI总线(宽总线(16个口,15个连接设备,最后一个连接终结器terminate);窄总线(共8口,7个口连接设备,另一个口用于terminate))

SCSI总线和SAS总线的区别:

SCSI总线(并行,一根线缆供多个设备连接(多个设备共享同一根线缆),以ultra320为例速率320MB/s

SAS总线(串行,serial attachedSCSI,适配器上有多个口,每个口连接一个设备,另还有扩展口expander可连接多个设备(类似逻辑分区的概念),速率达到6Gbps0.75GB/s

 

注:SCSI总线,线缆长度有限,仅能共享有限个主机

SANstorage area network,有些场景需要多个设备为多个主机同时使用,且要能传输更长的距离,能够传输SCSI报文并能路由到目标设备并存储,这种网络结构叫SAN

 

SANhigh performance)和NASlow performance)的区别:

FSSANFS在本地(可创建分区、格式化);NASFSserver-side(是文件服务器))

block I/OSANclient-sideserver-side都有;NASserver-side有)

wKiom1Z0pj-iMFjSAACuk-qvMYU556.jpg

wKioL1Z0plzTTBmeAABCFrytliA662.jpg

SCSI协议是分层的(分层的好处,某一个层次可以随意替换,而不至影响全局),从上至下依次为:

common access method

scsi device-type specific command set;(不同设备类型的特有命令集,如光盘、硬盘等)

shared command set;(公共命令集,如存储、读取等)

transport protocol

physical interconnects;(将SCSI报文通过某一种线缆传输(从源到目的所用的传输介质,所传输的报文格式))

注:SCSI报文(从上至下依次封装各种首部,如在数据上封装特有命令集、公共命令集)通过线缆传输(早期使用ATAPi);物理介质不同,传输的方式就不同,只要将相应的物理层替换为其它介质类型即可,如将ATAPi替换为iSCSIFCFCoE

FC代价高昂(fiber channel,不能利用现有网络,需重建光网络,主机的光口要与FC SWITCH的光口绑定,工作机制不是IP这种方式,是光网络传输机制,另需要专门的管理人员学习相关协议及设备管理知识,整套设备及各部件价格不菲)

FCoEFC over ethernet,基于以太网的FC,且仅能在以太网上传输(双绞线)不能在公网上传输,报文(dataSCSI封装-->FC封装-->FCoE封装-->转为以太网帧)在ethernet上传输,注意不经TCP/IP封装,商业,symmetix公司,非开源,使用此种方式要求以太网至少是10Gbps(万兆))

iSCSIinternet SCSI,开源,利用现有的TCP/IP网络传输SCSI报文,基于IP报文实现分组传送,通过某个服务监听在某个socket上,c/s架构,clientinitiator)发起请求,servertarget)随时接收请求并给予响应)

注:iSCSIFCoE传输性能差别不大

注:storage protocolFCiSCSIFCoESAS

wKiom1Z0pmDwizvyAAB1-zQuE78109.jpg

wKiom1Z0pnjTeHbaAACIhekp3G8644.jpg

client-side

如图:SCSI driver封装SCSI CmdsiSCSI driver封装iSCSI指令,这些驱动可以以硬件(不占用CPU时间,性能高,OS内核直接交由设备驱动处理,而不经由软件方式工作的内核模块)或软件(性能差)方式运作,适合client上安装的基于iSCSITCP/IP网卡有(性能从高到低依次为):

iSCSI HBA卡(内建SCSI指令及TOE引擎的ASIC芯片的适配卡,性能最佳,价格昂贵,CPU占用率10%

iSCSI TOE卡(内建TOE引擎的ASIC芯片适配卡,但SCSI指令由软件方式运行,iSCSI指令在硬件中完成,CPU占用率40%

iSCSI initiator驱动程序(完全软件方式运作,性能最差)

 

server-side

iSCSI协议的服务(用户空间的守护进程)监听在某个socket上(tcp/3260port

iSCSI session(同ssh一样,连接建立后通道会一直存在)

iSCSI connection(每发送一次数据就是一个iSCSI connection

注:server-side只需提供iscsi功能(很多公司销售的iscsi设备是极简化的OS,仅提供iscsi的基本功能和管理工具,OSTCP/IP网络和iscsi方面做了各种优化,所以性能好)

wKioL1Z0ppnQYe7wAABtF7GHmbg986.jpg

注:若报文由client-->serverserver查看ip首部是否本机,若是则接收,再查看tcp首部的目标port是否3260,若是则交由用户空间的scsi服务,scsi服务(iscsi驱动)接收到报文查看指令发现是个存储指令,调用本地的硬件设备驱动程序进行存储(这里特殊的是为提高scsi的工作性能,scsi服务工作在内核中)

注:scsi指令只是由iscsiscsi完成数据存取控制机制的,若本地的设备不是scsi设备,则调用或交由对应的硬盘驱动程序来完成

 

 

二、操作(环境rhel5.8 32bit 2.6.18):

scsi-target-utilsserver-side工具,target,只是工具,真正服务是在内核中完成)

iscsi-initiator-utilsclient-side驱动,initiator

 

1server-side(node4)建立共享,client-side(node{1,2})使用共享存储(基于IP认证)

server-sidenode4):

[root@node4 ~]# fdisk /dev/sdb+5G,不要格式化)

[root@node4 ~]# partprobe /dev/sdb

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

[root@node4 ~]# rpm -ql scsi-target-utils

/etc/rc.d/init.d/tgtd

/etc/sysconfig/tgtd

/etc/tgt/targets.conf

/usr/sbin/tgt-adminLinux SCSI Target Configuration Tool,直接用于编辑配置文件)

/usr/sbin/tgtadmLinux SCSI Target Administration Utility命令行管理工具,创建target、创建lunIP认证等)

[root@node4 ~]# service tgtd start

正在启动 SCSI target daemon                             [确定]

[root@node4 ~]# netstat -tnlp | grep tgtd

tcp       0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      4863/tgtd          

tcp       0      0 :::3260                     :::*                        LISTEN      4863/tgtd 

[root@node4 ~]# chkconfig tgtd on

[root@node4 ~]# chkconfig --list tgtd

tgtd               0:关闭      1:关闭      2:启用      3:启用      4:启用      5:启用      6:关闭

 

[root@node4 ~]# tgtadm -h(模式化命令,常用模式targetlogicalunitaccount

#tgtadm --lld iscsi --mode target --op new--tid ID_NUM --targetname IQNadd a new target with <id> and <name>. <id> must not be zero.添加一个targetid号不能为00为保留,为本机所用);IQNISCSI Qualified Name

注:IQN格式:iqn.yyyy-mm.<reserve domain name>:identifierreserve domain name中各段要倒写,如iqn.2015-07.com.magedu:tstore.disk1

#tgtadm --lld iscsi --mode target --op showshow all the targets

#tgtadm --lld iscsi --mode logicalunit --op new --tid ID_NUM --lun LUN --backing-store PATHadd a new logicalunit with <lun> to the specific target with <id>,添加逻辑单元到指定的target上,一个target上最多32LUN

#tgtadm --lld iscsi --mode target --op bind–tid ID_NUM --initiator-address ADDRESSenable the target toaccept the specific initiators将允许使用此设备的client地址与target绑定,基于IP认证)

注:

--op new|delete|show|update|bind|unbind

--lld-L),--mode-m),--op-o),--tid-t),--targetname-T),--lun-l),--backing-store-b),--initiator-address-I

 

[root@node4 ~]# tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2015-07.com.magedu:teststore.disk1

[root@node4 ~]# tgtadm --lld iscsi --mode target --op show

[root@node4 ~]# tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb

[root@node4 ~]# tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address 192.168.41.0/24(基于IP认证)

[root@node4 ~]# tgtadm --lld iscsi --mode target --op show

……

       LUN: 0

……

       LUN: 1

……

           Online: Yes

……

   Account information:

   ACL information:

       192.168.41.0/24

 

client-sidenode1):

[root@node1 ~]# rpm -ql iscsi-initiator-utils(系统默认已安装此包)

/etc/iscsi

/etc/iscsi/iscsid.conf

/etc/logrotate.d/iscsiuiolog

/etc/rc.d/init.d/iscsi(启动此项,iscsi会自动启动iscsid

/etc/rc.d/init.d/iscsid

/sbin/iscsi-iname(此命令会生成每一个initiator的名称)

/sbin/iscsiadmopen-iscsi administration utilityinitiator端的管理工具)

/var/lib/iscsi/ifaces(此目录记录通过哪个网卡连接target

/var/lib/iscsi/nodes(此目录下记录建立关系的targetnode的相关信息)

/var/lib/iscsi/send_targets(此目录下记录与target建立关系的目录,目录名为target端的IP和端口)

[root@node1 ~]# echo"InitiatorName=`iscsi-iname -p iqn.2015-07.com.magedu`" >/etc/iscsi/initiatorname.iscsi (生成指定前缀的initiator名称,另此配置文件还可添加别名,如InitiatorAlias=node1.magedu.com

[root@node1 ~]# cat/etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2015-07.com.magedu:62bf666dd2

 

[root@node1 ~]# iscsiadm -h(模式化的命令,常用的模式discoverynode

#man iscsiadm

#iscsiadm -m discovery [-d DEBUG_LEVEL] -t TYPE -p IP(发现指定服务器是否有target输出或输出了哪些targetDEBUG_LEVEL0-8TYPE四种,sendtargets通常使用此种简写为stslpisnsfw-p--portal入口,指定target服务器的IP地址)

#iscsiadm -m node -T TARGET_NAME -p IP -l|-u(建立或解除与指定的target间的关联关系;-l--login-u--logout

 

[root@node1 ~]# iscsiadm -m discovery -t st -p 192.168.41.134

192.168.41.134:3260,1iqn.2015-07.com.magedu:teststore.disk1

[root@node1 ~]# iscsiadm -m node -T iqn.2015-07.com.magedu:teststore.disk1 -p 192.168.41.134 -l

Logging in to [iface: default, target:iqn.2015-07.com.magedu:teststore.disk1, portal: 192.168.41.134,3260] (multiple)

Login to [iface: default, target:iqn.2015-07.com.magedu:teststore.disk1, portal: 192.168.41.134,3260]successful.

[root@node1 ~]# fdisk -l(可查到关联到本机的设备,可进行格式化)

……

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

……

[root@node1 ~]# fdisk /dev/sdb+2G

[root@node1 ~]# mkdir /mydata

[root@node1 ~]# mkfs.ext3 /dev/sdb1

[root@node1 ~]# mount /dev/sdb1 /mydata

[root@node1 ~]# cd /mydata

[root@node1 mydata]# touch a.txt

[root@node1 mydata]# ls

a.txt lost+found

 

client-sidenode2):执行与node1相同的操作,更改此nodeInitiatorName,启动服务,发现target、与target建立关联关系、挂载设备

[root@node2 ~]# cd /mydata

[root@node2 mydata]# touch b.txt

[root@node2 mydata]# ls

b.txt lost+found

[root@node2 mydata]# cd

[root@node2 ~]# cd /var/lib/iscsi

[root@node2 iscsi]# ls

ifaces isns  nodes  send_targets slp  static

[root@node2 iscsi]# ls send_targets/192.168.41.134,3260/

iqn.2015-07.com.magedu:teststore.disk1,192.168.41.134,3260,1,default  st_config

注:以上操作,两node使用的是单机FS,若两个node同时挂载使用,某一node新创建的一个文件,在另一node有可能会看不到(因为还在内存中尚未同步到磁盘);若两node同时编辑磁盘中的同一文件,保存后FS会崩溃

 


2)基于用户名密码认证(CHAP为双向认证,challenge hand authentication protocol,挑战式握手认证协议,以下举例是单向认证(server-side创建帐号密码,要求client认证))

client-sidenode{1,2}):

[root@node1 mydata]# vim /etc/iscsi/iscsid.conf

node.startup = automatic

node.leading_login = No

# CHAP Settings

node.session.auth.authmethod = CHAP

node.session.auth.username = iscsiuserserver-side建立的用户名和密码,要求client认证)

node.session.auth.password = iscsiuser

#node.session.auth.username_in = username_inclient建立的用户名和密码,要求server-side认证)

#node.session.auth.password_in = password_in

#discovery.sendtargets.auth.username = username(关于发现的用户名和密码认证,openiscsi不支持此项,忽略)

#discovery.sendtargets.auth.password = password

[root@node1 ~]# cd

[root@node1 ~]# iscsiadm -m node -T iqn.2015-07.com.magedu:teststore.disk1 -p 192.168.41.134 -u--logout,解除关联关系)

 [root@node1~]# iscsiadm -m node -T iqn.2015-07.com.magedu:teststore.disk1 -p 192.168.41.134 -o delete-o delete,将有关与target上建立关联关系的相关文件删除,若不删除重启服务后会自动登录到此target

[root@node1 ~]# rm -rf /var/lib/iscsi/send_targets/

 

server-sidenode4):

[root@node4 ~]# tgtadm --lld iscsi --mode target --op show(确保已开启IP认证,查看ACL information,因为iscsi-initiator不支持discovery认证,通过IP认证先发现后,再用帐号密码认证)

Account information:

   ACL information:

       192.168.41.0/24

[root@node4 ~]# tgtadm -h

[root@node4 ~]# tgtadm --lld iscsi --mode account --op new --user iscsiuser --password iscsiuser

[root@node4 ~]# tgtadm --lld iscsi --mode account --op bind --tid 1 --user iscsiuser

[root@node4 ~]# tgtadm --lld iscsi --mode account --op show

Account list:

iscsiuser

[root@node4 ~]# tgtadm --lld iscsi --mode target --op show

   Account information:

       iscsiuser

   ACL information:

       192.168.41.0/24

 

client-sidenode{1,2}):

[root@node1 ~]# service iscsi restartno records found表示没有任何与target关联的设备)

iscsiadm: No matching sessions found……

Setting up iSCSI targets: iscsiadm: Norecords found

                                                          [  OK  ]

[root@node1 ~]# iscsiadm -m discovery -t st -p 192.168.41.134

192.168.41.134:3260,1iqn.2015-07.com.magedu:teststore.disk1

[root@node1 ~]# iscsiadm -m node -T iqn.2015-07.com.magedu:teststore.disk1 -p 192.168.41.134 -l

Logging in to [iface: default, target:iqn.2015-07.com.magedu:teststore.disk1, portal: 192.168.41.134,3260] (multiple)

Login to [iface: default, target:iqn.2015-07.com.magedu:teststore.disk1, portal: 192.168.41.134,3260]successful.

注:认证失败提示如下:iscsiadm: Could not login to [iface: default, target:iqn.2015-07.com.magedu:teststore.disk1, portal: 192.168.41.134,3260].

iscsiadm: initiator reported error (24 -iSCSI login failed due to authorization failure)

iscsiadm: Could not log into all portals

 

注:client-side重启服务后会自动登录并关联到targetserver-side重启服务后要想永久有效要编辑配置文件/etc/tgt/targets.conf

 

3)编辑server-side配置文件/etc/tgt/targets.conf

[root@node4 ~]# vim /etc/tgt/targets.conf

方式一:

default-driver iscsi

<target iqn.2015-07.com.magedu:teststore.disk1>

   backing-store /dev/sdb(这样写sdbsdc会依次被识别为lun1lun2

   backing-store /dev/sdc

   initiator-address 192.168.41.0/24IP认证)

   incominguser iscsiuser iscsiuser(帐号密码认证)

</target>

注:可将backing-store替换为direct-store,先按次序识别backing-store指定的硬盘,再按次序识别direct-strore指定的硬盘,backing-store优先级比direct-store优先级高(backing-store还可指定分区)

方式二:

<targetiqn.2015-07.com.magedu:teststore.disk1>

   <backing-store /dev/sdb>

       vender_id magedu

       lun 5

   </backing-store>

   incominguser iscsi iscsi

   initiator-address 192.168.41.131

   initiator-address 192.168.41.132

</target>

注意:第二种方式可指定lun号,每一个backing-store段都要包起来

[root@node4 ~]# service tgtd restart(使用第二种方式的配置文件,重启服务)

停止 SCSI target daemon                                 [确定]

正在启动 SCSI target daemon                             [确定]

[root@node4 ~]# tgtadm --lld iscsi --mode target --op show

Target 1:iqn.2015-07.com.magedu:teststore.disk1

   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:

       LUN: 5

           Type: disk

           SCSI ID: IET     00010005

           SCSI SN: beaf15

           Size: 10737 MB, Block size: 512

           Online: Yes

           Removable media: No

           Prevent removal: No

           Readonly: No

           Backing store type: rdwr

           Backing store path: /dev/sdb

           Backing store flags:

   Account information:

       iscsi

   ACL information:

       192.168.41.131

       192.168.41.132



本文转自 chaijowin 51CTO博客,原文链接:http://blog.51cto.com/jowin/1726250,如需转载请自行联系原作者

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
Linux
centos7 升级qemu-kvm版本
centos7 手动升级qemu-kvm版本
1931 0
|
前端开发 大数据 应用服务中间件
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer
|
弹性计算 安全 Linux
CentOS7下KVM虚拟化环境中体验Aliyun Linux 2系统
CentOS7下KVM虚拟化环境中体验Aliyun Linux 2系统
266 0
CentOS7下KVM虚拟化环境中体验Aliyun Linux 2系统
|
存储 缓存 固态存储
|
6天前
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
|
5天前
|
关系型数据库 分布式数据库 数据库
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
PolarDB分布式版助力《香肠派对》实现百亿好友关系20万QPS的毫秒级查询。
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
|
6天前
|
消息中间件 Cloud Native Serverless
RocketMQ 事件驱动:云时代的事件驱动有啥不同?
本文深入探讨了云时代 EDA 的新内涵及它在云时代再次流行的主要驱动力,包括技术驱动力和商业驱动力,随后重点介绍了 RocketMQ 5.0 推出的子产品 EventBridge,并通过几个云时代事件驱动的典型案例,进一步叙述了云时代事件驱动的常见场景和最佳实践。
115027 1
|
7天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101798 1