标签:iscsi
一、常见的存储类型
目前磁盘存储市场上,存储分类(如下表一)根据服务器类型分为:封闭系统的存储和开放系统的存储,封闭系统主要指大型机,AS400等服务器,开放系统指基于包括Windows、UNIX、Linux等操作系统的服务器;开放系统的存储分为:内置存储和外挂存储;开放系统的外挂存储根据连接的方式分为:直连式存储(Direct-Attached Storage,简称DAS)和网络化存储(Fabric-Attached Storage,简称FAS);开放系统的网络化存储根据传输协议又分为:网络接入存储(Network-Attached Storage,简称NAS)和存储区域网络(Storage Area Network,简称SAN)。
1、 DAS
直接连接存储 (DAS:Direct Attached Storage),是指将存储设备通过SCSI接口或FC接口直接连接到一台计算机上。DAS不算是网络存储,因为只有它所挂载的主机才可访问它。也就是说,服务器发生故障时,连接在服务器上的DAS存储设备中的数据暂时不能被存取。
DAS存储在中小企业应用中使用不少,因为廉价成本较低,存储系统被直连到应用的服务器中,在中小企业中,许多的数据应用是必须安
装在直连的DAS存储器上。
2、NAS
网络连接存储 (NAS:Network Attached Storage),是指将存储设备通过标准的网络拓扑结构(例如以太网),连接到一群计算机上。NAS有文件系统和IP地址,可以类似的理解为网上邻居的共享磁盘。NAS是文件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。如今用户采用NAS较多的功能是用来文档共享、图片共享、电影共享等等,而且随着云计算的发展,一些NAS厂商也推出了云存储功能,大大方便了企业和个人用户的使用。
3、SAN
存储区域网络(SAN:Storage Area Network),目前的SAN存储有2种:一是基于光纤通道的FC SAN;二是基于以太网的IP SAN(也就常说的iSCSI)。 FC SAN通过光纤交换机连接到主机(HBA卡),也就是说可以连接到光纤交换机的主机都可以访问这个存储; iSCSI作为共享于以太网络上的存储则更类似于NAS。
4、三种存储的主要区别
DAS :可作为本机的外挂硬盘,不过现在单块磁盘的空间已经很大,如果几个T的空间,直接在主机里插硬盘就可以实现了,不需要外挂。
NAS :由于它的文件系统特性,加上以太网网线传输,更像是我的电脑-网上邻居-共享磁盘,访问方式也是类似:\NAS01BACKUPdatabase_name.bak。更多的是作为文件共享、备份、归档所用,比如数据库的历史备份/异地备份文件。
SAN:FC SAN使用光纤传输,是一个高速的共享存储,数据库的任何东西都可以放在上面,还有就是在做集群时(failover clustering) 作为仲裁盘,合适做虚拟化项目和性能要求高的数据库存储;iSCSI的传输速率要低于FC SAN,目前在我们的环境中还没有直接使用iSCSI做数据库存储,通常是用在类似NAS的地方。
总结:DAS存储一般应用在中小企业,与计算机采用直连方式,性能与成本最低;NAS存储则通过IP以太网添加到计算机上,性能与成本中等;SAN存储则使用FC光纤接口,性能与成本较高。SAN与NAS的主要区别体现在操作系统在什么位置。如下图所示:
二、iSCSI
1、简介
2003 年 2 月 11 日, IETF( Internet Engineering Task Force,互联网工程任务组)通 过了 iSCSI( Internet SCSI)标准,这项由 IBM、 Cisco 共同发起的技术标准,经过三年 20 个版本的不断完善,终于得到了 IETF 认可。这吸引了很多的厂商参与到相关产品的开发中 来,也推动了更多的用户采用 iSCSI 的解决方案。
iSCSI ,全称: Internet Small Computer System Interface,它是通过 TCP/IP 网络传 输 SCSI 指令的协议。 iSCSI 协议参照 SAM-3( SCSI Architecture Model – 3)制订。在 SAM-3 的体系结构, iSCSI 属于传输层协议,在 TCP/IP 模型中属于应用层协议。
2、SCSI 协议栈描述
iSCSI 是集成了 SCSI 协议和 TCP/IP 协议的新的协议。它是在 SCSI 基础上扩展了网 络功能,也就是可以让 SCSI 命令通过网络传送到远程 SCSI 设备上,而 SCSI 协议只能访 问本地的 SCSI 设备。
iSCSI 是传输层之上的协议,使用 TCP 连接建立会话。在 initiator 端的 TCP 端口号随 机选取, target 的端口号默认是 3260。
iSCSI 使用客户/服务器模型。客户端称为 initiator,服务器端称为 target。
Initiator:通常指用户主机系统,用户产生 SCSI 请求,并将 SCSI 命令和数据封装到 TCP/IP 包中发送到 IP 网络中。
Target:通常存在于存储设备上,用于转换 TCP/IP 包中的 SCSI 命令和数据。
3、iSCSI 名字规范
iSCSI 协议中, initiator 和 target 是通过名字进行通信的,因此,每一个 iSCSI 节 点(即 initiator)必须拥有一个 iSCSI 名字。
iSCSI 协议定义了 3 类名称结构:
iqn( iSCSI Qualified Name) 格式是:“ iqn” +“年月” +“ .” +“域名的颠倒” +“ :” +“设备的具体 名称”,之所以颠倒域名是为了避免可能的冲突。
举例: iqn.2008-07.com.h3c.rd:test
eui( Extend Unique Identifier) eui 来源与 IEEE 中的 EUI,格式是: “ eui” + “ 64bits 的唯一标识( 16 个字母)”。 64bits 中,前 24bits( 6 个字母)是公司的唯一标识,后面 40bits ( 10 个字母)是设备的标识。
举例: eui.acde48234667abcd
naa( Network Address Authority) 由于 SAS 协议和 FC 协议都支持 naa, iSCSI 协议定义也支持这种名字结构。naa 的格式: “ naa” +“ 64bits( 16 个字母)或者 128bits( 32 个字母) 的唯一标识”。
举例: naa. 52004567BA64678D
naa. 62004567BA64678D0123456789ABCDEF
在实际使用过程中, iSCSI 节点名称可以不这么复杂。
三、搭建iSCSI
1、实验环境
2、建立所需要的新分区
[root@Director ~]# fdisk /dev/sdc [root@Director ~]# fdisk -l /dev/sdc[1-5] Disk /dev/sdc1: 8595 MB, 8595385344 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdc2: 8595 MB, 8595417600 bytes 255 heads, 63 sectors/track, 1045 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
3、安装iscsi服务端及配置
[root@Director ~]# yum install -y scsi-target-utils [root@Director ~]# service tgtd start 正在启动 SCSI target daemon: [确定] [root@Director ~]# ss -tunlp |grep tgtd tcp LISTEN 0 128 :::3260 :::* users:(("tgtd",1540,5),("tgtd",1543,5)) tcp LISTEN 0 128 *:3260 *:* users:(("tgtd",1540,4),("tgtd",1543,4)) [root@Director ~]# tgtadm -L iscsi -o new -m target -t 1 -T iqn.2015-09.com.example.testsan:1 [root@Director ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.0.0/16 [root@Director ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sdc1 [root@Director ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 2 -b /dev/sdc2 [root@Director ~]# tgtadm -L iscsi -o show -m target Target 1: iqn.2015-09.com.example.testsan:1 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: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 8595 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/sdc1 Backing store flags: LUN: 2 Type: disk SCSI ID: IET 00010002 SCSI SN: beaf12 Size: 8595 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/sdc2 Backing store flags: Account information: ACL information: 192.168.0.0/16
4、node1节点安装iscsi客户端及配置
[root@node1 ~]# yum install -y iscsi-initiator-utils [root@node1 ~]# echo "InitiatorName=`iscsi-iname -p iqn.2015-09.com.example`">/etc/iscsi/initiatorname.iscsi [root@node1 ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2015-09.com.example:c6a6b10bea5 [root@node1 ~]# echo "InitiatorAlias=initiatorone">>/etc/iscsi/initiatorname.iscsi [root@node1 ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2015-09.com.example:c6a6b10bea5 InitiatorAlias=initiatorone
启动服务:
[root@node1 ~]# service iscsi start [root@node1 ~]# service iscsid start [root@node1 ~]# chkconfig iscsi on [root@node1 ~]# chkconfig iscsid on
连接服务端:
[root@node1 ~]# iscsiadm -m discovery -t st -p 192.168.1.8 正在启动 iscsid: [确定] 192.168.1.8:3260,1 iqn.2015-09.com.example.testsan:1 [root@node1 ~]# iscsiadm -m node -T iqn.2015-09.com.example.testsan:1 -p 192.168.1.8 -l Logging in to [iface: default, target: iqn.2015-09.com.example.testsan:1, portal: 192.168.1.8,3260] (multiple) Login to [iface: default, target: iqn.2015-09.com.example.testsan:1, portal: 192.168.1.8,3260] successful.
5、将共享的磁盘进行分区格式化挂载使用
[root@node1 ~]# fdisk -l /dev/sd* Disk /dev/sdc: 8595 MB, 8595385344 bytes 64 heads, 32 sectors/track, 8197 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdd: 8595 MB, 8595417600 bytes 64 heads, 32 sectors/track, 8197 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 [root@node1 ~]# fdisk /dev/sdc [root@node1 ~]# mke2fs -t ext4 /dev/sdc1 [root@node1 ~]# mkdir /mnt/test [root@node1 ~]# mount /dev/sdc1 /mnt/test [root@node1 ~]# ls /mnt/test lost+found [root@node1 ~]# cp /etc/issue /mnt/test/ [root@node1 ~]# vim /mnt/test/issue test CentOS release 6.6 (Final) Kernel \r on an \m
6、node2节点安装iscsi客户端及配置
[root@node2 ~]# yum install -y iscsi-initiator-utils [root@node2 ~]# service iscsi start [root@node2 ~]# service iscsid start [root@node2 ~]# chkconfig iscsi on [root@node2 ~]# chkconfig iscsid on [root@node2 ~]# iscsiadm -m node -T iqn.2015-09.com.example.testsan:1 -p 192.168.1.8 -l Logging in to [iface: default, target: iqn.2015-09.com.example.testsan:1, portal: 192.168.1.8,3260] (multiple) Login to [iface: default, target: iqn.2015-09.com.example.testsan:1, portal: 192.168.1.8,3260] successful.
7、将共享的磁盘进行分区格式化挂载使用
[root@node2 ~]# fdisk -l /dev/sd* Disk /dev/sdc2: 3222 MB, 3222274048 bytes 64 heads, 32 sectors/track, 3073 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdd: 8595 MB, 8595417600 bytes 64 heads, 32 sectors/track, 8197 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 [root@node2 ~]# mount /dev/sdc1 /mnt/ [root@node2 ~]# echo "testtest">>/mnt/issue [root@node2 ~]# cat /mnt/issue test CentOS release 6.6 (Final) Kernel \r on an \m testtest
8、关于第一块磁盘分区是否能同时在两个节点上同时使用
[root@node1 ~]# umount /mnt/test/ [root@node1 ~]# mount /dev/sdc1 /mnt/test/ [root@node1 ~]# echo "aaaaaaaaaa">>/mnt/test/issue [root@node1 ~]# cat /mnt/test/issue test CentOS release 6.6 (Final) Kernel \r on an \m testtest aaaaaaaaaa [root@node2 ~]# umount /mnt/ [root@node2 ~]# mount /dev/sdc1 /mnt/ [root@node2 ~]# cat /mnt/issue test CentOS release 6.6 (Final) Kernel \r on an \m testtest aaaaaaaaaa
9、各节点删除刚才的配置
[root@node1 ~]# iscsiadm -m node -T iqn.2015-09.com.example.testsan:1 -p 192.168.1.8 -u Logging out of session [sid: 1, target: iqn.2015-09.com.example.testsan:1, portal: 192.168.1.8,3260] Logout of [sid: 1, target: iqn.2015-09.com.example.testsan:1, portal: 192.168.1.8,3260] successful. [root@node1 ~]# iscsiadm -m node -T iqn.2015-09.com.example.testsan:1 -p 192.168.1.8 -o delete [root@node1 ~]# rm -rf /var/lib/iscsi/*
10、服务端删除刚才的配置信息
[root@Director ~]# tgtadm -L iscsi -o unbind -m target -t 1 -I 192.168.0.0/16 [root@Director ~]# tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 2 [root@Director ~]# tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 1 [root@Director ~]# tgtadm -L iscsi -o show -m target Target 1: iqn.2015-09.com.example.testsan:1 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: Account information: ACL information: [root@Director ~]# tgtadm -L iscsi -o delete -m target -t 1 [root@Director ~]# tgtadm -L iscsi -o show -m target
11、使用配置文件进行配置服务端
[root@Director ~]# vim /etc/tgt/targets.conf <target iqn.2015-09.com.example.testsan2> backing-store /dev/sdc2 initiator-address 192.168.0.0/16 </target>s [root@Director ~]# service tgtd reload Updating SCSI target daemon configuration: [确定] [root@Director ~]# tgtadm -L iscsi -o show -m target Target 1: iqn.2015-09.com.example.testsan2 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: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 8595 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/sdc2 Backing store flags: Account information: ACL information: 192.168.0.0/16
四、tgtadm和iscsiadm常用选项说明
1、服务端配置管理工具tgtadm的使用
语法:tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...
添加一个新的 target 且其ID为 [id], 名字为 [name].
--lld [driver] --op new --mode target --tid=[id] --targetname [name]
显示所有或某个特定的target:
--lld [driver] --op show --mode target [--tid=[id]]
向某ID为[id]的设备上添加一个新的LUN,其号码为[lun],且此设备提供给initiator使用。[path]是某“块设备”的路径,此块设备也可以是raid或lvm设备。lun0已经被系统预留。
--lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]
删除ID为[id]的target:
--lld [driver] --op delete --mode target --tid=[id]
删除target [id]中的LUN [lun]:
--lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]
定义某target的基于主机的访问控制列表,其中,[address]表示允许访问此target的initiator客户端的列表:
--lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]
解除target [id]的访问控制列表中[address]的访问控制权限:
--lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]
例如:
(1)创建一个target:
# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2013-05.com.example:tsan.disk1
(2)显示所有:
# tgtadm --lld iscsi --op show --mode target
(3)显示刚创建的target:
# tgtadm --lld iscsi --op show --mode target --tid 1
(4)创建LUN,号码为1:
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5
(5)开放给192.168.0.0/24网络中的主机访问:
# tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.0.0/16
其中的-I相当于--initiator-address
(6)Create a new account:
# tgtadm --lld iscsi --op new --mode account --user christina --password 123456 # tgtadm --lld iscsi --op show --mode account
Assign this account to a target:
# tgtadm --lld iscsi --op bind --mode account --tid 1 --user christina # tgtadm --lld iscsi --op show --mode target
(7)Set up an outgoing account. First, you need to create a new account like the previous example
# tgtadm --lld iscsi --op new --mode account --user clyde --password 123456 # tgtadm --lld iscsi --op show --mode account # tgtadm --lld iscsi --op bind --mode account --tid 1 --user clyde --outgoing # tgtadm --lld iscsi --op show --mode target
2、iscsiadm工具的使用
iscsiadm是个模式化的工具,其模式可通过-m或--mode选项指定,常见的模式有discovery、node、fw、session、host、iface几个,如果没有额外指定其它选项,则discovery和node会显示其相关的所有记录;session用于显示所有的活动会话和连接,fw显示所有的启动固件值,host显示所有的iSCSI主机,iface显示/var/lib/iscsi/ifaces目录中的所有ifaces设定。
语法:iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] [ -I iface -t type -p ip:port [ -l ] ]
iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ]
-d, --debug=debug_level 显示debug信息,级别为0-8;
-l, --login
-t, --type=type 这里可以使用的类型为sendtargets(可简写为st)、slp、fw和 isns,此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个iSCSI target发送一个可用target列表给initiator;
-p, --portal=ip[:port] 指定target服务的IP和端口;
-m, --mode op 可用的mode有discovery, node, fw, host iface 和 session
-T, --targetname=targetname 用于指定target的名字
-u, --logout
-o, --op=OPEARTION:指定针对discoverydb数据库的操作,其仅能为new、delete、update、show和nonpersistent其中之一;
-I, --interface=[iface]:指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中;
五、基于用户认证搭建iSCSI
创建服务端谁所需要的帐号,并实现单方向的认证:
1、在target端创建帐号christina,并为其授予访问某tid的权限:
# tgtadm --lld iscsi --op new --mode account --user mageedu --password 123456
接下来还要将用户与某target进行绑定:
# tgtadm --lld iscsi --op bind --mode account --tid 1 --user test # tgtadm --lld iscsi --op show --mode account
2、编辑initiator端主配置文件,配置客户端登录target时使用此帐号和密码:
# vim /etc/iscsi/iscsid.conf
取消如下项的注释:
# node.session.auth.authmethod = CHAP # node.session.auth.username = username # node.session.auth.password = password
而后,将后两项的用户名密码设置为target端设置的用户名和密码:
node.session.auth.username = example node.session.auth.password = 123456
哪果此前尚未登录过此target,接下来直接发现并登入即可。否则,则需要按照下面的第三步实现认证的启用。
3、如果initiator端已经登录过此target,此时还需要先注销登录后重启iscsid服务,并在删除此前生成的database后重新发现target,并重新登入,过程如下:
# iscsiadm -m session -r sid -u # iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.1.8:3260 -u # iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.1.8:3260 -o delete # rm -rf -rf /var/lib/iscsi/send_targets/192.168.1.8,3260 # service iscsid restart # iscsiadm -m discovery -t sendtargets -p 192.168.1.8 # iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.1.8:3260 -l
说明:其中的target名字和target主机地址可能需要按照您的实际情况修改。
本文出自 “粗茶淡饭” 博客,请务必保留此出处http://cuchadanfan.blog.51cto.com/9940284/1696408
标签:iscsi
原文地址:http://cuchadanfan.blog.51cto.com/9940284/1696408