Linux运维 第五阶段(八)iSCSI
一、相关概念:
computer architecture计算机体系结构
如图:
north bridge以上是核心系统(核心单元)
south bridge以下是外围总线(I/O系统,提供辅助性功能)
USB device和IDE device能提供持久性存储,若从这些设备上读写数据时,要先加载至内存中,CPU是在内存中进行处理
IDE存储总线(连接设备的数量少,一个控制器上只能连接一主一从两个设备,主板上提供的IDE口也很难有很多,IDE在设计上实现协议数据单元PDU封装的能力很差,并且经此总线将数据以块方式传输至设备上时需要大量的CPU时钟周期参与(CPU要花大量时间进行读或写的操作)在非常繁忙的服务器上这并不适合)
SCSI工业总线(总体性能比IDE及SATA要快,连接总线的适配器adapter(HBA卡,host base adapter),这个卡内置的控制芯片,来完成协议数据单元的封装,这样大大降低了对CPU时钟周期的占用,使得CPU解脱出来可完成其它工作)
SCSI(small computersystem interface,SCSI是一种IO技术;规范了一种并行的I/O总线和相关的协议;数据传输是以块的方式进行;实现了设备无关性、多设备并行、高带宽、低系统开销)
SCSI总线通过SCSI控制器来和硬盘之类的设备进行通信;SCSI控制器逻辑上可分为一个任务管理单元和多个逻辑单元(LU,logical unit);LUN,LU number是为了使用和描述更多设备及对象而引进的一个方法,每个target上最多有32个LUN,一个LUN对应一个逻辑设备
SCSI总线(宽总线(16个口,15个连接设备,最后一个连接终结器terminate);窄总线(共8口,7个口连接设备,另一个口用于terminate))
SCSI总线和SAS总线的区别:
SCSI总线(并行,一根线缆供多个设备连接(多个设备共享同一根线缆),以ultra320为例速率320MB/s)
SAS总线(串行,serial attachedSCSI,适配器上有多个口,每个口连接一个设备,另还有扩展口expander可连接多个设备(类似逻辑分区的概念),速率达到6Gbps,0.75GB/s)
注:SCSI总线,线缆长度有限,仅能共享有限个主机
SAN(storage area network,有些场景需要多个设备为多个主机同时使用,且要能传输更长的距离,能够传输SCSI报文并能路由到目标设备并存储,这种网络结构叫SAN)
SAN(high performance)和NAS(low performance)的区别:
FS(SAN的FS在本地(可创建分区、格式化);NAS的FS在server-side(是文件服务器))
block I/O(SAN在client-side和server-side都有;NAS仅server-side有)
SCSI协议是分层的(分层的好处,某一个层次可以随意替换,而不至影响全局),从上至下依次为:
common access method;
scsi device-type specific command set;(不同设备类型的特有命令集,如光盘、硬盘等)
shared command set;(公共命令集,如存储、读取等)
transport protocol;
physical interconnects;(将SCSI报文通过某一种线缆传输(从源到目的所用的传输介质,所传输的报文格式))
注:SCSI报文(从上至下依次封装各种首部,如在数据上封装特有命令集、公共命令集)通过线缆传输(早期使用ATAPi);物理介质不同,传输的方式就不同,只要将相应的物理层替换为其它介质类型即可,如将ATAPi替换为iSCSI或FC或FCoE
FC代价高昂(fiber channel,不能利用现有网络,需重建光网络,主机的光口要与FC SWITCH的光口绑定,工作机制不是IP这种方式,是光网络传输机制,另需要专门的管理人员学习相关协议及设备管理知识,整套设备及各部件价格不菲)
FCoE(FC over ethernet,基于以太网的FC,且仅能在以太网上传输(双绞线)不能在公网上传输,报文(data经SCSI封装-->FC封装-->FCoE封装-->转为以太网帧)在ethernet上传输,注意不经TCP/IP封装,商业,symmetix公司,非开源,使用此种方式要求以太网至少是10Gbps(万兆))
iSCSI(internet SCSI,开源,利用现有的TCP/IP网络传输SCSI报文,基于IP报文实现分组传送,通过某个服务监听在某个socket上,c/s架构,client(initiator)发起请求,server(target)随时接收请求并给予响应)
注:iSCSI与FCoE传输性能差别不大
注:storage protocol(FC、iSCSI、FCoE、SAS)
client-side:
如图:SCSI driver封装SCSI Cmds,iSCSI driver封装iSCSI指令,这些驱动可以以硬件(不占用CPU时间,性能高,OS内核直接交由设备驱动处理,而不经由软件方式工作的内核模块)或软件(性能差)方式运作,适合client上安装的基于iSCSI的TCP/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的基本功能和管理工具,OS在TCP/IP网络和iscsi方面做了各种优化,所以性能好)
注:若报文由client-->server,server查看ip首部是否本机,若是则接收,再查看tcp首部的目标port是否3260,若是则交由用户空间的scsi服务,scsi服务(iscsi驱动)接收到报文查看指令发现是个存储指令,调用本地的硬件设备驱动程序进行存储(这里特殊的是为提高scsi的工作性能,scsi服务工作在内核中)
注:scsi指令只是由iscsi或scsi完成数据存取控制机制的,若本地的设备不是scsi设备,则调用或交由对应的硬盘驱动程序来完成
二、操作(环境rhel5.8 32bit 2.6.18):
scsi-target-utils(server-side工具,target,只是工具,真正服务是在内核中完成)
iscsi-initiator-utils(client-side驱动,initiator)
(1)server-side(node4)建立共享,client-side(node{1,2})使用共享存储(基于IP认证)
server-side(node4):
[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-admin(Linux SCSI Target Configuration Tool,直接用于编辑配置文件)
/usr/sbin/tgtadm(Linux SCSI Target Administration Utility命令行管理工具,创建target、创建lun、IP认证等)
[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(模式化命令,常用模式target、logicalunit、account)
#tgtadm --lld iscsi --mode target --op new--tid ID_NUM --targetname IQN(add a new target with <id> and <name>. <id> must not be zero.添加一个target,id号不能为0(0为保留,为本机所用);IQN,ISCSI Qualified Name)
注:IQN格式:iqn.yyyy-mm.<reserve domain name>:identifier(reserve domain name中各段要倒写,如iqn.2015-07.com.magedu:tstore.disk1)
#tgtadm --lld iscsi --mode target --op show(show all the targets)
#tgtadm --lld iscsi --mode logicalunit --op new --tid ID_NUM --lun LUN --backing-store PATH(add a new logicalunit with <lun> to the specific target with <id>,添加逻辑单元到指定的target上,一个target上最多32个LUN)
#tgtadm --lld iscsi --mode target --op bind�Ctid ID_NUM --initiator-address ADDRESS(enable 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-side(node1):
[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/iscsiadm(open-iscsi administration utility,initiator端的管理工具)
/var/lib/iscsi/ifaces(此目录记录通过哪个网卡连接target)
/var/lib/iscsi/nodes(此目录下记录建立关系的target端node的相关信息)
/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(模式化的命令,常用的模式discovery、node)
#man iscsiadm
#iscsiadm -m discovery [-d DEBUG_LEVEL] -t TYPE -p IP(发现指定服务器是否有target输出或输出了哪些target;DEBUG_LEVEL有0-8;TYPE四种,sendtargets通常使用此种简写为st、slp、isns、fw;-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-side(node2):执行与node1相同的操作,更改此node的InitiatorName,启动服务,发现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-side(node{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 = iscsiuser(server-side建立的用户名和密码,要求client认证)
node.session.auth.password = iscsiuser
#node.session.auth.username_in = username_in(client建立的用户名和密码,要求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-side(node4):
[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-side(node{1,2}):
[root@node1 ~]# service iscsi restart(no 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重启服务后会自动登录并关联到target;server-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(这样写sdb和sdc会依次被识别为lun1和lun2)
backing-store /dev/sdc
initiator-address 192.168.41.0/24(IP认证)
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
以上是学习《马哥运维课程》做的笔记。
本文出自 “Linux运维重难点学习笔记” 博客,谢绝转载!