RH436第二章笔记
概述
ISCSI : internel small system computer interface ,是基于TCP/IP网络 的存储技术,它利用TCP/IP网络来存储scsi命令,本身因为TCP/IP的特性,因此会架构便宜(IP 网络设备价格远比存储网络的价格要低),可以从LAN扩展到WAN上面
IP-SAN是作为存储区域网络的一种便宜的方案,但通常我们建议是将IP-SAN 建立在一个单独隔离的网络上,而不是和平常的业务网络一起用(存储网络与业务网络分离)
iscsi协议本身不加密,只是在发起连接的时候有CHAP认证(包括单向认证和双向认证),在互联网上传送并不安全,因此较少用在互联网上,通常是作为一个单独的存储网络使用,另外也可以使用LUKS linux unified key setup磁盘加密,这样保证数据在传送过程中加密,但协议本身是没有保护的 ,也可以让ipsec协议保护,因为ipsec本身有认证和加密的功能
冗余:
可以用网卡绑定或者多径来保证存储访问的高可用性
注意:bonding只是保证网卡到它连接的设备(通常是交换机)的高可用,但是多径技术 (multi-path)是保证端到端的冗余,因此多径技术更高级。
iscsi相对于NFS 或者DAS HDD的好处在于
1 : 对于DAS而言,服务器坏了,硬盘没坏,也不能访问了
iscsi磁盘还是可以让其他客户端访问的
2: NFS而言,扩容不容易
iscsi target 可以1个,2个,3个,直接扩容,创建物理卷,将物理卷加入现存卷组,扩容逻辑卷,创建文件系统,加挂,但nfs有难度
3: 要求网络存储,提供给多台主机同时访问,如集群环境
iscsi协议
理解ISCSI协议重点是理解封装的概念,SCSI命令通过 iscis协议封装后在TCP/IP网络上传送,因此需要CPU资源来处理报文头的封装与解封装(也有专用的iscsiHBA卡,不过价格较贵罢了)
iSCSI术语
IQN: iSCSI Qualified Name :用来识别iSCSI通信的服务端和客户端,格式是
iqn.yyyy-mm.com.reverse.domain:optional-extra-name
如主机名为instructor.example.com。第一个分享的LV空间可以是
iqn.2013-10.com.example.instructor:lv1-my-first-lv
可选部分(含前面的冒号)加上可以用于区分多个分享的设备,如有多个lv要分享的时候
target :iSCSI服务端叫target,target 分享LUN,logical unit ,一台服务器可以分享一个或者多个LUN
initiator:iSCSI客户端叫initiator,可以由软硬件实现,通常软件实现的较多(省钱)
node: iSCSI服务端,iSCSI客户端都叫node
Portal :在iSCSI中,Portal是一个target或者initiator的IP,用于建立连接
iSNS: internet storage name service ,一个命名服务,用来让initiator发现target,较少使用
iscsi实验
服务器端设置
1: 安装软件包,在这里是scsi-target-utils
2: 创建共享的逻辑卷
3: 配置targets.conf文件
4: 启用tgtd服务
5: 验证
[root@desktop8 ~]# rpm -ql scsi-target-utils
/etc/rc.d/init.d/tgtd
/etc/sysconfig/tgtd
/etc/tgt/targets.conf
/usr/sbin/tgt-admin
/usr/sbin/tgt-setup-lun
/usr/sbin/tgtadm
/usr/sbin/tgtd
/usr/sbin/tgtimg
/usr/share/doc/scsi-target-utils-1.0.14
/usr/share/doc/scsi-target-utils-1.0.14/README
/usr/share/doc/scsi-target-utils-1.0.14/README.iscsi
/usr/share/doc/scsi-target-utils-1.0.14/README.iser
/usr/share/doc/scsi-target-utils-1.0.14/README.lu_configuration
/usr/share/doc/scsi-target-utils-1.0.14/README.mmc
/usr/share/man/man8/tgt-admin.8.gz
/usr/share/man/man8/tgt-setup-lun.8.gz
/usr/share/man/man8/tgtadm.8.gz
[root@desktop8 ~]#
[root@desktop8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_desktop8 1 3 0 wz--n- 464.24g 155.52g
[root@desktop8 ~]# lvcreate -n myiscsi -L 4G vg_desktop8
Logical volume "myiscsi" created
[root@desktop8 ~]# grep -v '#' /etc/tgt/targets.conf | grep -v ^$
default-driver iscsi
backing-store /dev/mapper/vg_desktop8-myiscsi
scsi_sn desktop8_iscsi_share_myiscsi
scsi_id 20130212000001
initiator-address 172.18.8.0/24
initiator-address 172.19.8.0/24
[root@desktop8 ~]# chkconfig tgtd on
[root@desktop8 ~]# service tgtd start
Starting SCSI target daemon: [ OK ]
[root@desktop8 ~]#
[root@desktop8 ~]# chkconfig tgtd --list
tgtd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@desktop8 ~]# tgt-admin -s
Target 1: iqn.2014-02.com.example:server.myiscsi
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
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: 20130212000001
SCSI SN: desktop8_iscsi_share_myiscsi
Size: 4295 MB, Block size: 512
Online: Yes
Removable media: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/mapper/vg_desktop8-myiscsi
Backing store flags:
Account information:
ACL information:
172.18.8.0/24
172.19.8.0/24
[root@desktop8 ~]#
iscsi 客户端配置
1: 安装iscsi客户端 iscsi-initiator-utils
2: 配置iscsi的客户端IQN名称
3: 发现targets
4: 连接targets
5: 检查 iscsi/iscsid服务
[root@node2 ~]# rpm -qa | grep iscsi
iscsi-initiator-utils-6.2.0.872-34.el6.x86_64
[root@node2 ~]# echo "InitiatorName=iqn.2014-02.com.example.node1:node1" >/etc/iscsi/initiatorname.iscsi
[root@node2 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.18.8.254 --discover
Starting iscsid: [ OK ]
172.18.8.254:3260,1 iqn.2014-02.com.example:server.myiscsi
[root@node2 ~]# iscsiadm --mode node --targetname iqn.2014-02.com.example:server.myiscsi --portal 172.18.8.254:3260 --login
Logging in to [iface: default, target: iqn.2014-02.com.example:server.myiscsi, portal: 172.18.8.254,3260] (multiple)
Login to [iface: default, target: iqn.2014-02.com.example:server.myiscsi, portal: 172.18.8.254,3260] successful.
[root@node2 ~]# chkconfig --list iscsi
iscsi 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@node2 ~]# chkconfig --list iscsid
iscsid 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@node2 ~]#
其他内容补充
tgtadm是一个低层与tgtd服务交互的接口,使用可能没有这么方便
tgt-admin是一个加了売的,更加友好的工具
注意:tgtadm/tgt-admin是与tgtd交互的工具,因此运行这两个命令的前提是让tgtd 先跑起来
tgtd在启动的时候会读取/etc/tgt/targets.conf文件,因此以后的改动需要重启这个tgtd服务
tgt-admin --dump >/root/mytarget.conf
上面的命令将导出当前的运行配置文件(如果/etc/tgt/targets.conf文件有改动,则会与运行的配置不一样),同时这个命令会将额外的注释去掉呵!(通常是个人在共享LUN中注明的一些辅助信息,如共享给谁,大小,等注释信息)
要让target永久生效,要写入配置文件 /etc/tgt/targets.conf文件
很多时候,直接参考默认配置文件,再将里面的内容复制,修改即可
修改后需要重启tgtd服务才能生效,但是如果这个时候有target是在使用的,这个时候重启会失败,
重启失败可以用force-restart参数,但会导致断开原来的iscsi连接
也可以用tgt-admin -e来命令来使用新的target生效,但不是针对原有的target更新生效
更新需要用 tgt-admin -u 来执行,target可以用ALL代替,如果有client连接的话可以加force参数,但可能会导致末知行为
[root@instructor436 ~]# rpm --scripts -q iscsi-initiator-utils
postinstall scriptlet (using /bin/sh):
/sbin/ldconfig
if [ "$1" -eq "1" ]; then
if [ ! -f /etc/iscsi/initiatorname.iscsi ]; then
echo "InitiatorName=`/sbin/iscsi-iname`" > /etc/iscsi/initiatorname.iscsi
fi
/sbin/chkconfig --add iscsid
/sbin/chkconfig --add iscsi
fi
preuninstall scriptlet (using /bin/sh):
if [ "$1" = "0" ]; then
# stop iscsi
/sbin/service iscsi stop > /dev/null 2>&1
# delete service
/sbin/chkconfig --del iscsi
# stop iscsid
/sbin/service iscsid stop > /dev/null 2>&1
# delete service
/sbin/chkconfig --del iscsid
fi
postuninstall program: /sbin/ldconfig
首先要改IQN 名称,/etc/iscsi/initiatorname.iscsi中修改
修改/etc/iscsi/iscsid.conf文件,修改里面的超时参数,自动登录login与否,数据块大小等,这些参数作为默认会在 discovery阶段用到
重启iscsi服务 (注意应该是开机启动的服务呵)
target的发现,发现的信息会保存在/var/lib/iscsi/nodes中
三条用来诊断的命令
[root@instructor436 ~]# iscsiadm -m discovery
[root@instructor436 ~]# iscsiadm -m node
[root@instructor436 ~]# iscsiadm -m session
tcpdump -i eth1 tcp port 3260 and src 10.10.213.6 ===过滤ISCSI报文
man iscsiadm可以查看下面的常用命令,不需要背这些命令呵
Discover targets at a given IP address:
iscsiadm --mode discoverydb --type sendtargets --portal 192.168.1.10 --discover
Login, must use a node record id found by the discovery:
iscsiadm --mode node --targetname iqn.2001-05.com.doe:test --portal 192.168.1.1:3260 --login
Logout:
iscsiadm --mode node --targetname iqn.2001-05.com.doe:test --portal 192.168.1.1:3260 --logout
List node records:
iscsiadm --mode node
Display all data for a given node record:
iscsiadm --mode node --targetname iqn.2001-05.com.doe:test --portal 192.168.1.1:3260
常见的问题
1: 要看/var/log/message信息
[root@node1 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.18.8.254 --discover
172.18.8.254:3260,1 iqn.2014-02.com.example:server.myiscsi
Feb 12 07:17:33 node1 iscsid: Warning: InitiatorName file /etc/iscsi/initiatorname.iscsi does not exist or does not contain a properly formated InitiatorName. If using software iscsi (iscsi_tcp or ib_iser) or partial offload (bnx2i or cxgbi iscsi), you may not be able to log into or d
[root@node1 ~]#
2: 提示非法iqn名称,但是iqn名称正常是什么原因,请尝试手动打开iscsi/iscsid服务,可以解决
[root@node1 ~]# iscsiadm --mode discovery --type sendtargets --portal 172.18.8.254
iscsiadm: Cannot perform discovery. Invalid Initiatorname.
iscsiadm: Could not perform SendTargets discovery: invalid parameter
[root@node1 ~]# iscsiadm -m discovery -t st -p 172.18.8.254
iscsiadm: Cannot perform discovery. Invalid Initiatorname.
iscsiadm: Could not perform SendTargets discovery: invalid parameter
[root@node1 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:af4e17c14493
[root@node1 ~]# service iscsi stop
Stopping iscsi: [ OK ]
[root@node1 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:af4e17c14493
[root@node1 ~]# iscsiadm -m discovery -t st -p 172.18.8.254
iscsiadm: Cannot perform discovery. Invalid Initiatorname.
iscsiadm: Could not perform SendTargets discovery: invalid parameter
[root@node1 ~]# service iscsid restart
Stopping iscsid:
Starting iscsid: [ OK ]
[root@node1 ~]# iscsiadm -m discovery -t st -p 172.18.8.254
172.18.8.254:3260,1 iqn.2014-02.com.example:server.myiscsi
[root@node1 ~]# service iscsid stop
Stopping iscsid:
[root@node1 ~]# [ OK ]
[root@node1 ~]#
[root@node1 ~]# service iscsi stop
Stopping iscsi: [ OK ]
[root@node1 ~]# iscsiadm -m discovery -t st -p 172.18.8.254
Starting iscsid: [ OK ]
172.18.8.254:3260,1 iqn.2014-02.com.example:server.myiscsi
[root@node1 ~]#