Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11703518
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-05-29 15:55:24

近年来,人们不断在讨论iSCSI结构简单而且成本低廉。很多人都认为,要想实现DAS(直连存储到SAN(存储专用网络)的迁移,iSCSI是比光纤通道更合适的存储网络技术。而一些iSCSI的产品现在也逐渐成熟,随着10GB脚步的日益临近,用户对iSCSI性能的疑虑也逐渐消失。笔者就已经看到国内的一些用户已经开始部署iSCSI SAN了。

    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 -s  
    比如:
    # 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提供更多的相关信息。

阅读(2149) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~