分类: LINUX
2008-05-04 22:30:08
本文介绍了iSCSI的概念,结构以及在Turbolinux上配置iSCSI Initiator的方法。
iSCSI协议是一个Internet草案标准,用来定义在TCP/IP协议上传送SCSI命令和数据,该技术允许用户通过TCP/IP网络来构建存储区域网(SAN). iSCSI技术的出现使得以局域网为网络环境的用户,能够以不多的投资,就可以方便、快捷地对信息和数据进行交互式传输和管理。相对于以往的网络接入存储,iSCSI的出现解决了开放性、容量、传输速度、兼容性、安全性等问题. iSCSI在IP存储环境中能够提供以下方案:
1.1 为存储区域网络(SAN)提供一种低价位的传输模式
1.2 为中端服务器提供了良好的存储解决方案
1.3 结合存储管理解决方案,iSCSI能提供容灾、备份和中级存储解决方案。
就像将SCSI命令映射到光纤通道、并行SCSI和SSA介质上一样,在服务器端安装iSCSI设备驱动器,接收应用程序的I/O请求,再使用iSCSI协议将它们在LAN上传输。目标器存储设备可以直接附着于LAN,也可以使用路由器(协议,转换器)来连接到LAN。第二种方法中,在LAN的另一端存在一个光纤通道端口,可以连接到一个支持光纤通道附件的存储设备。这种方案允许不带有iSCSI端的存储产品通过iSCSI协议被访问到,也允许服务器在没有光纤通道主机总线适配卡的情况下访问设备。与其它解决方案相比,iSCSI有一下一些优点:
2.1.可连接性:在NAS和SAN连接到设备时可以使用iSCSI。iSCSI设备可放于现有的包含多种应用的LAN上,或专用于存储I/O的LAN上,或只连接到一个处理器(DAS)的LAN上
2.2.介质:iSCSI附着于IP网络,与单纯的光纤通道SAN比较起来,可以支持更长的传输距离。
2.3.I/O协议:iSCSI使用SCSI I/O协议,因此它是基于块的I/O,避免了不合适数据库或者其它不使用文件协议的应用的尴尬。可连接多个独立的网络,可使用一般的交换机,不像光纤通道那样要特定的交换机。
2.4.管理:iSCSI的管理与其它直接附着的SCSI设备的管理是一样的。从处理器的角度看,连接到iSCSI的磁盘卷是可见的。任何支持附着于SCSI卷的数据备份方法对于iSCSI同样是可行的。与光纤通道SAN相比,iSCSI可以利用已经促步完善的网络管理工具和人力技能的优势。
2.5.性能:同样基于Ethernet,iSCSI的性能要优于NAS,因为它直接对SCSI设备进行操作,而不需要在文件I/O协议和SCSI协议之间进行转换。速度可以达到10Gigabit. 在I/O操作频繁的情况下,iSCSI的优势尤其明显。
2.6.费用:一般而言,同样情况下,一个iSCSI SAN的费用要低于光纤通道SAN的费用,从硬件角度看,以太网主机适配器一般要比光纤通道主机适配器便宜,如果iSCSI直接附着与SAN,那就根本不需要新的主机适配卡了。iSCSI SAN的建立要比光纤通道SAN的建立快,所需的新技术也少一些。由于不需要支持文件系统、文件共享协议和其它集成到NAS产品中的应用,同等条件下,iSCSI盘设备要比一个NAS设备便宜。
iSCSI协议就是一个在网络上封包和解包的过程,在网络的一端,数据包被封装成包括TCP/IP头、iSCSI识别包和SCSI数据三部分内容,传输到网络另一端时,这三部分内容分别被顺序地解开。 iSCSI系统由一块SCSI卡发出一个SCSI命令,命令被封装到第四层的信息包中并发送。接收方从信息包中抽取SCSI命令并执行,然后把返回的SCSI命令和数据封装到IP信息包中,并将它们发回到发送方。系统抽取数据或命令,并把它们传回SCSI子系统。所有这一切的完成都无需用户干预,而且对终端用户是完全透明的。 为了保证安全,iSCSI有自己的上网登录操作顺序。在它们首次运行的时候,启动器(initiator)设备将登录到目标设备中。任何一个接收到没有执行登录过程的启动器的iSCSI PDU(iSCSI Protocol Data Units,iSCSI协议数据单元)目标设备都将生成一个协议错误,而且目标设备也会关闭连接。在关闭会话之前,目标设备可能发送回一个被驳回的iSCSI PDU。这种安全性是基本的,因为它只保护了通信的启动,却没有在每个信息包的基础上提供安全性。还有其他的安全方法,包括利用IPsec。在控制和数据两种信息包中,IPsec可以提供整体性,实施再次(replay)保护和确认证明,它也为各个信息包提供加密。
下图为iSCSI的结构(同FC结构对比):
iSCSI Access To Storage | SCSI or FC Access to Storage ==================================================================== | Host applications | Host applications | =======|===========|===============================|================ | | | | | +------------+ | | | | SCSI | | | | | driver | | | | +------------+ | +-----------+ | | iSCSI | | | | | | driver | | | SCSI | +---------+------------+ | | or FC | | TCP/IP | | | adapter | +----------------------+ | | driver | | Network drivers | | | | +----------------------+ | +-----------+ | | | =============|=====================================|================ | | | +-----------+ | +-----------+ | NIC | | | HBA | +-----------+ | +-----------+ | | | =============|=====================================|================ _|_ | _|_ _( )_ | _( )_ _( IP )_ | _( FC )_ (_ network _) | (_ or SCSI _) (_ _) | (_ _) (_ _) | (_ _) | | | +------------------+ | | | Storage Router | | | | or Gateway | | | +------------------+ | | | | | +------------------+ | +------------------+ | Storage | | | Storage | +------------------+ | +------------------+ | (___)(___)(___) | | | (___)(___)(___) | | (___)(___)(___) | | | (___)(___)(___) | | (___)(___)(___) | | | (___)(___)(___) | | (___)(___)(___) | | | (___)(___)(___) | +------------------+ | +------------------+ | ====================================================================
软件iSCSI initiator提供了最低价位的iSCSI解决方案。纯粹用软件来实现的iSCSI initiator使用标准的以太网网卡或者是TCP offload Engine(TOE)网卡,用来处理iSCSI指令和TCP/IP协议。对于使用2GHz CPU的工作站或者服务器来说,iSCSI协议在处理一般的客户工作量时并不会对系统产生明显的负荷. Turbolinux从其Enterprise Server 10 SP3 (GTES10 SP3)开始支持这种软件iSCSI启动器。下面是其设置步骤。
4.1 安装
Turbolinux 的 GTES10 SP3的内核已经支持iSCSI协议,另外还提供了用户空间的启动器(Initiator)。 查看驱动信息:
# modinfo iscsi_sfnet filename: /lib/modules/2.6.9-8.11/kernel/drivers/scsi/iscsi_sfnet/iscsi_sfnet.ko author: Mike Christie and Cisco Systems, Inc. description: iSCSI initiator license: GPL version: 4:0.1.11-2 E6AAD04693D3E28B3E87155 vermagic: 2.6.9-8.11 686 REGPARM 4KSTACKS gcc-3.4 depends: scsi_transport_iscsi,scsi_mod
查看initiator的安装信息:
# rpm -qi iscsi-initiator-utils Name : iscsi-initiator-utils Relocations: (not relocatable) Version : 4.0.3.0 Vendor: (none) Release : 3 Build Date: Tue 11 Jul 2006 03:57:33 PM CST Install Date: Mon 30 Oct 2006 10:22:26 AM CST Build Host: antonfang.turbolinux.com.cn Group : System Environment/Daemons Source RPM: iscsi-initiator-utils-4.0.3.0-3.src.rpm Size : 204881 License: GPL Signature : (none) URL : Summary : iSCSI daemon and utility programs Description : The iscsi package provides the server daemon for the iSCSI protocol, as well as the utility programs used to manage it. iSCSI is a protocol for distributed disk access using SCSI commands sent over Internet Protocol networks.
如果iscsi-initiator-utils没有安装,请从光盘安装该工具:
# rpm -ivh iscsi-initiator-utils-4.0.3.0-3.i386.rpm
4.2 配置
iSCSI的配置文件为/etc/iscsi.conf, 里面已经给出了很多配置选项,默认都是被注释的,在使用时, 至少需要启用以下设置:
DiscoveryAddress=
这是UIT Array的组IP
SendAsyncText=yes
让initiator接收目标端的vendor相关事件.
Continuous=yes
设置discovery sessions始终保持打开
当iscsi.conf配置好后,就可以启动iscsi服务了:
# chkconfig iscsi on # /etc/init.d/iscsi start
4.3 使用
服务启动后使用iscsi-ls查看信息:
# iscsi-ls -l ******************************************************************************* SFNet iSCSI Driver Version ...4:0.1.11(12-Jan-2005) ******************************************************************************* TARGET NAME : iqn.2001-05.com.UIT:6-8a0900-148270001-987006efd6c43836-pat-gtes10-vol2 TARGET ALIAS : pat-gtes10-vol2 HOST NO : 1 BUS NO : 0 TARGET ID : 5 TARGET ADDRESS : 172.19.50.13:3260 SESSION STATUS : ESTABLISHED AT Thu Dec 1 15:51:49 2005 NO. OF PORTALS : 1 PORTAL ADDRESS 1 : 172.19.50.10:3260,0 SESSION ID : ISID 00023d000001 TSIH 06 DEVICE DETAILS : ————– LUN ID : 0 Vendor: EQLOGIC Model: 100E-00 Rev: 2.1 Type: Direct-Access ANSI SCSI revision: 05 page83 type3: 0690a018007082143638c4d6ef067098 page80: 3036393041303138303037303832313433363338433444364546303637303938 Device: /dev/sdc ************************************************************************
从最后一行输出可以看出,识别到的设备被映射为/dev/sdc.
接下来就可以象操作一个普通的scsi磁盘一样操作sdc这个设备了,比如对其进行分区,格式化等. 要注意的是当要求系统自动挂载基于iSCSI设备的文件系统时,建议使用_netdev参数,它会保证文件系统在网络启动之后被挂载,当网络服务被停止时,先自动卸载这些文件系统.
# echo "/dev/sdc1 /mnt/t1 ext3 _netdev,defaults 0 0" >> /etc/fstab