全部博文(385)
分类: LINUX
2007-01-02 20:11:41
需要的软件地址
发表主题: 一步一步教你構建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服務器的配置需要服務器端的安裝包,登陸到上
可以下載到該軟体。下載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
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包。該包可在上
載到。與上述安裝包内的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 安裝服務包
下載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》
安裝包附帶幫助文檔見附錄
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
3. 安裝包附帶幫助文檔