menu

精英意识会让人走向孤独

忘记社区密码或者保密贴查看密码的,请给我留言,并留联系方式。

Avatar

Linux上搭建软件iSCSI存储设备

ISCSI这个概念炒作了很多年了,直到前些天用到了iSCSI设备,才有了个全面了解
进而发现,用服务器安装Linux可以充当iSCSI的存储设备
linux还真是伟大啊,什么角色都可以做
此外,共享的文件系统,借助于iSCSI,可以变成本地磁盘来使用了
很多特性终于可以在远程存储上使用了
好几个月没写长篇技术文章了,终于又鼓捣出来一篇的说

本文全文为PDF格式,转载请注明出处。
http://www.swsoft.com.cn/downloads/Prima/Docs/iSCSI_HOWTO.pdf

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

目 录

基于Linux后端的iSCSI配置与使用
一、 iSCSI简介
1. NAS
2. SAN
3. iSCSI架构
二、 配置Linux存储服务器为iSCSI-target
1. iscsi-target-enterprise安装
2. 配置与启动
三、 配置Windows为iSCSI-initiator
1. 微软iSCSI-initiator安装
2. 配置与启动
四、 配置Linux为iSCSI-inititor
1. 安装
2. 配置与启动
五、 总结

一、 iSCSI简介

提到iSCSI,这里需要首先介绍一下目前应用最为广泛的两种数据存储设备:NAS与SAN。

1. NAS

NAS的全称是Network-attached storage,即网络连接存储设备。NAS设备通常是一个完整的服务器架构,包含了CPU、内存、网卡、磁盘,其上安装通用操作系统或者精简的专用操作系统,并通过扩展接口连接了大量存储阵列。NAS的访问形式是通过TCP/IP网络进行远程访问,NAS自身的操作系统上运行着相应的网络服务程序,比如Windows文件共享服务、Linux Samba文件共享服务、Linux/Unix的NFS文件系统等。需要访问NAS的设备,通过TCP/IP网络,在远程使用客户端软件来访问。Windows文件共享是操作系统自身已经包含,Linux则需要安装Samba客户端或者NFS客户端来访问NAS设备。

NAS主要用途是大容量存储,并带有一定的冗余功能,侧重点在于容量和相对较低的实施成本,对于吞吐量、并发数、冗余性能等通常要求不高。此外,由于NAS的访问形式是文件共享式的访问,操作系统只能将NAS设备挂载成一个网络共享设备,而一些操作系统原生特性是无法在网络共享文件系统上实现的,例如磁盘配额、格式化磁盘、组件磁盘阵列等都不能在远程上实现,这也给NAS的应用造成了一定的局限性。

如图,在远程的Windows系统中挂载NAS提供的网络驱动器。

如图,在远程Windows服务器上,NAS被作为网络驱动器被映射后,通过磁盘管理器功能是无法获知NAS的任何信息的。对NAS系统的底层操作如磁盘配额、组建阵列、格式化等都需要在NAS服务器本地来实施,不能在远程访问的客户端上进行。

2. SAN

SAN的全称是Storage Area Network 。对比于NAS,SAN存储更像是一个外置磁盘阵列,SAN设备本身通常只包含阵列、控制器、接口卡,不包含CPU、内存、通用操作系统。SAN通过标准外置SCSI接口或者光纤SCSI接口连接到服务器上。因此,使用SAN的时候,相应的服务器必须带有外置SCSI、光纤接口等扩展卡。连接到SAN以后,在操作系统上,可以将SAN提供的磁盘阵列直接读取为本地磁盘驱动器,,操作系统不关心这些硬盘是安装在服务器内部的,还是装载SAN设备内的。

SAN的侧重点在于高性能、高可靠性,SAN通常容量不是很大,但是提供了光纤、SCSI接口用于同时连接到多个服务器上,SAN所提供的阵列带有RAID5以上的高级冗余功能,确保当部分磁盘故障时,系统性能下降的幅度尽可能的小。SAN的缺点是实施成本比较高,如果采用外置SCSI接口,则需要速度匹配的高性能SCSI接口卡。如果采用光纤接口,还需要光纤交换机等设备。

在客户端上使用SAN设备,无论其接口形式是何种,就像使用本地磁盘一样,从磁盘管理器中可以完全看到服务器挂载的SAN设备。如下图,磁盘1和磁盘2分别映射为分区“P”及分区“O” ,即是远程的SAN存储设备。

NAS与SAN的特性简单对比如下表:

3. iSCSI架构

从上文的介绍可以看出,NAS和SAN分别有着不同的侧重点。SAN虽然有着很好的性能,但是受限于外置SCSI、光纤通道等连接设备,部署成本较高,且外置SCSI铜缆受到线缆长度的限制,不能远距离部署使用。为了改善SAN的这一缺点,iSCSI协议和规范在2003年被正式确定下来。

ISCSI的全称是IP-based SCSI,通过TCP/IP和Internet来传输SCSI的数据包,即基于以太网接口的外置SCSI存储设备。ISCSI分成服务器端和客户端,服务器端叫做iSCSI-target,在实际应用中就是支持iSCSI协议的SAN设备;客户端叫做iSCSI-initiator,在实际应用中就是要访问SAN的服务器。在服务器端和客户端中间,数据的传输通道借助于TCP/IP协议完成,服务器端和客户端都有自己的IP地址,数据传输可通过交换机、路由器进行中继,进而达到在很远的距离上,各种客户端设备依然可以连接到SAN并进行工作。

在基于外置SCSI铜缆和光纤SCSI通道的SAN上,SAN连接到的服务器是不需要进行任何特殊配置的,操作系统会将连接上来的SCSI设备视为一个物理磁盘设备。而iSCSI是通过以太网接口连接的,标准的操作系统仅仅将SAN视为一个网络节点,可以通过TCP/IP访问,但不能将其作为物理磁盘设备来使用。这就是为什么需要iSCSI-initiator客户端软件的原因。

如图,iSCSI的结构是部署方式:

为了进一步降低部署成本,可以在Windows服务器上和Linux服务器上安装iSCSI-target服务器端软件,让现有的服务器变成支持iSCSI协议的SAN存储设备。

本文主要讲述的就是如何在一台Linux服务器上安装iSCSI-target服务器端,并分别在

二、 Windows、Linux上安装iSCSI-initiator客户端访问SAN。

1. iscsi-target-enterprise安装

ISCSI的安装有多种,可以通过源代码编译安装,也可以直接使用现有的rpm二进制包来完成。首先上传相应的安装包到服务器上,包括iscsi-target的主包和一个内核模块的包。注意,请无比确认上传的版本和当前内核的相匹配。

[root@raid ~/iscsi-target]# ls
iscsitarget-0.4.12-4_EL.i386.rpm  iscsitarget-kernel-0.4.12-4_2.6.9_22.EL.i386.rpm
[root@raid ~/iscsi-target]#

执行rpm -ivh 安装iscsi-target相关rpm文件。

[root@raid ~/iscsi-target]# rpm -ivh iscsitarget-*.rpm
Preparing...                ########################################### [100%]
   1:iscsitarget-kernel     ########################################### [ 50%]
   2:iscsitarget            ########################################### [100%]
[root@raid ~/iscsi-target]#

将服务设置成自动启动。

[root@raid ~/iscsi-target]# chkconfig --add iscsi-target
[root@raid ~/iscsi-target]# chkconfig --level 345 iscsi-target on

安装完成。

2. 配置与启动

首先将老的配置文件彻底改名,换成新的配置文件。

[root@raid ~]# mv /etc/ietd.conf /etc/ietd.conf.old

编辑/etc/ietd.conf,写入全新的conf配置,内容如下:

Target iqn.2007-10.cn.com.swsoft.test.iscsi:test
IncomingUser public public123456
Lun 0 Path=/dev/sdb1,Type=fileio
Lun 1 Path=/dev/sdb2,Type=fileio
MaxConnections 5

这是一个iscsi-target所需要的最小配置。第一行target表示本设备的完全标识,命名方法是iqn.yyyy-dd.domain_name加冒号id。iqn是保留名称,必须用iqn开头,yyyy-dd表示年和日期,表示此SAN设备建立时间。后边的域名和冒号自行起名即可。IncomingUser是授权的用户名和密码,用空格隔开。注意:由于微软的Windows iSCSI-initiator要求密码长度需要在6到12位之间,否则会报错,因此这里设置密码长度要在6到12位之间。Lun 0 这一行表示SAN要提供访问的设备,例如/dev/sda1。如果有多个设备,可以写多行。最后一行MaxConnections 5表示最大并发连接是5。

设置完成后启动iscsi-target服务。

[root@raid ~]# /etc/init.d/iscsi-target restart
Stoping iSCSI target service:                                               [  OK  ]
Starting iSCSI target service:                                               [  OK  ]
[root@raid ~]#

如果服务启动成功,则检查TCP协议的3260端口,可看到监听。

[root@raid ~]# netstat -anp | grep 3260
tcp   0       0 0.0.0.0:3260       0.0.0.0:*       LISTEN     4860/ietd
tcp   0       0 :::3260            :::*           LISTEN     4860/ietd
[root@raid ~]#

三、 配置Windows为iSCSI-initiator

1. 微软iSCSI-initiator安装
微软为Windows2003系统提供了免费的iSCSI-initiator支持,可以从微软官方网站下载到这个组件。将其下载到桌面后,开始安装。

双击执行安装,点击下一步继续。

选中所有的安装项目。

同意许可协议。

安装进行中。

安装完成。

2. 配置与启动

双击桌面上的图标启动iSCSI-initiator。

启动iSCSI-Initator管理器的界面。

选择标签“Discovery”,然后点击Add按钮。

输入要连接的iSCSI-target服务器的ip地址和端口。(端口默认是3260)

添加设备完成。

点击“Targets”标签,可看到这个设备现在是inactive状态。

点击屏幕下方的logon按钮,登录到iSCSI-target上。

选中第一个选项,再每次系统启动时候自动进行连接。然后点击下边的“高级按钮” 。

在高级选项框中,首先选中“CHAP login infomation” ,然后输入用户名和密码。在前文配置iscsi-target过程中,用户名被设置为“public” ,密码设置为“public123456” 。这里输入用户名和密码,然后点击确定。

点击确定后,可看到设备的状态变成了“Connected” ,即连接成功了。

现在进入Windows的磁盘管理器,可以看到有磁盘1和磁盘2两个没有初始化的磁盘出现,他们就是来自iscsi-target上映射过来的/dev/sdb1和/dev/sdb2设备。

在磁盘上点击鼠标右键,首先进行初始化。

选中两个磁盘都进行初始化。

初始化后的磁盘将可以被调用。

创建分区并格式化完毕。

设备已经可以使用了。

四、 配置Linux为iSCSI-inititor

1. 安装

从Redhat Enterprise Linux AS 4.0起,已经提供了对ISCSI的支持。从第四张光盘内可找到名为 iscsi-initiator-utils的rpm包,将其上传到服务器上。

执行rpm -ivh 命令安装。

[root@test ~]# rpm -ivh iscsi-initiator-utils-4.0.3.0-2.i386.rpm 
warning: iscsi-initiator-utils-4.0.3.0-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...            ########################################### [100%]
   1:iscsi-initiator-utils  ########################################### [100%]
[root@test ~]#

将服务设置为自动启动状态。

[root@test ~]# chkconfig --add iscsi 
[root@test ~]# chkconfig --level 345 iscsi on

安装完成。

2. 配置与启动

首先将老的配置文件彻底改名,换成新的配置文件。

[root@test ~]# mv /etc/iscsi.conf /etc/iscsi.conf.old

编辑/etc/iscsi.conf,写入全新的conf配置,内容如下:

DiscoveryAddress=192.168.7.100 
Username=public
Password=public123456

在这个配置文件中,第一行表示要查找的ISCSI设备的IP地址,下边设置好用户名和密码。保存配置文件并退出。

注意:目前的某些版本上,iscsi-initiator在开启CHAP身份验证的时候,会出现拒绝登录的错误。遇到这种情况,请关闭iscsi-target和iscsi-initiator上的所有身份验证选项,并改用防火墙IP地址限制进行访问策略控制。

启动iscsi-initiator后台服务。

[root@test ~]# /etc/init.d/iscsi restart
Stopping iscsid:                                           [  OK  ]
Checking iscsi config:                                     [  OK  ]
Loading iscsi driver:                                      [  OK  ]
Starting iscsid:                                           [  OK  ]
[root@test ~]#

服务启动完成后,检查/var/log/message里边的日志,确认是否加载SAN成功。如果有下边这样的一段,则表示加载成功。

Oct 17 18:03:30 vzlinux iscsid[4153]: Connected to Discovery Address 192.168.7.100 
Oct 17 18:03:30 vzlinux kernel: iscsi-sfnet:host12: Session established
Oct 17 18:03:30 vzlinux kernel: scsi12 : SFNet iSCSI driver
Oct 17 18:03:30 vzlinux kernel:   Vendor: IET       Model: VIRTUAL-DISK      Rev: 0   
Oct 17 18:03:30 vzlinux kernel:   Type:   Direct-Access                      ANSI SCSI revision: 04
Oct 17 18:03:30 vzlinux kernel: SCSI device sda: 4194304 512-byte hdwr sectors (2147 MB)
Oct 17 18:03:30 vzlinux kernel: SCSI device sda: drive cache: write back
Oct 17 18:03:30 vzlinux kernel: SCSI device sda: 4194304 512-byte hdwr sectors (2147 MB)
Oct 17 18:03:30 vzlinux kernel: SCSI device sda: drive cache: write back
Oct 17 18:03:30 vzlinux kernel:  sda: sda1
Oct 17 18:03:30 vzlinux kernel: Attached scsi disk sda at scsi12, channel 0, id 0, lun 0
Oct 17 18:03:30 vzlinux scsi.agent[4192]: disk at /devices/platform/host12/target12:0:0/12:0:0:0
Oct 17 18:03:30 vzlinux kernel:   Vendor: IET       Model: VIRTUAL-DISK      Rev: 0   
Oct 17 18:03:30 vzlinux kernel:   Type:   Direct-Access                      ANSI SCSI revision: 04
Oct 17 18:03:30 vzlinux kernel: SCSI device sdb: 4194304 512-byte hdwr sectors (2147 MB)
Oct 17 18:03:30 vzlinux kernel: SCSI device sdb: drive cache: write back
Oct 17 18:03:30 vzlinux kernel: SCSI device sdb: 4194304 512-byte hdwr sectors (2147 MB)
Oct 17 18:03:30 vzlinux kernel: SCSI device sdb: drive cache: write back
Oct 17 18:03:30 vzlinux kernel:  sdb: sdb1
Oct 17 18:03:30 vzlinux kernel: Attached scsi disk sdb at scsi12, channel 0, id 0, lun 1
Oct 17 18:03:30 vzlinux scsi.agent[4239]: disk at /devices/platform/host12/target12:0:0/12:0:0:1

执行iscsi-ls命令查看刚才连接的设备。

[root@vzlinux ~]# iscsi-ls 
*******************************************************************************
SFNet iSCSI Driver Version ...4:0.1.11(12-Jan-2005)
*******************************************************************************
TARGET NAME             : iqn.2007-10.cn.com.swsoft.test.iscsi:test
TARGET ALIAS            : 
HOST ID                 : 12
BUS ID                  : 0
TARGET ID               : 0
TARGET ADDRESS          : 192.168.7.100:3260,1
SESSION STATUS          : ESTABLISHED AT Wed Oct 17 18:03:30 CST 2007
SESSION ID              : ISID 00023d000001 TSIH 100
*******************************************************************************
[root@vzlinux ~]#

能够查看到设备则表示配置成功了。

作为客户端的initiator服务器将远程SAN上的磁盘视为了/dev/sdb的标准SCSI磁盘设备。现在可以用fdisk/mkfs等命令来执行分区、格式化等操作了。

[root@vzlinux ~]# fdisk -l
.........
Disk /dev/sda: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         260     2088418+   7  HPFS/NTFS
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         260     2088418+   7  HPFS/NTFS
[root@vzlinux ~]#

格式化磁盘为ext3格式。

[root@vzlinux ~]# mkfs.ext3 /dev/sdb1 
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
261120 inodes, 522104 blocks
26105 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
16320 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: 
done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@vzlinux ~]#

挂载这个设备到某目录。

[root@vzlinux ~]# mkdir -p /mnt/SAN/sdb1                                                                                                   
[root@vzlinux ~]# mount /dev/sdb1 /mnt/SAN/sdb1 
[root@vzlinux ~]# ls -l /mnt/SAN/sdb1
total 16
drwx------  2 root root 16384 Oct 17 18:10 lost+found
[root@vzlinux ~]#

现在配置完成,磁盘可以使用了。

五、 总结

具有高度灵活性和较低成本的ISCSI出现,为存储领域提供了更多选择。更多文档,请参考iscsi-enterprise-target及iscsi-initiator软件包内自带文档。

全文完。
2007-10-17
powered by pcman.

评论已关闭