使用ISCSI构建网络存储

使用ISCSI构建网络存储

摘 要

架设iscsi服务器是为了能让QA人员在测试SAN的准备阶段能够更好的认识和了解iscsi
服务器的工作环境和工作原理以及target端和initiator端的相关命令操作,同时在测试SAN的过程中进行相关验证。本文讲解了在linux端构建iscsi服务器,在windows 2000/linux端构建iscsi客户端的相关知识和技术心得。读者阅读此文不但能充分理解iscsi的技术知识,了解iscsi_san,还能通过文章的讲解自己动手构建iscsi服务器和客户端,并成功的实现连接。

关 键 词

SAN:存储区域网络
NAS:网络附加存储
HBA:ISCSI主机适配器
IETF:互联网工程任务组
SCSI:小型计算机系统接口
BLOCK:数据块
FC:光纤通道
INITIATOR:客户端,在SAN架构中即为请求存储一方。
TARGET:服务端,在SAN架构中即为提供存储一方。
ISCSI:INTERNET SCSI或TCP/IP OVER SCSI,即把SCSI技术与INTERNET上应用

TCP/IP技术相结合,在IP网络上传输SCSI数据。
LUN:逻辑单元号
IPSEC:IP协议提供,实现的内容包括完整性、认证、机密性、保险单安全关联和秘鈅管理

1 相关工程背景简介和应用介绍
1.1 工程背景介绍

  2003年2月11日,IETF(Internet Engineering Task Force,互联网工程任务组)通过了ISCSI(Internet SCSI)标准,这项由IBM、Cisco共同发起的技术标准,经过三年20个版本的不断完善,终于得到IETF认可。这将吸引更多的厂商参与到相关产品的开发中,也会推动更多的用户采用ISCSI解决方案。作为早已被广泛传播的网络存储技术,很多读者都对这项技术耳熟能详。个人认为ISCSI技术最重要的贡献在于其对传统技术的继承和发展上:其一,SCSI(Small Computer Systems Interface,小型计算机系统接口)技术是被磁盘、磁带等设备广泛采用的存储标准,从1986年诞生起到现在仍然保持着良好的发展势头;其二,沿用TCP/IP协议,TCP/IP在网络方面是最通用、最成熟的协议,且IP网络的基础建设非常完善。这两点为ISCSI的无限扩展提供了夯实的基础。

ISCSI协议定义了在TCP/IP网络发送、接收block(数据块)级的存储数据的规则和方法。发送端将SCSI命令和数据封装到TCP/IP包中再通过网络转发,接收端收到TCP/IP包之后,将其还原为SCSI命令和数据并执行,完成之后将返回的SCSI命令和数据再封装到TCP/IP包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就象访问本地的SCSI设备一样简单。支持ISCSI技术的服务器和存储设备能够直接连接到现有的IP交换机和路由器上,因此ISCSI技术具有易于安装、成本低廉、不受地理限制、良好的互操作性、管理方便等优势。
在这里,介绍一个概念,即IP Storage(IP存储)。在ISCSI技术不断完善的过程中,这个概念也早已被推向市场。简单的说,IP存储就是基于IP网络来实现数据块级存储的方式。由于ISCSI技术的固有优势,IP存储更是让很多用户翘首以待,希望能够出现一种大而统一的方式,真正将存储规范化。

以电子商务为代表的各种网络服务业的飞速发展,对网络存储提出了更高的要求,并由此诞生了许多先进的网络存储技术。其中最有代表的是SAN,而尤为突出的是iSCSI SAN,即融入了基于网络的小型计算机标准接口的SAN。当前,电子商务的迅猛发展,对电子商务基础架构(网络设备,软件系统,存储系统)提出了越来越高的要求。电子商务既需要又生成海量数据,而这些不断扩展的海量数据又必须进行存储和管理,因此,电子商务企业必须要处理呈爆炸式增长的数据,并使这些数据可供分布在全球的雇员、客户和合作伙伴所使用。基于这种必然的需求,网络存储已被IT界所重视。

网络存储设备提供网络信息系统的信息存取和共享服务,具有超大存储容量、超高数据传输率及良好的系统性能等特征。网络数据和信息的急剧增加也必将带来网络存储服务市场的迅速增长,Forrester Research的调查表明,《财富》1000家企业2002年存储需求的增长率达到100%,有些公司甚至高达300%。作为电子商务企业,建立一个扩展性好、兼容性强、跨平台、管理方便、安全可靠的企业存储系统是其电子商务整体战略的重要组成部分。

1.SAN技术和NAS技术
在传统企业数据存储框架上,存储设备大都是依附在服务器后面的固定通道上,彼此无法作有效的联接。如果要存取服务器上的信息,则必须通过LAN连接,这样既占据了带宽,又浪费了服务器的CPU资源。管理分布的数据系统,也是一件耗费人力的过程。特别是由于不同产品和平台的不兼容性,使得企业需要聘请许多熟悉不同产品和平台的员工。而且在各地的存储重复,浪费了企业大量的资金。显而易见,传统的存储技术已经满足不了电子商务对信息存储的要求了,这时存储系统从硬件到软件都必须从单机上脱离出来,形成独立的网络存储体系。而存储区域网SAN(Storage Area Networks)和网络接入存储NAS(Network Attached Storage)就是这类技术产品。

1.1 NAS技术

NAS是部件级的存储方法。它将存储设备通过标准的网络拓扑连接到一组计算机上,不需要服务器和通用的操作系统,而用一个面向用户设计的、专门用于数据存储的简化操作系统就可以直接上网,由于这个系统内置了与网络连接所需的协议,因此,系统的整体管理与维护显得简单快捷。NAS是真正的Plug-In(即插即用),物理位置的安放很灵活,可放在工作组以外的其他地点。NAS适用于网络文件服务模式,如CAD、软件开发、电子邮件等。
1.2 SAN技术

SAN将存储设备作为网络上的一个区域独立出来,通过使用光纤通道的数据专用网络区域,来实现大容量外存设备和服务器间的数据交换。SAN一方面实现了大容量的集中存储,另一方面不受到网络环境的制约,因为存储设备的网络是独立于局域网而独立存在的。SAN主要用于诸如客户机/服务器(client /server)运算架构应用模式、数据库等需要专门或高效储存设备的大容量存储环境。

NAS虽然价格低廉,但是却受到带宽消耗的限制,无法完成大容量的存储应用,而且系统难以满足开放性的要求,所以在电子商务领域中,SAN用的较多,下面主要介绍SAN。

2.SAN技术原理
2.1 SAN的结构

SAN允许存储设备和处理器(服务器)之间建立直接的高速网络连接,通过这种连接实现只受光纤线路长度限制的集中式存储。SAN可以被看作是存储总线概念的一个扩展,它使用LAN和WAN中类似路由器、集线器、交换机和网关的单元,实现存储设备和服务器之间的互连。SAN可在服务器间共享,也可以为某一服务器所专有,既可以是本地的存储设备也可以扩展到其他地理区域。SAN的接口可以是企业系统连接(ESCON)、小型计算机系统接口(SCSI)、串行存储结构(SSA)、高性能并行接口(HIPPI)、光纤通道(FC)或要重点阐述的、即将成为标准的iSCSI技术。
SAN是一个集中式管理的高速存储网络,由多供应商存储系统、存储管理软件、应用程序服务器和网络硬件组成,能够帮助企业充分利用所拥有的商业信息的价值。由于SAN的基础是存储接口,是与传统网络不同的服务器后台网络,突破了传统网络的带宽瓶颈。
SAN通过以下三种方式支持服务器与存储设备之间的直接高速数据传输:
服务器到存储设备:这是服务器与存储设备之间的传统的相互作用模式,其优点在于多个服务器可以串行或并行地访问同一个存储设备。
服务器到服务器:SAN可用于服务器之间的高速大容量数据通信。
存储设备到存储设备:通过这种外部数据传输能力,可以在不需要服务器参与的情况下传输数据,从而使服务器能更多地处理其他应用程序等。
2.2 SAN的特性

和传统的网络相比,SAN有以下特性:
(1)传输速度高、距离远,可提高资料的使用率,对电子商务全球化是一个有力的推动。
  (2)资源与设备共享,是B to B电子商务模式中企业合作的契合点。

  (3)可作远程镜像,增强系统的灾难防御能力及重建速度,对安全、容错和快速恢复的电子商务领域应用非常有效。
  (4)通过SAN备份,降低经过LAN备份的流量负载,减轻企业内部的带宽压力,提高网络服务质量。
  (5)集中管理与整合储存设备资源,为企业节约大量管理时间与人力资源。
现在的SAN大多是基于光纤通道(Fiber Channel)技术。齐标准制定于20世纪90年代初期,它允许多系统访问数据,对双绞线等其他物理介质的支持也非常出色,它的传输距离达到了10公里。

目前,许多网络存储提供商致力于将SAN中使用的光纤通道设定为一种实用标准,但是其架构的建设成本高,远非一般企业所能够承受。iSCSI的出现解决了这个问题。“iSCSI”(互联网小型计算机接口)标准把存储设备和服务器与应用普通互联网协议建立起来的网络结合在了一起,而不是使用速度更快但是价格更昂贵、更复杂的光纤通道技术,为众多中小企业对经济合理和便于管理的存储设备提供了直接访问的能力。

3.iSCSI技术
3.1 iSCSI体系结构

iSCSI是Internet SCSI,也叫SCSI over TCP/IP。顾名思义,它是建立在TCP/IP协议上的互联网协议。iSCSI是一种端到端的协议,运行在服务器(被称为initiators,即发起端)、存储设备(被称为target,即目标端)和协议传输网关设备之间。iSCSI使用标准的以太网交换机的路由器来在服务器和存储设备之间传输数据。图3是iSCSI协议层次模型。

iSCSI建立在两个使用最广泛的协议之上。在存储方面,iSCSI采用的是SCSI的命令设置。SCSI是贯穿于所有存储配制间的核心协议,它是一个用于同I/O设备进行通信的流行协议,SCSI体系结构是基于客户端/服务器(C/S)模型的,和SAN的架构恰好吻合。在网络协议方面,iSCSI基于TCP/IP这个最基础、最普遍的协议。iSCSI的协议模型在TCP/IP的传输层以上插入iSCSI子层,起到封装和解封装的作用,它使用的是iSCSI PDU(iSCSI Protocol Data Units,iSCSI协议数据单元)。图4是iSCSI PDU封装后的模型。

iSCSI PDU类型有:SCSI Command ,SCSI Response ,Task Management Function Request ,Task Management Function Response ,SCSI Data-out ,SCSI Data-in ,Ready to Transfer ,Asynchronous Message ,Text Request ,Text Response ,Login Request ,Login Response ,Loginout Request ,Loginout Response ,SNACK Request ,Reject ,NOP-Out ,NOP-In.

3.2 iSCSI工作机制

iSCSI的工作流程是iSCSI协议在网络上封包和解包的过程。在网络的一端,数据包被封装成包括TCP/IP头、iSCSI识别包和SCSI数据三部分内容,传输到网络另一端时,这三部分内容分别被顺序地解开。iSCSI系统由一块SCSI卡发出一个SCSI命令,命令被封装到第四层的信息包中并发送。接收方从信息包中抽取SCSI命令并执行,然后把返回的SCSI命令和数据封装到IP信息包中,并将它们发回到发送方。系统抽取数据或命令,并把它们传回SCSI子系统。所有这一切的完成都无需用户干预,而且对终端用户是完全透明的。为了保证安全,iSCSI有自己的上网登录操作顺序。在它们首次运行的时候,启动器(initiator)设备将登录到目标设备中。任何一个接收到没有执行登录过程的启动器的iSCSI PDU目标设备都将生成一个协议错误,而且目标设备也会关闭连接。在关闭会话之前,目标设备可能发送回一个被反馈的iSCSI PDU。这种安全性是有限的,因为它只保护了通信的启动,却没有在每个信息包的基础上提供安全性。

要保证连接成功后IP层的安全,则要利用IPSec进行包保护,在终端之间提供安全通道。IPSec实现的内容包括完整性和认证、机密性、保险单安全关联和密钥管理。
iSCSI错误处理和恢复包括恢复方法,超时管理、错误处理、失败处理以及恢复的类别和层次的划分。
iSCSI名称是一种具有全球唯一性、永久性、与地址无关性的特殊名称,它有两种形式,即IQN形式(iSCSI Qualified Name),EUI形式(IEEE EUI-64形式)。iSCSI名称有以下优点:

(1)与地址分离,确保了存储设备有唯一的识别标志而不管它在网络中的哪个位置。当一个设备移动到不用的网段时,虽然IP和TCP端口改变了,但是名字的唯一性确保了它可以被重新发现。
(2)可以使iSCSI设备利用多个NIC提供冗余路径。
(3)长达255字节的iSCSI名,并不用来路由,相反,当一个节点的IP地址和TCP端口建立后,所有的存储处理仅需IP地址和TCP端口。
3.3 iSCSI的特点

iSCSI有以下几个显著的优点:
(1)基于TCP/IP协议,基础是传统的以太网和因特网,近20年来,网络技术的迅猛发展使传统网络无处不在,iSCSI有很好的基础。
(2)随着技术的进步,IP网络的带宽发展相当迅速,千兆以太网已经取得广泛的应用。而且,该协议由包括IBM、Cisco、Intel、Adaptec等业界巨头的支持。
(3)比起价格高昂的光纤通道,iSCSI相对廉价。目前,大多数中小企业都以TCP/IP协议为基础建立了网络环境。对于他们来说,投入巨资利用FC建设SAN系统既不现实,也无必要。但在信息时代,信息的采集与处理将成为决定企业生存与发展的关键,面对海量数据,许多企业已感到力不从心。iSCSI的实现可以在IP网络上应用SCSI的功能,充分利用了现有IP网络的成熟性和普及性等优势
(4)在技术实施方面,iSCSI以稳健、有效的IP及以太网架构为骨干,使忍受性大大增加。
(5)完全解决数据远程复制(Data Replication)及灾难恢复(Disaster Recover)的难题。

1.2 iscsi的相关应用介绍

1.2.1 应用引言

由于iSCSI技术现在还不够成熟,性能上还不能与光纤通道相比,iSCSI的应用主要是作为SAN在中低端服务器上的扩展。通过使用例如Cisco SN 5428这样的存储路由器,IT管理员能够在他们的存储网络中挂接更多的服务器,并获得IP网络所带来的好处。

在企业内部的电子商务活动中,存在异地存储的需要,同时,B to B的运营中,异地存储也是联接企业间的重要纽带。而当企业有异地存储要求时,如果采取光纤的方式连接,不仅要在复杂又昂贵的光纤铺设中开销巨大,而且向ISP(网络服务提供商)租用光纤会给企业带来一笔很大的开支,所以,大多企业不乐于采取光纤通道连接异地存储。但是,现在SAN之间的连接可以用iSCSI来解决。iSCSI的IP特性预示着他可以通过传统的IP协议网络传输,这样便能廉价的实现异地数据交换。

通过iSCSI,用户还可以基于标准的以太网线缆在任何地方创建实际的SAN网络,而不再必须要求专门的光纤通道网络在服务器和存储设备之间传送数据。iSCSI让远程镜像和备份成为可能,因为没有了光纤通道的距离限制,使用标准的TCP/IP协议,数据可以在以太网上进行传输。从数据传输的角度看,目前多数iSCSI的网络传输带宽为千兆即1Gbit,如果实现全双工能够达到2Gbit,第二代产品能够达到2Gbit带宽,在未来第三代通用iSCSI标准中,带宽将达到10Gb,也就是说,采用iSCSI构建远程异地容灾系统已不存在任何问题。

1.2.2 基于ISCSI技术的IP SAN应用

图一 基于ISCSI技术的IP SAN

图一为比较简单的IP SAN结构图。例子中使用千兆以太网交换机搭建网络环境,由ISCSI initiator如文件服务器、ISCSI target如磁盘阵列及磁带库组成。在这里引入两个概念:initiator和target。Initiator即典型的主机系统,发出读、写数据请求;target即磁盘阵列之类的存储资源,响应客户端的请求。这两个概念也就是上文提到的发送端及接受端。图中使用ISCSI HBA(Host Bus Adapter,主机总线适配卡)连接服务器和交换机,ISCSI HBA包括网卡的功能,还需要支持OSI网络协议堆栈以实现协议转换的功能。由图一可以看出,基于ISCSI技术,利用现有的IP网络搭建IP SAN是极其简单的而且在实际应用中,80-90MB/s的数据传输速率能够满足要求。 ISCSI技术的应用环境提供了更好的性价比。

1.2.3 基于ISCSI技术的综合应用

图二 主要数据中心、部门级SAN应用及远程数据中心

如图五所示,主要数据中心通过IP存储交换机将独立的ISCSI存储网络、光纤存储网络、NAS设备和IP网络系统都整合到通用的IP网络平台中的大型应用,成为高度集成的IP数据SAN。IP存储交换机可以使用冗余或堆叠方式,通过IP网络提供ISCSI SAN和FC SAN的高可用性及高扩展性的互联。IP存储交换机同时提供主要数据中心对IP广域网络中其它的远程存储的实时访问,如将数据远程镜像到如图所示的远程数据中心中以达到备份数据的目的。

主要数据中心的典型特征如下:
? 数据中心可以使用FC SAN、ISCSI SAN、NAS、服务器和DAS等各种存储方式作为存储资源;

? IP存储交换机成为ISCSI、光纤通道、IP服务器、NAS设备互相连接的枢纽,实现了高端的存储整合,扩展了通用IP网络技术的应用;

? NAS设备直接连接到IP存储交换机,为存储设备的扩展提供多种选择。

如图五所示,有两个部门级SAN应用,实际上可以基于IP网络扩展更多的部门级应用。而此类SAN首要就是具备灵活的架构,能够满足部门级的应用即可。将日常工作产生的数据通过IP广域网备份到远程数据中心,最终实现与主要数据中心、远程数据中心和IP系统的整合。
部门级SAN的典型特征如下:
? IP SAN通过IP广域网实现与主要数据中心的连接,并通过IP存储交换机、路由器访问数据中心的IP、光纤通道和ISCSI存储资源;

? ISCSI服务器(initiators)和存储(targets)通过ISCSI HBA连接到IP网络;

? IP交换机互联iSCSI系统。图五的例子即存储的企业级应用,多数用户的应用环境都包含或类似于其中的环境,从概念上达到了存储相对统一的目的。

您可能会关心到QoS(Quality of Service,服务质量)甚至安全方面的问题,通过公用网络传输极其重要的数据资源可能会出现问题。这个问题也是客观存在的,ISCSI协议中通过多种安全方式将这方面的隐患减到最低。第一,TCP/IP网络连接本身提供的高级服务及安全特性可以直接应用到ISCSI事物处理过程中,就QoS来说,IP网络提供了广泛的解决方案如事物处理优先级、DiffServ(服务区分)、MPLS(Multi-Protocol Label Switching,多协议分类转换)、RSVP(Resource Reservation Protocol,资源预约协议)等,就安全性而言,IP协议提供ACLs(Access Control Lists)、VLANs(Virtual LANs)、IPSec及高级数据编码规则等方案。第二,ISCSI协议本身也提供了QoS及安全特性,首先就是登录操作顺序,可以限制initiator仅向target列表中的目标发登录请求,再由target确认并返回响应,之后才允许通信;其次就是通过IPSec(ip security)将数据包加密之后传输,包括数据完整性、确定性及机密性检测等。第三,也是极为特殊的方式,即用户可以使用专有的网络以保证与其他事物处理分开,通过物理方式将数据传输完全隔离于公用网络之外,且可以保证不会引起网络阻塞导致性能瓶颈。

2 服务器及客户端的配置
2.1 基于linux的iscsi服务器的配置

2.1.1 安装服务包

首先,linux iscsi服务器的配置需要服务器端的安装包,登陆到http://www.sourceforge.net上可以下载到该软体。下载unh_iscsi_RH9.0-1.4.01后安装linux9.0,并进行rpm包的安装。Text模式下rpm –i unh_iscsi_RH9.0-1.4.01,图形模式下,进入添加删除程序即可。这个安装包包括两个部分(initiator/ target)。安装完成后在linux下可以找到增加的文件或文件夹有的是用来配置initiator的,有的是用来配置target的。

2.1.2 重要文件及命令操作

安装成功后,用lsmod命令列出当前加载的模块,会发现已经加载的模块中多了unh_iscsi_initiator的服务,该项服务是在安装成功后自动添加的,并且加载到了启动中,以后每次启动默认都会启动,该项服务是为initiator端设计的,由于该安装包更注重客户端的服务(更注重是指多数机器还是作为initiator端的),所以默认把initiator端的服务程序启动并添加到启动程序组中,方便以后使用。在/etc/init.d/下看到的iscsi相关启动程序unh_iscsi就是被启动的initiator端起动服务的脚本。它在启动的时候会把信息写入log。另外/usr/share/doc/unh_iscsi是相关说明文件。那配置服务器的程序在哪里呢?在配置服务器的过程中需要相关的配置文件、管理工具、log和说明档,这些都包含在如下目录中:
/opt/unh/iscsi/
bin – Commands and utilities

logs – Log files

modules – Kernel modules (indexed by kernel version)

dev – Device files

conf – Configuration files

src – UNH iSCSI Source

在/opt/unh/iscsi/bin下是常用的命令,包括iscsi_config,iscsi_connect,
Iscsi_disconnect,iscsi_manage,iscsi_mount,iscsi_rebuild, iscsi_umount等。iscsi_manage用来在建立对话的过程中对会话方式、验证方式等进行配置,指定会话的一系列规则。iscsi_config用来在initiator端发起与某服务器的某个会话,儅然要指明服务器端,同时它也能起到终结会话的作用。它的参数涉及target的ip地址、端口号target的名字以及逻辑单元号lun。iscsi_rebuild用来在修改完.c和.h文件后将这些文件重新编译,以达到修改服务模块的作用,这样在把修改后重新生成的模块插入后,才能使服务器端服务模块的相应修改得到实现。Modules下放置的是有关内核的程序模块,即要用到的unh_iscsi_target.o、unh_iscsi_initiator.o、unh_scsi_target.o这三个模块。/opt/unh/iscsi/conf下有两个文件,为fstab.iscsi.sample、target.sample。target.sample可用来连接target,可设置被访问服务器的服务器名、服务器ip、服务器端口、lun(默认访问所有的lun,即all),以及initiator的名字。fstab.iscsi.sample与target.sample相配合,用在连接vd时,可以设置target名,lun,part(即要访问的分区),磁盘mount的路径,文件系统格式,及相关选项(默认为defaults)。这两个sample是基于linux系统的initiator连接服务器时需要配置的两个文件,相当于conf的作用。iscsi_connect也可从initiator发起请求与target建立连接,他的工作原理就是调用上述两个sample。iscsi_disconnect用来断开连接。iscsi_mount 用来把所见到的iscsi硬盘mount 到本地使用,iscsi_umount 起到相反的作用。最后是/opt/unh/iscsi/src目录,该目录是源代码目录,作配置需要修改里面的一些文件,然后重新编译。在src目录下,有很多的源文件和说明文件用来配置服务器。由于有些文件与配置服务器无关或未涉及到而暂不列出,只写出一些用到的,以供大家参考。Src下常用目录有:cmd,docs,initiator,target,scripts,test。cmd目录下存放命令,其中有的已在/opt/unh/iscsi/bin下出现过。Docs目录下存放说明文件,其中对iscsi_config,iscsi_manage等作了一些说明,这些文件能够很好地帮助我们对iscsi_manage和iscsi_config进行配置。Target目录存放的是target端的源代码,修改后编译再将服务模块插入可用来实现服务器端的配置。Scripts目录下存放的有四个文件,这四个文件为sample即样板,可以把它们copy,然后对备份文件进行修改,修改后给其指定为可执行的属性,执行即可。这四个文件各有不同的用法,前面的两个文件与/opt/unh/Iscsi/conf/下的文件用法相同,后两个文件也是用来连接target端的,但添加了验证的功能。target.sample为none验证,即不验证,而target.sample.chap采用chap验证方法,需要进行用户名和密码的输入,其中有两套,一套是 peer password &&username,另一套是local password&&username, target.sample.srp采用了srp验证方法。当然这三个文件也可从iscsi_config或iscsi_manage来进行配置,但不推荐这么做,最好还是修改配置文件,配置文件修改比较简单,而且还不经常出错,另外修改文件后可直接运行,也可通过iscsi_connect调用文件连接target。命令行的方法属于高级设置,可以指定多重验证。下面是有关命令行的使用方法。iscsi_manage的常用动作参数主要有set/force/restore,每种动作参数又对应不同的状态参数,即要用这三种动作设置相应的状态,包括验证方式,会话形式,peer用户名和密码,local用户名和密码等。Iscsi_config的格式为iscsi_config [host=number][ip=address_or_name][port=number][target=number][lun=number]。What to do 一栏输入up or down ,用来建立并设定initiator到target的连接,up用来建立连接,down用来断开连接。Host=number是用来指出initiator端由kernel分配的scsi 适配器号,设置时可在客户端的相应文件路径/proc/scsi/iscsi_initiator下找到相应的说明,实际上儅机器上没有scsi设备时,host/target number会被指定为0,否则为1。Ip地址填入ip address。Port端口为target对initiator开放的用来建立会话的端口号。Target number是用来提供target允许的最大会话数。Lun number用来指定initiator端要连接的target的vd号,如果不填的话,可认为连接所有的vd。现在来举2个比较实用而简单的例子分别说明iscsi_manage和iscsi_config的用法:例子1:

Iscsi_manage target restore(target端恢复为初始设置,可以清除所有的修改)

Iscsi_manage target set Authmethod=CHAP,NONE(用户验证方式为双选,可以验证,也可不验证,验证的时候,需输入两套用户名和密码,一套是peer x/n,一套是local x/n)

Iscsi_manage target set Sessiontype=Discovery(指定会话的方式为discovery)Iscsi_manage target force s(强制认证,格式必须)

Iscsi_manage target force px=“123”(target端用户密码)

Iscsi_manage target force pn=“haha”(target端用户名)

Iscsi_manage target force t(格式必须,指定2套认证方式,要输入lx/ln必须输入force t)

Iscsi_manage target force lx=“123”(本地用户密码)

Iscsi_manage target force ln=“haha1”(本地用户名)

例子2:
Iscsi_config up ip=123.45.67.89 port=5142 host=1 target=2 lun=3 cid=4

在这里,用来建立一个由initiator到目标地址为132.45.67.89且端口为5142的target的会话,且连接target的第三个vd,由于该initiator同时已有3个同这个vd进行的连接,这次是建立对该vd的第四次连接,所以cid=4。
Iscsi_config down host=1 target=2 lun=3 cid=4则是把同lun=3的vd建立的第四个连接结束。如果向已和自己建立连接的target建立第二个连接,可以写作iscsi_config up ip=123.45.67.89 host=1 lun=2

Iscsi_manage init restore host=1

Iscsi_manage init set InitiatorName=‘uname -n’host=1(设置initiator端名字)Iscsi_manage init set TargetName=MyTarget host=1(设置服务器端名字)Iscsi_manage init set SessionType=Normal host=1(设置会话方式)

Iscsi_manage init set MaxConnections=2 host=1(指定最大连接数)

Iscsi_config up ip=123.45.67.89 host=1 lun=1(建立第一个连接)

Iscsi_manage init restore host=1(清除上述设置,为重输入作准备,这是第一个连接已成功创建)

Iscsi_manage init set InitiatorName=‘uname –n’host=1(设置initiator端名字)Iscsi_manage init set TargetName=MyTarget host=1(设置服务器端名字)

Iscsi_config up ip=123.45.67.89 host=1 lun=1 cid=2(对同vd建立第二个连接)以上就是iscsi_manage和iscsi_config的用法。除了iscsi_manage有关target端的配置,实际上完全可以通过配置/opt/unh/iscsi/conf/或/opt/unh/iscsi/src/scripts/下的配置文件,然后执行这些文件来打到上述目的,相当于以批处理的方式执行代码。另外,在/opt/unh/iscsi/src/cmd/下的ini-1命令也可以用来配置initiator来连接target。下面将列出ini-1文件的配置部分,它能帮助我们详细地了解整个的连接过程。该文件主要分三个部分:服务器端的配置、initiator与第一块vd的连接、initiator与第二块vd的连接。内容主要包括服务模块的插入,iscsi_manage和iscsi_config的配置,其中最核心最重要的部分列出如下:

#!/bin/sh
HBA=0
#/sbin/insmod scsi_mod

#/sbin/insmod sd_mod

#/sbin/rmmod unh_iscsi_target

#/sbin/rmmod unh_scsi_target

#/sbin/insmod /opt/unh/iscsi/src/target/unh_scsi_target.o(编译后重新生成的模块)

#/sbin/insmod /opt/unh/iscsi/src/target/unh_iscsi_target.o(编译后重新生成的模块)

#rmmod unh_iscsi_initiator

#insmod /opt/unh/iscsi/modules/’uname –r ’/unh_iscsi_initiator.o

############config target##############

Iscsi_manage target restore host=$HBA

Iscsi_manage target set TargetPortalGroupTag=1 host=$HBA

###########config initiator###############

Iscsi_manage init restore host=$HBA

Iscsi_manage init set TargetName=’’host=$HBA

Iscsi_manage init set InitiatorName=’’host=$HBA

Iscsi_manage init set MaxConnections=1 host=$HBA

Iscsi_config down ip=10.190.77.77 host=$HBA

Iscsi_config up ip=10.190.77.77 port=5001 target=0 host=$HBA

同过上述的简单配置,即可建立连接,连入vd。由于服务模块以手动的方式重新加载过了,所以这里就被注释掉了。
Iscsi_manage不仅能用在target端,也能用在initiator端。而iscsi_config只能用在initiator端。总之,initiator连接target的用法非常多,但各种方法从实质上是一样的,都是在服务器端加载修改后的服务模块后,用iscsi_manage对initiator/target端进行配置,然后再从initiator端用iscsi_config建立连接。通过文件而非直接用命令来实现连接的方法是把配置服务器端或客户端的命令以及建立连接的命令写入文件,通过运行文件达到运行命令、建立连接的过程。当然,文件中也涉及到了有关用户验证的配置。
2.1.3 服务模块的操作

现在就来研究一下最重要的有关target的Ip地址和端口号等target端最终要的配置过程。重要的源文件大都在/opt/unh/iscsi/src/目录下,文件名分别为iscsi_protal_group.c &&scsi_target.h。先来看一看前面的文件,在这个文件中需要配置target端的ip地址,以及被访问的端口号,当然还有同一端口允许的最大入口数,即同时有几个用户访问。这里ip的位置也可以替换成nic的mac地址。保存后,开始设置scsi_target.h文件,这个文件比较复杂,但需要设置的内容并不很多,其中找到如下配置行:

#define MEMORYIO

#define DISKIO

#define FILEIO

#define GENERICIO,这四行确定了在target端将采取何种方式提供iscsi硬盘的访问,假如采取第三种方式:

//#define MEMORYIO

//#define DISKIO

#define FILEIO

//#define GENERICIO

那么在target端将会出现8个文件,都位于/opt/unh/iscsi/src/target/路径下。这8个文件就是target端向initiator端提供的8块硬盘。默认每个是1.76G,可以在该文件中进行修改。该文件中还须修改的命令有:
#define BLOCKSIZE 512 可以调节默认的传输块的大小

#define FILESIZE 1900*1000*1000 改变提供的每块iscsi硬盘的大小。

儅修改完这文件后,文件并没有真正的得到修改,修改后的结果也不会显示出来,这是需要将修改过的文件重新编译,这就用到了/opt/unh/iscsi/src/cmd/iscsi_rebuild,它将编译所有修改过的.c&&.h文件,用来生成新的服务模块文件unh_iscsi_target.o && unh_scsi_target.o。但linux必须安装gcc等编译工具以及编译kernel的相关软体。在shell模式下输入lsmod,检查是否在模块列表中已经存在这两个服务。如果存在,输入

rmmod unh_iscsi_target

rmmod unh_scsi_target

分先后卸载这两个模块,然后在/opt/unh/iscsi/src/target/下用
Insmod unh_scsi_target.o

Insmod unh_iscsi_target.o

分先后添加两个模块。在用lsmod看看是否添加成功,如果成功,那么祝贺你,你的服务器已初步建好,用上面讲过的配置方法,去实现其它的功能吧。
2.2 基于linux的iscsi initiator的配置

2.2.1 安装服务包

基于Linux的iscsi initiator没有采用上面的rpm,而是安装了独立的rpm包。该包可在http://rpm.pbone.net/index.php3/stat/4/idpl/572167/com/iscsi-3.1.0.3-3.i386.rpm.html上载到。与上述安装包内的initiator配置不同的是这个独立的安装包提供了简单的配置方法,安装后会在/etc下建立iscsi.conf配置文件和initiatorname文件,并且在/etc/init.d/下安装了相应的启动脚本。脚本编辑内容包括ip,port,身份验证等多种信息。

2.2.2 编辑服务脚本

用vi编辑启动脚本,制定目标服务器的ip地址/hostname和被访问的端口,在该文件中可以指定多个待访问的target,并且可以不指定端口,也可以通过在不同的target ip下输入不同的验证信息,即用户名/密码来进行chap验证访问。此文件中最方便之处莫过于不用设定targetname,以及host和target号。

2.2.3 启动服务连接target

在编辑完conf后,启动iscsi initiator程序/etc/init.d/iscsi,待服务启动后,服务会按照iscsi.conf的设置访问target,而target会相应请求,这样客户端和服务器端就会有有关连接的信息显示,且在initiator端会有新的硬盘连入,即iscsi硬盘。用fdisk –l 命令检查会多出/dev/sda硬盘,用mkfs.ext2命令将其格式化后,linux可以识别后,即可用mount命令直接联入,非常方便。另外也可用fdisk命令进行分区。之后,便可以在此新硬盘上进行读写操作了。

2.3 Windows2000客户端的安装与配置

2.3.1 安装服务包

http://www.microsoft.com/downloads/details.aspx?FamilyID=12cb3c1a-15d6-4585-b385-befd1319f825&DisplayLang=en下载for windows2000的客户端程序,执行安装程序,按照向导提示即可安装完毕。

2.3.2 配置客户端

该客户端程序共包括6个主界面,在每个界面中都有不同的功能设定,
这六个主界面分别为target portals,available targets,active sessions,isns servers,persistent targets,initiator settings。target portals用来输入ip,port,chap验证的用户名和密码,还能配置ipsec、数据校验方式等功能,以用来和target端建立联系。

Available targets具有log on的功能,用来在与target端建立连接的基础上,连接target的vd,连接成功后会显示connected,log on的时候有2个选项可以选择,包括是否在系统启动的时候自动建立与vd的连接。

Active sessions在initiator与target的vd连接时显示为active,未连接时显示为inactive,具有log off的功能。

Isns servers是名字服务器的相关设置,persistent targets能显示所有在系统启动时自动恢复的vd连接。Initiator settings具有为guest用户设置验证密码的功能,同时还具有修改initiator node nam(initiatorname)等功能。

在连接vd后,即可通过windows的磁盘管理界面对iscsi硬盘进行初始化。

3 总结
3.1 应用经验
在组建iscsi网络存储的过程中,我增长了很多经验。安装rpm后,我发现linux下多了一些文件和目录。这些文件繁多而且有很多的源文件,跟自己原来组建samba服务器,nfs服务器的时候有很多不同的地方,比如服务器端没有现成的配置文件可用。经过研究发现,源文件中有一些关键性的配置,用vi编辑器编辑后,生成对应的模块,并把这些模块加载到服务列表中,这样才能启动服务。/etc/init.d/unh_iscsi是initiator的启动脚本,并非服务器用的。重新编译的命令为/opt/unh/iscsi/src/cmd/iscsi_rebuild,此时可把所有改动的源文件进行编译修改。之后,会发现在/opt/unh/iscsi/src/target/的下面多了unh_iscsi_target.o和unh_scsi_target.o两个文件。这两个文件是编译好的服务启动脚本,加载模块、卸载模块,列出当前运行模块的名令分别为insmod,rmmod和lsmod。启动服务后,看到unh_iscsi_target和unh_scsi_target两个服务在列表中已启动。卸载的时候也要注意,先卸unh_iscsi_target后卸unh_scsi_target。安装的时候正好相反,先unh_scsi_target后unh_iscsi_target,原因是unh_iscsi_target的用法是建立在unh_scsi_target的基础上,要占用unh_scsi_target。另外,initiator和target的相关文件都很多,一定要分清处理。相关的帮助文件是很重要的,往往在像docs这样的目录下或是与重要的文件放在同一目录下。还有就是一定要使linux具有编译源文件的功能,需要安装development tools中的编译工具和kernel development。另外,我学习到了有关设置iscsi的诸多命令:iscsi_manage,iscsi_config都具有非常丰富的参数和功能,虽然没有用到集成在包内的initiator程序,而采用了独立的initiator包,但是像iscsi_connect,iscsi_disconnect,iscsi_mount,iscsi_umount,iscsi_test等命令帮助我更好的了解iscsi的原理和运行机制。
3.2 小结
以上是对iscsi构建网络存储的介绍和分析。按照上面的方法即可构建简单的iscsi网络存储环境。iscsi技术的应用,将本身协议完全不同的IP SAN和FC SAN加以整合,促进了存储资源利用率的增长,并具有创新意义。随着iscsi技术的完善,数据块级的存储应用将变得更为普遍,存储资源的通用性、数据共享能力都将大大增强,并且更加易于管理。随着千兆以太网的成熟以及万兆以太网络的开发,IP存储必然会以其性价比、通用性、无地理限制等优势飞速发展,iscsi技术将联合SCSI、TCP/IP,共同开创网络存储的新局面!
4 参考资料
《SourceForge_net File Release Notes and Changelog》
http://www.sourceforge.net安装包附带帮助文档见附录
iscsi安装包相关帮助文档:
1./opt/unh/iscsi/src/docs/下的文档;
2./opt/unh/iscsi/src/的文档
5 附录
1./opt/unh/iscsi/src/target/iscsi_portal_group.c
struct portal_group iscsi_portal_groups[MAX_PORTAL] =
{
/* Default portal */
{INADDR_ANY_STRING, ISCSI_WKP_STRING, DEFAULT_TARGET_PORTAL_GROUP_TAG},

/* example portals */

/* {“132.177.117.67”, “5000”, 3}, */ /* tweety */
/* {“192.1.1.17”, “5001”, 2}, */ /* tweety-gig */
/* {“192.1.1.17”, “5002”, DEFAULT_TARGET_PORTAL_GROUP_TAG}, *//* tweety-gig */
/* {“[fe80::207:e9ff:fe19:9c35]”, “5001”, 2}, */ /* tweety-gig */
/* {“[fe80::2e0:29ff:fe6c:70dc]”, “5000”, 3}, */ /* tweety */

/* {“132.177.118.45”, ISCSI_WKP_STRING, 3}, oakenfold */
/* {“[2001:468:603:c001:0:7ff:fee3:c72c]”, ISCSI_WKP_STRING, 3}, */

/* end of table with NULL string pointers and tag of 0 */
{NULL, NULL, 0}
};
2./opt/unh/iscsi/src/target/scsi_target.h/
/# define MEMORYIO /* for performance studies */
//# define DISKIO /* to a real disk */
# define FILEIO /* to a file on the system */
//# define GENERICIO /* when the scsi_do_req is not working */

# define BLOCKSIZE 512
//# define BLOCKSIZE 4096
# define TWOBYTE 16
# define BYTE 8
# define FILESIZE 1900 * 1000 * 1000 /* file size in MB */
# define IOFILE 1
# define IOGENERIC 2
# define IO_SIGS (sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGTERM)|sigmask(SIGIO))
# define MAX_SENSE_DATA 16
# define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGTERM))
# define TE_TRY 1
# define TE_TIMEOUT 10*HZ
#define R_BIT 0x40
#define W_BIT 0x20

其它软件介绍:

Ardis iSCSI Target

Setting up a Target

Using the Linux iSCSI Target Implemention from Ardis Technologies we can create iSCSI targets on any Linux system which can be accessed from the iSCSI initiator we’ll set up in the next section. A system that will make targets available only needs some partition to be available for export, and it does not need to be a SCSI disk.

Changes to the Ardis Target Implementation

Ming Zhang was nice enough to inform me that he and several others have forked the Ardis codebase and are adding significant improvements to the target implementation. The new projected is called the iSCSI Enterprise Target project.

Ming and his team are doing some really great work and they deserve the respect and appreciation of the whole community. Future revisions of this document will be based solely on the new implementation.

The following are the steps to setup an iSCSI target.

Procedure 1. Setting up an ISCSI Target

Download the iSCSI Target code from: http://www.ardistech.com/iscsi/

Warning
I had problems with the 20040211 release, when loading the modules I’d get unresolved symbols. Using the January released worked fine.

Download and configure (make menuconfig) a Linux 2.4.22 kernel. Patch the kernel with the diff in the target code (ie: kernel.2.4.22.diff).

[benr@nexus linux-2.4.22]$ patch -p0 <
../linux-iscsi-target-20040116/kernel.2.4.22.diff
patching file include/linux/mm.h

patching file include/linux/pagemap.h

patching file kernel/ksyms.c

patching file mm/filemap.c

[benr@nexus linux-2.4.22]$

There are no iSCSI options you need to select except to have the normal SCSI driver built. Just build and install your kernel in the usual way. Then boot it.

Next, build the target module and tools source. You’ll need to define the environmental variable KERNELSRC to point to the location of the kernel tree you patched and installed.

[benr@nexus linux-iscsi-target-20040116]$ make
set $KERNELSRC!

[benr@nexus linux-iscsi-target-20040116]$ export KERNELSRC=../linux-2.4.22

[benr@nexus linux-iscsi-target-20040116]$ make

( … Removed for clarity … )

[benr@nexus linux-iscsi-target-20040116]$ make install

( … Removed for clarity … )

This will install the iSCSI target module (iscsi_trgt_mod.o) into /lib/modules and the target daemon (iscsi_trgtd) into /usr/sbin.

Copy the iscsid.config file to /etc, and edit it to meet your needs.

[benr@nexus /etc]$ cat iscsid.config

## iSCSId Target Configuration File

User benr

Target iqn.1997-06.com.homestead:storage.disk1.nexus

User
# Lun definition

# (right now only block devices are possible)

Lun 0 /dev/sdb

# Alias name for this target

Alias Test

Target iqn.1997-06.com.homestead:storage.disk2.drew

User
# Lun definition

# (right now only block devices are possible)

Lun 0 /dev/sdc

# Alias name for this target

Alias NTFS

Copy the iscsid.rc to /etc/init.d/iscsid and make it executable.

Now, you should be able to start the iSCSI Targets.

[root@nexus /root]# /etc/init.d/iscsid start

Starting iSCSI target.

[root@nexus /root]#

As defined in the above procedure, according to my iscsid.conf, I’m offering 2 iSCSI targets. I can use these target names later when I connect to them with an initiator.

Keep an eye on the syslog when you start the iSCSI Target Daemon (tail -f /var/log/messages) to watch for startup messages and any warnings.

StarWind

1. 建立iSCSI Target Server

下载StarWind (非商业用途免费使用),并安装

http://www.rocketdivision.com/download_form.php?act=download&prod=2

connect localhost,预设帐号test、密码test

修改密码后,请到控制台/服务,停止StarWind iSCSI Service,再重新启动,帐号密码才会生效。

右键add device

建立新的空白档案,模拟成硬碟。

Cd C:\Program Files\Rocket Division Software\StarWind

mksparse.exe –o C:\image.img 10G

例如

C:\Program Files\Rocket Division Software\StarWind>mksparse c:\test.img 100M

mksparse: Image file creation utility Version 1.0

Copyright (c) Rocket Division Software 2003-2004. All rights reserved.

Creating sparse file ‘c:\test.img’ of size 104857600 bytes…

新增Image File

选取c:\test.img

新增dvd

建立存取帐号密码管控

2 Client端安装iSCSI initiator

下载并安装Microsoft iSCSI Software Initiator version 1.0

http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=12CB3C1A-15D6-4585-B385-BEFD1319F825

看到Available Targets中的装置后,Status is Inactive选择Log on

若有帐号密码控管,请进入Advanced输入帐号密码

登入成功后Status变成Connected

在本机磁碟管理,重新整理后可看到新的磁碟,如同本机新安装的硬磁相同般的使用。

感想:

一般而言,一个server target仅允许一个client连结,除非starwind.conf设为readonly,则可像dvd相同提供多人同时连入。

利用dvd模拟方式,可将许多光碟映像档,变成本机光碟般的使用相当方便。

建立windows 2003 Cluster

1. 安装win2003企业版,再安装StarWind

2. 修改StarWind.conf

add ImageFile1 -file:”d:\temp\image1.img” -clustered:yes

3. 重新启动StarWindService服务

4. win2003伺服器安装 MS iSCSI initiator. 选择为永久性目标”Persistent Target”.

5. 格式化成NTFS格式,指定磁碟名称代码

6. 卸载目标硬碟后,在正式的第一台cluster机器中重新挂上persistent target指定相同的磁碟名称代码

7. 到第二台cluster机器再挂上一次

8. 启动Cluster Administrator依照微软指示建立cluster到StarWind的实体磁碟中。

9. 加入第二个node到这个cluster.

Comments are closed.