分享

Linux下实现iSCSI

 Liucw2012 2012-04-23

Linux下实现iSCSI

2011-03-21 16:28:14 | 419次阅读 | 评论:0 | Linux下实现iSCSI

      Linux网络环境iSCSI技术的实现主要有三种方式:

      1. 纯软件方式

      服务器采用普通以太

    网卡

    来进行网络连接,通过运行上层软件来实现iSCSI和TCP/IP协议栈功能层。这种方式由于采用标准网卡,无需额外配置适配器,因此

    硬件

    成本最低。但是在这种方式中,服务器在完成自身工作的同时,还要兼顾网络连接,造成主机运行时间加长,系统性能下降。这种方式比较适合于预算较少,并且服务器负担不是很大的用户。目前不论是Microsoft Windows、

    IBM

     AIX、

    HP

    -UX、Linux、Novell Netware等各家操作系统,皆已陆续提供这方面的服务,在价格上,比起前两种方案,远为低廉,甚至完全免费。但由于Initiator驱动程序工作时会耗费大量的

    CPU

    使用率及系统资源,所以性能最差。在此建议,最好是采用1GHz以上CPU的主机,如此才能获得较佳的效能表现,如果公司主机CPU在1GHz以下,那么最好不要采用。至于在各类协议的支持上,Initiator驱动程序可以同时支持iSCSI、NFS及CIFS协议。当然现在大多数服务器CPU都可以满足这个要求。这里免费的iSCSI Initiator驱动程序,才可以将一般Gigabit网卡仿真成iSCSI Initiator。然后再透过iSCSI桥接器将一般SCSI接口的

    存储

    配备仿真成iSCSI Target,如此就形成一个iSCSI-SAN。

       2. iSCSI TOE网卡实现方式

      在这种方式中,服务器采用特定的TOE网卡来连接网络,TCP/IP协议栈功能由智能网卡完成,而iSCSI层的功能仍旧由主机来完成。这种方式较前一种方式,部分提高了服务器的性能。在三种iSCSI Initiator中,价格比iSCSI HBA便宜,但比软件Initiator 驱动程序贵,性能也居于两者之间。目前市面上Intel的TOE(TCP Offload Engine,TCP卸载引擎) HBA价格在150美金左右。

      3. iSCSI HBA卡实现方式

      使用iSCSI存储适配器来完成服务器中的iSCSI层和TCP/IP协议栈功能。这种方式使得服务器CPU无需考虑iSCSI以及网络配置,对服务器而言,iSCSI存储器适配器是一个HBA(存储主机主线适配器)设备,与服务器采用何种操作系统无关。该方式性能最好,但是价格也最为昂贵。在三种iSCSI Initiator中,价格最贵,但性能最佳。目前价格已由一开始的1000美金左右,下降跌至500美元左右。对于有高效能应用需求的企业,最好采用iSCSI HBA卡,如此才能获得最好的性能。

    考虑到笔者使用Linux

    服务器

    使用2.4G Intel 至强处理器,而且网络负载不大,本文使用第一种方式,拓朴结构见图2.

      

    \

      图2 网络拓朴结构

      说明:iSCSI 储存设备架构:

      型号为PROMISE Vtrak 15200 ,使用 iSCSI 机型;

      使用5 颗

    硬盘

    ,1 颗为 spare disk,其余4 颗做成 RAID-5;

      IP:iSCSI 储存设备的 IP 地址设置为 192.168.11.201

      连接到储存设备的账号与密码分别为: myaccount/iscsimy1Spw

      Linux 服务器:

      系统: Red Hat 9 Linux核心 ( 2.4.20-8mp )

      IP: Red Hat 9 Linux服务器IP地址设置为 192.168.10.3

      

    硬件

    :

    Dell

     PowerEdge 16000SC(2.4G Intel 至强处理器,512MB DDR ECC

    内存

    )基础型服务器。用于邮件服务器(商业版本的sendmail:3Rsoft)。

      1.准备工作

      因为安装iSCSI驱动需要配合核心来编译,所以会使用到内核源代码,此外,也需要编译器 ( compiler ) 的帮助,因此,先确定您的 Linux 系统当中已经下列软件的存在 :kernel-source 、kernel、gcc、perl、Apache。 打开一个终端,使用命令检查:

      # rpm -qa | grep gcc;rpm -qa | grep make

      # rpm -qa | grep kernel ;rpm -qa | grep make

      iSCSI 驱动程序下载网址是:http:///project/showfiles.p

    hp

    group_id=26396

       这个网站根据Linux内核(2.4/2.6)提供两种驱动程序,请根据内核版本下载相应的驱动,首先使用下面的命令查询目前所使用的Linux的内核版本:

      #uname –a

      Linux cao 2.4.20-8#1Thu Mar 13 17:54:28 EST 2003 i686 i686 i386 GNU/Linux

      2. 得到版本信息后,到其官方网站下载系统所需的驱动。下载完成就可以使用下面的命令安装该组件然后编译内核:

      #cd cd /usr/local/src

      # wegt http://nchc.dl./sourceforge/linux-iscsi/linux-iscsi-3.4.3.2.tgz

      #tar -zxvf linux-iscsi-3.4.3.2.tgz

      # cd linux-iscsi-3.4.3.2

      #make clean

      # make

      #make install

      3. 修改配置文件开始进行修改的工作:

      # vi /etc/iscsi.conf

      Username= myaccount #用户名#

      Password= iscsimy1Spw #口令#

      DiscoveryAddress=192.168.11.201 #iSCSI 储存设备的 IP 地址#

      Username=myaccount

      Password=iscsimy1Spw

      4. 启动iscs

      #/etc/init.d/iscsi start

      Starting iSCSI: iscsi iscsid fsck/mount

      5. 使用iscsi-ls命令可以看到更为详细的磁盘信息::

      # iscsi-ls

      *****************************************************************

       SFNet iSCSI Driver Version ... 3.4.3.2 (27-Jun-2005 )

      ****************************************************************

      TARGET NAME : iqn.1994-12.com.promise.target.3b.31.4.55.1.0.0.20

      TARGET ALIAS : Vtrak 15200

      HOST NO : 0

      BUS NO : 0

      TARGET ID : 0

      TARGET ADDRESS : 192.168.11.201:3260

      SESSION STATUS : ESTABLISHED AT Thu Nov 10 20:13:43 2005

      NO. OF PORTALS : 1

      PORTAL ADDRESS 1 : 192.168.11.201:3260,2

      SESSION ID : ISID 00023d000001 TSIH 04

      ****************************************************************

      iSCSI节点名称有两种格式,即 iqn-type 格式和 eui-type 格式。

      Linux常用的是iqn-type的格式为:

      6.使用fdisk命令进行磁盘分区

      fdisk命令格式

      fdisk [-l] [-b SSZ] [-u] device

      主要选项:

      -l: 察看指定的设备的分区表状况。

      -b SSZ:将指定的分区大小输出到标准输出上,单位为区块。

      -u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址。

      device:要这些操作的设备名称。

      fdisk是各种Linux发行版本中最常用的分区工具,是被定义为Expert级别的分区工具。我们可以通过fdisk来分区使用iscsi设备。它还包括一个二级选单,首先输入命令,然后出现问答式界面,用户通过在这个界面中输入命令参数来操作fdisk。见图3。

      

    \

      图3 fdisk分区工具

      选项介绍:

      a:设定硬盘启动区。

      b:编辑一个BSD类型分区。

      c:编辑一个DOS兼容分区。

      d: 删除一个分区。

      l: 察看指定的设备的分区表状况。

      m:显示Fdisk命令各个参数的说明。

      o:创建一个DOS分区。

      n:设定新的硬盘分区。

      p:打印分区信息。

      s:创建一个空

    Sun

    分区表。

      t:改变硬盘分区类型。

      q: 结束分区,不保存操作内容。

      v:校验硬盘分区表。

      w:结束分区,保存操作内容。

      x:进入高级操作模式。

      # fdisk /dev/hdd

      运行后出现fdiak的命令提示符:

      Command (m for help):

      使用n命令创建一个分区,会出现选择主分区(p primary partition)还是扩展分区(l logical)的提示,通常选用主分区。然后按照提示输入分区号(Partion number(1-4):)、新分区起始的磁盘块数(First Cylinder)和分区的大小,可以是以MB为单位的数字(Last cylindet or +siza or +sizeM or +sizeK:)。例如:

      fdisk /dev/sda

      Command (m for help): n

      Command action

       e extended

       p primary partition (1-4)

      p

      Partition number (1-4): 1

      First cylinder (1-189971, default 1):

      Using default value 1

      Last cylinder or +size or +sizeM or +sizeK (1-189971, default 189971):

      Using default value 1899719

      Command (m for help): w

      7.格式化分区:

      #mke2fs -t ext3 -c /dev/sda1

      8.设定加载点:

      #mkdir /cluster/raid

      # mount -t ext3 /dev/sda1 /cluster/raid

      经过以上的操作,我的 Linux服务器已经连接到 iSCSI 储存设备, 并且如同Linux 本机上面的一个 SCSI 硬盘一样。 使用的方式几乎一模一样。

      9. 自动挂载一个iSCSI卷

      可以通过向/etc/fstab.iscsi (filesystem table)中添加指令行来告诉Linux如何自动挂载卷了。使用vi编辑器修改/etc/fstab,依次使用shift+G命令(将光标定位到最后一行)然后使用o命令(插入新行并且进入编辑状态),输入以下内容:

      /dev/sda1 /cluster/raid ext3 defaults 0 0

      存盘后从新启动计算机Linux即可自动挂载iSCSI卷。

    五、保护iSCSI安全

      

    光纤

    通道环境给人感觉具有比较高的安全性,原因在于它们是受控的专有网络。iSCSI 给人感觉安全性较低,原因在于它是基于以太网的网络。不过从本质上来说,光纤通道是没有安全功能的,而iSCSI提供了非常丰富的安全功能。iSCSI 规范提供了initiator与目标端两方面的身份验证(使用 CHAP、SRP、Kerberos 和 SPKM),能够阻止未经授权的访问,只允许那些可信赖的节点进行访问。另外,IPsec Digests(IPsec 摘要)和 Anti-Reply(防回复)功能阻止了插入、修改和删除操作,而 IPsec Encryption(IPsec 加密)功能防止被偷听,确保了私密性。

      最简单的iSCSI实现方式,就是没有任何加密和认证机制的连接。这种方式仅提供“SCSI指令在TCP/IP协议上传输”这样一个最基本的功能,连接到网络上的任何一台主机都可以毫无阻碍地连接到iSCSI

    存储

    设备上。这种方式显然对任何危险都没有防范能力。但是,这种方式也有一个明显的优势,那就是性能。没有了认证和加密,自然也就省去了很多额外的开销。如果您非常需要您的iSCSI磁盘阵列全速工作,这种方式无疑是最好的选择。 当然,选择这种方式的时候,用来连接iSCSI磁盘阵列的网络

    交换机

    最好是与外界隔离的。

       妥善选择口令

      口令应避免与个人资料有关系,不要选用诸如身份证号码、出生日期、

    电话

    号码等作为密码。建议选用字母、数字混合的方式,以提高密码破解难度。尽量避免在不同的操作系统使用同一密码,否则密码一旦遗失,后果将不堪设想。黑客们经常用一些常用字来破解密码。曾经有一位美国黑客表示,只要用“password”这个字,就可以打开全美多数的计算机。其它常用的单词还有:account、ald、alpha、beta、computer、dead、demo、dollar、games、bod、hello、help、intro、kill、love、no、ok、superuser、system、test、work、yes等。另外相信设置空白口令这件事就会让很多网络管理员头疼。很多用户嫌口令难记,干脆留空,或者随手设成111111之类。这种口令实在令人着急,稍微耐心一点儿的黑客,手工都可以试出来,更何况眼下各种字典攻击程序满天飞。对iSCSI磁盘阵列来说,情况也是一样。如果仅靠用户认证不能解决问题,就需要借鉴传统IP网络的办法,在内网和外网之间架设

    防火墙

    ,阻击外面那些有充分精力和耐心的“尝试者”。 如果iSCSI磁盘阵列(Target)和主机(Initiator)需要跨广域网连接,最好使两者以

    VPN

    互连。总之就是一个目的,不让iSCSI磁盘阵列使用公网的IP地址。

      总结:至此这里给予Linux网络下中小企业一个低成本的iSCSI的解决方案。

      iSCSI小贴士:

      1.应该使用

    硬件

     initiator 还是软件 initiator?

      iSCSI initiator 是使用硬件还是软件要取决于多种因素,包括预算、性能要求以及

    服务器

    工作负荷。软件 iSCSI initiator 能够实现成本最低的 iSCSI 解决方案。纯软件 iSCSI initiator 使用标准以太

    网卡

    ,并依靠主机

    CPU

     来处理 iSCSI 命令和 TCP/IP 栈。对于具有 2G CPU 的最新一代服务器来说,大部分客户工作负荷在 iSCSI 协议处理方面不会引发明显的性能开销。如果您的服务器拥有千兆以太网卡则对软件 initiator 的评测过程几乎不会有任何问题,原因是在绝大多数流行的操作系统中,initiator 都是免费提供的。如果 CPU 较陈旧,服务器的负荷较重,则可能更适合采用硬件 iSCSI initiator。硬件 iSCSI initiator 会将 iSCSI 和 TCP/IP 处理工作转移到 iSCSI HBA 中。其结果就是能够大幅度降低 CPU 的性能开销,这点堪与光纤通道 HBA 相比。硬件 initiator 还能提供软件解决方案所不具备的功能,例如支持高可用性环境的硬件多通道功能,支持密集服务器环境中的远程引导功能。

      2.硬件和软件 initiator 如何影响应用程序的性能?

      如果应用程序位于负担较轻的服务器上,在大多数情况下,采用软件 initiator 的 iSCSI 的性能开销也不会明显影响应用程序的性能。如果服务器的负荷较重,则必须采用硬件 iSCSI initiator。不过,在大多数环境中,传输带宽以及主机 CPU 的性能开销完全不是问题 — 应用程序性能问题在很大程度上要归因于存储的轴数有限(承担工作负荷的磁盘太少)。这不是协议或传输问题。这是直连式存储系统的一个普遍问题,但是采用基于 iSCSI 的 SAN 解决方案可以非常方便地解决这一问题。

      3.Linux下哪些服务器适合使用iSCSI构架?

      目前Linux的擅长应用领域是:单一应用的基础服务器应用,譬如DNS和DHCP服务器、Web服务器、目录服务器、防火墙、文件服务器、打印服务器、互联网连接代理服务器、数据库。其中,数据库服务器及邮件服务器最适合采用iSCSI构架,另外NetApp表示由于ERP数据库系统采用块协议,所以非常适合建置在iSCSI构架 上。

      参考文件:

      Linux iSCSI project:http://linux-iscsi./

      A Quick Guide to iSCSI on Linux:http://www./articles/iscsi/index.html

      

    http://www./objects/support/Solaris_Cisco-APP-CHN-004-01.pdf

    

    

    

    

    

    

    安装:

    

    

    1.服务器端:iscsitarget-0.4.16.tar.gz

    #tar xvfz iscsitarget-0.4.16.tar.gz

    #cd iscsitarget-0.4.16

    #make

    [root@localhost iscsitarget-0.4.16]# make

    Applying Patch compat-2.6.22-2.6.23.patch

    patching file kernel/block-io.c

    patching file kernel/config.c

    patching file kernel/digest.c

    patching file kernel/event.c

    Applying Patch compat-2.6.19-2.6.21.patch

    patching file kernel/event.c

    patching file kernel/iscsi.c

    Hunk #1 succeeded at 1762 (offset 5 lines).

    patching file kernel/tio.c

    Applying Patch compat-2.6.14-2.6.18.patch

    patching file kernel/iscsi.h

    patching file kernel/digest.c

    patching file kernel/file-io.c

    patching file kernel/iscsi.c

    patching file kernel/tio.c

    Applying Patch compat-rhel4.patch

    patching file kernel/config.c

    patching file kernel/event.c

    make -C usr

    make[1]: Entering directory `/utils/iscsitarget-0.4.16/usr'

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o ietd.o ietd.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o iscsid.o iscsid.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o conn.o conn.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o session.o session.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o target.o target.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o message.o message.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o ctldev.o ctldev.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o log.o log.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o chap.o chap.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o event.o event.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o param.o param.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o plain.o plain.c

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o isns.o isns.c

    cc ietd.o iscsid.o conn.o session.o target.o message.o ctldev.o log.o chap.o event.o param.o plain.o isns.o -o ietd -lcrypto

    cc -O2 -fno-inline -Wall -Wstrict-prototypes -g -I../include -c -o ietadm.o ietadm.c

    cc ietadm.o param.o -o ietadm

    make[1]: Leaving directory `/utils/iscsitarget-0.4.16/usr'

    make -C /lib/modules/2.6.9-55.EL/build SUBDIRS=/utils/iscsitarget-0.4.16/kernel modules

    make[1]: Entering directory `/usr/src/kernels/2.6.9-55.EL-i686'

     CC [M] /utils/iscsitarget-0.4.16/kernel/tio.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/iscsi.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/nthread.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/wthread.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/config.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/digest.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/conn.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/session.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/target.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/volume.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/iotype.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/file-io.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/null-io.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/target_disk.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/event.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/param.o

     CC [M] /utils/iscsitarget-0.4.16/kernel/block-io.o

     LD [M] /utils/iscsitarget-0.4.16/kernel/iscsi_trgt.o

     Building modules, stage 2.

     MODPOST

     CC /utils/iscsitarget-0.4.16/kernel/iscsi_trgt.mod.o

     LD [M] /utils/iscsitarget-0.4.16/kernel/iscsi_trgt.ko

    make[1]: Leaving directory `/usr/src/kernels/2.6.9-55.EL-i686'

    #make install

    [root@localhost iscsitarget-0.4.16]# make install

    `usr/ietd' -> `/usr/sbin/ietd'

    `usr/ietadm' -> `/usr/sbin/ietadm'

    `etc/initd/initd.redhat' -> `/etc/init.d/iscsi-target'

    `etc/ietd.conf' -> `/etc/ietd.conf'

    `etc/initiators.allow' -> `/etc/initiators.allow'

    `etc/initiators.deny' -> `/etc/initiators.deny'

    `doc/manpages/ietadm.8' -> `/usr/share/man/man8/ietadm.8'

    `doc/manpages/ietd.8' -> `/usr/share/man/man8/ietd.8'

    `doc/manpages/ietd.conf.5' -> `/usr/share/man/man5/ietd.conf.5'

    install: creating directory `/usr/share/doc/iscsitarget'

    `ChangeLog' -> `/usr/share/doc/iscsitarget/ChangeLog'

    `COPYING' -> `/usr/share/doc/iscsitarget/COPYING'

    `README' -> `/usr/share/doc/iscsitarget/README'

    `README.vmware' -> `/usr/share/doc/iscsitarget/README.vmware'

    install: creating directory `/lib/modules/2.6.9-55.EL/kernel/iscsi'

    `kernel/iscsi_trgt.ko' -> `/lib/modules/2.6.9-55.EL/kernel/iscsi/iscsi_trgt.ko'

    Running depmod

    #vi /etc/ietd.conf

    找到这个条目修改成你机器的文件位置

    Lun 0 Path=/dev/sdj,Type=fileio

    Alias itest

    (此处的设备可以是IDE盘或LV)

    启动服务器端:

    #service iscsi-target start

    2.客户端:iscsi-initiator-utils-4.0.3.0-5.i386.rpm

    #rpm -ivh iscsi-initiator-utils-4.0.3.0-5.i386.rpm

    修改配置文件:/etc/iscsi.conf

    Target Name Category

    下的这个"#"号删除

    #TargetName=iqn.1987-05.com.jsh:00.0d1d898e8d66.t0

    TargetName=iqn.1987-05.com.jsh:00.0d1d898e8d66.t0

    Discovery Address Category

    找到这个值修改成你服务器的IP地址

    #DiscoveryAddress=192.168.1.241:3260

    DiscoveryAddress=192.168.1.241:3260

    #service

    iscsi

     start

    用iscsi-ls -l查看到,系统多了一个DEV:/dev/sda

    [root@localhost /]# iscsi-ls -l

    *******************************************************************************

    SFNet iSCSI Driver Version ...4:0.1.11-4(15-Jan-2007)

    *******************************************************************************

    TARGET NAME : iqn.2001-04.com.example:storage.disk2.sys1.xyz

    TARGET ALIAS :

    HOST ID : 1

    BUS ID : 0

    TARGET ID : 0

    TARGET ADDRESS : 192.168.1.241:3260,1

    SESSION STATUS : ESTABLISHED AT Tue Apr 22 16:36:42 CST

    2008

    SESSION ID : ISID 00023d000001 TSIH 200

    DEVICE DETAILS:

    ---------------

    LUN ID : 0

     Vendor: IET Model: VIRTUAL-DISK Rev: 0

    

    Type

    : Direct-Access ANSI SCSI revision: 04

     page83 type1: 49455400000000000000000001000000110600000d000000

     page80: 0a

     Device: /dev/sda

    *******************************************************************************

    编辑/etc/fstab文件(先自己创建/mnt/data1)

    /dev/sda1 /mnt/data1 ext3 _netdev 0 0

    挂接分区:

    mount /mnt/data1

    df可看到/dev/sda1已挂接进来。

    [root@localhost /]# df -h

    Filesystem Size Used Avail Use% Mounted on

    /dev/mapper/VolGroup00-LogVol00

     73G 4.6G 65G 7% /

    /dev/hda1 99M 9.4M 85M 10% /boot

    none 248M 0 248M 0% /dev/shm

    /dev/hdd 2.2G 2.2G 0 100% /media/cdrom

    /dev/sda1 689M 80M 575M 13% /mnt/data1

    windows上也可以使用iscsi盘,只是需要到网上下载iscsi客户端软件。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多