服务器 频道

Linux网络环境下iSCSI配置攻略(下)

  【IT168 服务器学院】四、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://sourceforge.net/project/showfiles.php?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.net/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.sourceforge.net/

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

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

0
相关文章