iscsi总结
1iscsi工作原理与服务器搭建
1.1概念
iSCSI是因特网小型计算机系统接口(internet Small Computer System Interface)的简称,其是IETF制订的一项标准,用于将SCSI数据块映射为以太网数据包。从根本上来说,它是一种基于IP Storage 理论的新型存储技术。简单的说,iSCSI就是在IP网络上运行SCSI 协议的一种网络存储技术。
一个可以用于存储数据的iSCSI磁盘阵列或者具有iSCSI功能的设备都可以称为“iSCSI Target”。目前大部分iSCSI Target 都是收费的,例如DataCoreSoftware,FalconStor Software的iSCSI Server for Windows等,这些都是支持Windows平台的。不过在linux平台下也存在iSCSI Target软件,例如iSCSI Enterprise Target,而这也是我们KMJ 所使用的,后面则会重点介绍该软件。
1.2iSCSI的工作原理
首先客户端Initiator发出请求建立SCSI CDB(命令描述块),并将其传给iSCSI层。而iSCSI 层则对SCSI的CDB进行封装,完成SCSI到TCP/IP的协议的映射。TCP/IP层则对IP报文进行路由转发,并且提供端到端的透明可靠的传输。
1.3搭建iSCSI Target服务器
1寻找一台linux服务器,搭建好yum源,我们一般使用kylin 3.1.8或kylin3.2.2操作系统。
2安装iSCSI Target 包
yum–y install scsi-target-utils
3在该服务器上添加一块空闲分区或者硬盘作为存储盘,比如将/dev/sdb作为映射存储。
4修改配置文件vi /etc/tgt/targets.conf
backing-store /dev/sdb
5启动iSCSI Target服务
6service tgtd start
7关闭selinux 和防火墙
关闭selinux,setenforcesoftmode
关闭防火墙,service iptables stop 或者/etc/init.d/iptables start
1.4搭建iSCSI Initiator 服务器
注:以下操作不需要手动去做,KMJ 已经默认安装或通过web进行配置,只需对其有一定了解即可。
1服务器端的iSCSIInitator 的安装(KMJ上已经安装好了的) 2yum –y install iscsi*
3启动Initiator 服务,serviceiscsi start
4iSCSI Initiator 目录的功能介绍
?/sbin/iscsiadm 命令。在安装完iSCSI Initiator后,会生成/sbin/iscsiadm命令,此命令是用来管理(更新、删除、插入、查询)iSCSI 配置数据库文件的命令行工具,
用户能够用它对iSCSI nodes、sessions、connections和discovery records进行一系列
的操作。
?/var/lib/iscsi/send_targets 目录。在此目录下。会生成一个或多个以iSCSI存储服务器的IP地址和端口号命名的文件夹,文件名为“iSCSI target IP,端口号”(例如
“10.1.20.151,3260”).
?/var/lib/iscsi/nodes 目录。在此目录下,会生成一个或多个以iSCSI 存储服务器上的Target 名命名的文件夹,在该文件夹下有一个文件名为“iSCSIportal IP,端口号”
(例如“10.1.20.151,3260”)的配置参数文件,该文件是iSCSIInitator 登陆iSCSI Target
时要使用的参数,而这些参数的设置是从/etc/iscsi/iscsi.conf中的参数继承而来的,可以通过iscsiadm 命令对某一个文件参数文件进行修改。
5通过iscsiadm 命令发现存储
可以通过如下指令查询iSCSI Target 主机划分了那些lun
iscsiadm -m discovery –type sendtargets–portal IP或者
iscsiadm–m discovery –t sendtarges–p IP
如在KMJ上执行以下命令,其中10.1.20.151 为存储服务器:
注:需要说明的是,当成功执行一次Target发现后,iSCSI Initiator 就会查询记录写到/var/lib/iscsi/send_targets对应的目录下。因此,Target发现只需要执行一次即可。
6通过iscsiadm 命令登陆存储,具体指令如下:
-T 名字要写对,不然会出现no records found的错误
iscsiadm–m node –T
iscsiadm–m node –T
这里的“-T”后面跟的是Target名称,“ip-address”是Target 主机的IP地址,“portal”是Target主机的端口号,默认是3260。
注:需要说明的是,执行Target发现操作,其实已经与iSCSI Target 主机建立了连接,此时如果再次执行iscsiadm命令与Target主机建立连接,会提示“iscsiadm:initiator reported error(15 –already exists)”错误,所以需要先断开与iSCSI主机的连接。具体命令如下所示:
7如果存在多个Target主机时,可以通过如下命令一次登陆到所
有的Target主机:iscsiadm–m node –loginall=all
8验证Target主机已经成功映射到Initiator主机
?通过iscsiadm 命令查看,iscsiadm –m session -i
?通过fdisk -l命令查看分区表,找到对应Target共享磁盘。
9清除连接
停止服务:service iscsi stop
去除挂载:iscsiadm –m node –o delete
重启服务:service iscsi restart
2iscsi配置问题的故障排除2.1从本地系统到iscsi目标无连接
1成为管理员
2列出iscsi目标信息
iscsiadm list target
3如果iscsiadm list target未列出任何连接,检查/var/adm/message文件,查找失败可能原因
?ping命令或telnet命令与存储设备的iscsi端口连接,可验证连接是否可以访问,从而确保iscsi服务可用,缺省端口为3260。
?此外检查存储设备的日志文件是否有错误。
4如果iscsiadm list target列出目标,检查/var/adm/message文件,查找原因。
?如果当前使用SendTargets作为搜索方法,请尝试使用-v选项列出discovery-address,以确保预期目标对于主机是可见的。
如:iscsiadm list discovery-address –v 10.0.0.1
?如果当前使用iSNS作为搜索方法,尝试启用iSNS搜索模式如:iscsiadm list isns-server –v
2.2iscsi设备或磁盘在本地系统上不可用
1成为管理员
2确定在枚举过程中在该目标上搜到到LUN,-s选项可显示在枚举过程中在该目标上搜索到的LUN。
如:iscsiadm list target –S
3查看/var/adm/message文件,查看是否报告了错误。
4如果某个LUN应该已列出,但没有列出,检查存储设备的日
志文件是否有错误,确保任何存储设备LUN屏蔽均为正确配置。
2.3在使用iSNS搜索方法时使用LUN屏蔽
?避免将iSNS搜索域用作控制特定启动器的存储验证方式,如果确保只有获得授权的启动器才能访问LUN,则使用LUN屏蔽。
?如果在目标正在使用时从搜索域中删除该目标,则iscsi启动器将不会从该目标注销,如果不需要该启动器访问该目标及关联
的LUN,则必须使用LUN屏蔽,仅从搜索域中删除目标是不够
的。
2.4一般iscsi错误消息(/var/adm/message)
消息格式:
iscsi TYPE(OID) STRING (STATUS-CLASS#/STATUS-DETAIL#)
TYPE:连接或会话
OID:连接或会话的对象ID,此ID对于OS实例是唯一的
STRING:条件的说明
STATUS-CLASS#/STATUS-DETAIL#:将在iscsi登录响应中返回
10iscsi connection(OID) login failed –Initiator is not allowed access to the given target.
原因:该设备不允许启动器访问iscsi目标设备。
解决方法:验证启动器名称,并确认该名称已由存储设备正确屏蔽或提供。
11iscsi connection(OID) login failed - Requested ITN does not exist at this address.
原因: 该设备不提供对正在请求的iSCSI 目标名称(iSCSI target name, ITN) 的访问权限。
解决方法: 验证正确指定了启动器搜索信息,并且正确配置了存储设备。
12iscsi connection(OID) login failed - Requested ITN has been removed and no forwarding address is provided.
原因: 该设备无法再提供对正在请求的iSCSI 目标名称(ITN) 的访问权限。
解决方法: 验证正确指定了启动器搜索信息,并且正确配置了存储设备。
13iscsi connection(OID) login failed - Requested iSCSI version range is not supported by the target.
原因: 存储设备不支持启动器的iSCSI 版本。
14iscsi connection(OID) login failed - No more connections can be accepted on this Session ID (SSID).
原因: 存储设备无法接受此启动器节点到iSCSI 目标设备的更多连接。
15iscsi connection(OID) login failed - Missing parameters (e.g., iSCSI initiator and/or target name).
原因: 存储设备正在报告未正确指定启动器或目标名称。
解决方法: 请正确指定iSCSI 启动器或目标名称。
16iscsi connection(OID) login failed - Target hardware or software error.
原因: 存储设备遇到硬件或软件错误。
解决方法: 请查阅存储文档或与存储设备供应商联系以获得进一步的帮助。
17iscsi connection(OID) login failed - iSCSI service or target is not currently operational.
原因: 存储设备当前无法运行。
解决方法: 请查阅存储文档或与存储设备供应商联系以获得进一步的帮助。
18iscsi connection(OID) login failed - Target has insufficient session, connection or other resources.
原因: 存储设备具有的资源不足。
解决方法: 请查阅存储文档或与存储设备供应商联系以获得进一步的帮助。
19iscsi connection(OID) login failed - unable to initialize authentication
iscsi connection( OID) login failed - unable to set authentication iscsi connection(OID) login failed - unable to set username
iscsi connection(OID) login failed - unable to set password
iscsi connection(OID) login failed - unable to set ipsec
iscsi connection(OID) login failed - unable to set remote authentication
原因: 该启动器无法正确初始化或设置验证。
解决方法: 验证是否已正确配置启动器的验证设置。
20iscsi connection(OID) login failed - unable to make login pdu
原因: 启动器无法根据启动器或存储设备的设置生成登录有效负荷数据单元(payload data unit, PDU)。
解决方法: 请尝试重置所有目标登录参数或其他非缺省设置。
21iscsi connection(OID) login failed - failed to transfer login
iscsi connection(OID) login failed - failed to receive login response 原因: 启动器无法通过网络连接传输或接收登录有效负荷数据单元(payload data unit, PDU)。
解决方法: 验证网络连接是否可以访问。
22iscsi connection(OID) login failed - received invalid login response (OP CODE)
原因: 存储设备采用非预期响应来响应登录。
23iscsi connection(OID) login failed - login failed to authenticate with target
原因: 启动器无法验证存储设备。
解决方法: 验证是否已正确配置启动器的验证设置。
24iscsi connection(OID) login failed - initiator name is required
原因: 必须配置启动器名称才能执行所有操作。
解决方法: 验证是否已配置启动器名称。
25iscsi connection(OID) login failed - authentication receive failed iscsi connection(OID) login failed - authentication transmit failed
原因: 该启动器无法传输或接收验证信息。
解决方法: 根据情况验证存储设备或RADIUS 服务器的网络连接。
26iscsi connection(OID) login failed - login redirection invalid
原因: 存储设备尝试将启动器重定向到无效目标。
解决方法: 请查阅存储文档或与存储设备供应商联系以获得进一步的帮助。
27iscsi connection(OID) login failed - target protocol group tag mismatch, expected
原因: 启动器和目标的TPGT(target portal group tag,目标门户组标记)不匹配。
解决方法: 请验证启动器或存储设备上的TPGT 搜索设置。
28iscsi connection(OID) login failed - can't accept PARAMETER in security stage
原因: 设备已在登录安全阶段使用不支持的登录参数进行了响应。
解决方法: 请记录参数名称以供参考。请查阅存储文档或与存储设备供应商联系以获得进一步的帮助。
29iscsi connection(OID) login failed - HeaderDigest=CRC32 is
required, can't accept VALUE
iscsi connection(OID) login failed - DataDigest=CRC32 is required, can't accept VALUE
原因: 对于此目标,该启动器已配置为仅接受将HeaderDigest 或DataDigest 设置为CRC32 的情况。设备返回值VALUE。
解决方法: 验证启动器和设备摘要设置兼容。
30iscsi connection(OID) login failed - HeaderDigest=None is required, can't accept VALUE
iscsi connection(OID) login failed - DataDigest=None is required, can't accept VALUE
原因: 对于此目标,该启动器已配置为只接受将HeaderDigest 或DataDigest 设置为NONE 的情况。设备返回值VALUE。
解决方法: 验证启动器和设备摘要设置兼容。
31iscsi connection(OID) login failed - can't accept PARAMETER
原因: 启动器不支持此参数。
32iscsi connection(OID) login failed - can't accept MaxOutstandingR2T VALUE
原因: 该启动器不接受MaxOutstandingR2T 值为所记录VALUE 的情况。
33iscsi connection(OID) login failed - can't accept MaxConnections
VALUE
原因: 该启动器不接受最大连接数为所记录VALUE 的情况。
34iscsi connection(OID) login failed - can't accept ErrorRecoveryLevel VALUE
原因: 该启动器不接受错误恢复级别值为所记录VALUE 的情况。
35iscsi session(OID) NAME offline
原因: 此目标NAME 的所有连接都已删除或失败。
36iscsi connection(OID) failure - unable to schedule enumeration
原因: 启动器无法枚举此目标上的LUN。
解决方法: 可以通过运行devfsadm -i iscsi 命令来强制执行LUN 枚举。有关更多信息,请参见devfsadm(1M)。
37iscsi connection(OID) unable to connect to target NAME (errno:ERRNO )
原因: 启动器无法建立网络连接。
解决方法: 有关连接故障的特定ERRNO 的信息,请参见/usr/include/sys/errno.h 文件。
3linux iscsi 配置过程详解(未整理)
1 指定连接iSCSI的前兆网口IP, 与IP-SAN的端口同一网段,例如192.168.70.201,确
保能够ping通。
2 安装iscsi-initiator ,一般linux操作系统自带。
3 修改配置文件/etc/iscsi/iscsid.conf
node.startup=auto
node.session.iscsi.InitialR2T=Yes
node.session.iscsi.ImmediateData=No
node.session.timeo.replacement_timeout=60
4 修改主机名/etc/iscsi/initiatorname.iscsi
格式为InitiatorName=iqn.xxxx
5 将iSCSI 服务的运行级别设置为在重新启动和关闭时自动启动
chkconfig --level 35 iscsid on
6 重启iSCSI服务
/etc/init.d/iscsi stop
/etc/init.d/iscsi start
或
service iscsi stop
service iscsi start
查询服务运行状态service iscsi status
7 查找希望将服务器连接的目标
iscsiadm -m discovery -t st -p target_ip_address
登陆到目标
iscsiadm -m node -L all 记录登陆上的端口名称以后要用
8 在个人电脑上安装JAVA虚拟机,打开浏览器登陆http://192.168.2.154
用户名:admin 密码: password
查看连接,注册连接用户主机
建建立lun
建立存储群,选择主机和lun
重启iSCSI服务就会看到分区
8 对发现的磁盘分区创建文件系统mkfs.ext3 /dev/sdb
用tune2fs修改文件系统的属性,去掉自动检查的属性tune2fs -c -1 -i 0 /dev/sdb (Linux上的ext3文件系统有一个特性,对某个分区mount、umount很多次后或者隔一个固定的时间后,
系统会对该分区进行检测,这就会导致硬盘反映速度很慢,影响业务,本操作的目的就是去掉文件系统自动检查的属性。)
mkdir /data
mount /dev/sdb /data
9 设置开机自动加载分区
iscsiadm -m node –T PORT-NAME –p PORT-IP --op update -n node.startup -v automatic
IP-SAN端口名称在登陆目标的时候能看到。
10 设置开机自动加载文件系统
在/etc/fstab中添加
/dev/sdb /data ext3 _netdev 0 0
但是,Linux系统重启后,磁盘设备的名称可能会发生飘移,从而引起文件系统不能挂载上来或者不能正确挂载,
使用UUID的方式进行挂载可以解决这个问题
命令tune2fs -l /dev/sdb可以查到文件系统的UUID
在/etc/fstab中添加
UUID=xxxxxxx /data ext3 _netdev 0 0 替换掉原来的那行
11 搞定,这样每次重启系统就可以看到自动挂载好的文件系统,使用跟本地磁盘一样。