2008年(8065)
分类: 服务器与存储
2008-05-29 15:55:24
iSCSI的原理是通过TCP/IP协议来打包传输SCSI数据块,这样做的好处笔者在此不再累述,介绍iSCSI的文章已经漫天都是了,但正是因为iSCSI独特的技术原理,所以在实际使用过程中,在系统内部有一个重要的工作环节,就是对SCSI数据块进行封装的过程。这一过程是在系统内部自动完成的,我们使用时完全感觉不到。
纯软件实现iSCSI支持
工作时,iSCSI需要将SCSI定义的发起方(initiator)和目标方(target),并通过TCP/IP进行封装,这样SCSI数据块可由原来的SCSI总线连接扩展到internet上,这一过程有些产品通过硬件来实现,这种硬件产品被简称为TOE,但随着近年来服务器芯片技术的不断发展,处理能力日益强劲,目前更为普遍的是通过软件来实现SCSI数据块的封装过程。
这种软件通常被称为iSCSI Initiator。因为服务器采用普通以太网卡来进行网络连接,通过运行上层软件来实现iSCSI和TCP/IP协议栈功能层。这种方式由于采用标准网卡,无需额外配置适配器,因此实现成本最低。但需要注意的是:在这种方式中,服务器在完成自身工作的同时,还要兼顾网络连接,会对服务器造成一定的工作负担。因此这种方式比较适合于预算较少,并且服务器配置较高的拥护。我们在此建议,最好是采用1GHz以上CPU的主机,如此才能获得较佳的效能表现。
笔者在这里介绍的,就是在Redhat Linux环境下,如何通过纯软件的方式来实现对iSCSI的支持,也就是说,如何在Redhat Linux环境下安装和配置iSCSI Initiator。
安装准备
首先我们针对企业版Linux (ES或AS) 3 Update 6版本。基本上这个版本的Linux安装盘片一共4片,我们看到其中第二片上应该会有如下的说明字样:
iscsi-initiator-utils-3.6.3-3.i386.rpm
linux-iscsi 3.4.x: 版本: 2.4.21
linux-iscsi 3.6.x: 版本: 2.4.21
这里一定要注意:linux-iscsi Initiator版本高于3.x的不能兼容2.4.x及更早的版本。
企业版Linux (ES或AS) 4 Update 2版本的安装盘也是4片,其中iSCSI Initiator在第四张盘片上。
iscsi-initiator-utils-4.0.3.0-2.i386.rpm
linux-iscsi:
4.0.2 – 版本: 2.6.10
4.0.1 – 版本: 2.6.0
注意:linux-iscsi Initiator版本低于4.x不能兼容2.6.x及更高的版本,且linux-iscsi 5.x以及更高版本已经成功通过UIT测试。
安装Redhat iSCSI发起方
首先我们来安装iSCSI Initiator,不管你的环境中运行的是企业版Linux 3还是4,你只要在Red Hat Media中找到RPM,然后用下面的rpm – ivh命令安装就可以。
# rpm –ivh iscsi-initiator-utils-4.0.3.0-2.i386.rpm
但是需要注意的事,这个命令是针对企业版Linux ES 4 Update 2的,你使用的版本可能有所不同。
此外,在Redhat 企业版Linux(ES或AS)4 Update 2或更高版本下,还有一个手动安装这个包的方法,那就是使用“系统设置”菜单中的“添加/删除程序”菜单项。在“网络服务器”组建的列表中会列出iscsi-initiator-utils选项。这一选项在初次安装Redhat 的时候也可以进行选择,所以这项操作在初次安装时也可以进行。
安装完成后,我们查看/etc路径,应该会出现一个名叫iscsi.conf的文件。如果这个文件不存在,那就很有可能是安装时出了问题。这个时候,我们还可以尝试通过下面的命令生成这个文件:
DiscoveryAddress=
这就需要指定到你的UIT阵列的Group IP Address
SendAsyncText=yes
Initiator能从客户端接收到Vendor Specific的同步事件
Continuous=yes
为了能指定全部依然打开的会话
配置iscsi.conf文件
在iscsi.conf文件内有很多其他的参数可以设置,你可以仔细查看iscsi.conf文件来获得那些变量和相关用途的信息。这些值一旦在新创建的/etc/iscsi.conf 文件进行了设置,就将启动iscsi服务,当然也可以在需要的时候使用命令行的方式来设置:
# service iscsi start
为了验证iscsi服务在启动时将会生效,可以使用下面给出的chkconfig命令:
# chkconfig –list iscsi
iscsi 0:off 1:off 2:off 3:off 4:off 5:off 6:off
在默认状态下,新添加的iscsi Initiator在启动后并不能自动工作,所以需要把每一个管理级别都设置为“关闭”的状态。要想在启动后生效,使用下面的chkconfig命令就可以了:
# chkconfig –add iscsi
# chkconfig iscsi on
上面的两个命令首先检查是否有必要的脚本来启动和停止这项服务,然后把服务指定到正确的管理级别上。
然后检查这些更改是否生效:
# chkconfig –list iscsi
iscsi 0:off 1:off 2:on 3:on 4:on 5:on 6:off
查看连接的iSCSI设备状况
为了证明你能看到你的iscsi设备,你可以使用如下的命令:
# iscsi-ls
SFNet iSCSI Driver Version … 3.6.3 (27-Jun-2005 )
TARGET NAME : iqn.2001-05.com.UIT:6-8a0900-148270001-987006efd6c43836-pat-rhel3-vol2
TARGET ALIAS : pat-rhel3-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:50 2005
NO. OF PORTALS : 1
PORTAL ADDRESS 1 : 172.19.50.10:3260,0
SESSION ID : ISID 00023d000001 TSIH 06
要想查看更加详细的设备信息,你可以在刚才的命令中加入-l参数:
# iscsi-ls –s
SFNet iSCSI Driver Version … 3.6.3 (27-Jun-2005 )
TARGET NAME : iqn.2001-05.com.UIT:6-8a0900-148270001-987006efd6c43836-pat-rhel3-vol2
TARGET ALIAS : pat-rhel3-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
************************************************************************
上面是加了-l的iscsi-ls命令输出的信息,这时我们可以看出有问题的就是/dev/sdc设备
编译自己的Linux-iscsi
如果你运行的不是带有预编译好的iSCSI Initiator更新过的Redhat Linux,你可以尝试用Sourceforge上的linux-iscsi项目提供的源码编译自己的iSCSI Initiator。
除了需要上面说明里给出的内核版本,所有开发包都必须在编译前装好,就像内核源码一样。最简单的方法就是在桌面图形界面的“系统设置”菜单里选择“添加/删除程序”。根据不同的版本,选择你需要的组件:
Redhat AS 3:
开发工具(缺省安装包括所有需要的软件包)
内核开发(缺省的设置就够了)
Redhat AS 4:
开发工具(缺省安装包括所有需要的软件包)
注意:如果没有安装内核开发组件,在编译之前必须要准备好内核源代码。
在这些操作系统软件包都装好之后,可以很容易的从Sourceforge上linux-iscsi项目下载源代码,然后编译安装iSCSI Initiator。随源码一起的README文件有详细的安装说明。如果在安装过程中有什么问题,看linux-iscsi项目相关的内容寻求帮助。你可以在邮件列表里搜索或者发布相关的帮助信息。
固定设备命名
用Redhat 软件服务器端的设备没有固定的命名方式,但是有不少办法可以在不同版本的Redhat 上实现固定命名:
Redhat 企业版Linux (ES或AS) 3可通过Devlabel命令实现固定设备命名 (看devlabel的man帮助),下面的方法只能在内核是2.4系列的Redhat 上工作:
用 devlabel 建立名称的符号链接
简单的add命令建立链接的方法如下:
# devlabel add –d
比如:
# devlabel add –d /dev/sdc –s /dev/iscsi/vollink
# ls –l /dev/iscsi/vollink
lrwxrwxrwx 1 root root 8 Dec 1 16:31 newvol -> /dev/sdc
对于Redhat 企业版Linux (ES或AS) 4,可通过如下方法实现固定设备命名。但需要注意下面的方法只能在内核是2.6系列的Redhat 上工作:
在设备节点文件创建之后,建立设备到设备文件的链接。udev用规则文件(看 man udev)来确定如何建立不同设备的设备名称和设备文件名之间的链接。
这是最好的一种解决方案,没有比这个更直接的方法了。
关于那些用iSCSI 服务端固定设备名称的iSCSI设备,Redhat 可能会利用udev提供更多的相关信息。