一、选用ISCSI原因
近期为了满足工作项目的设计需求,需要一个生产环境局域网内共享的大容量存储环境。考虑到价格因素,我选择采购了一台专用的网络存储服务器,硬盘全部为
SATA 硬盘,通过自机网卡进行文件系统级别的共享。考虑到网络存储服务器只是用来存储别无他用,所以在系统的选择方面,我选择了linux
来提高机器的性能和效率,并使用ext2或ext3格式提高硬盘读写效率,当然这些效率的提高都是与Windows
操作系统进行对比的。对于共享,我选择安装使用常见的samba 来对硬盘某一目录进行NFS 方式文件共享,其余各服务器均使用windows
2003 x64 R2 操作系统,并统一映射网络路径//192.168.1.200/share
目录为网络驱动器盘符z:到网络存储服务器共享出的目录中。
在项目中期,随着功能测试和性能测试的开展,发现我们基于.net 开发的web
应用,并不能很好的直接使用网络驱动器,造成了不小的麻烦,而且我们所使用的oracle
数据库需要的很多的功能也不能正常使用这种网络共享。所以需要一个能让操作系统认为共享磁盘为本地硬盘的的一种解决方案才是最优的解决方案。
二、了解ISCSI
在所有剩余可选网络存储的解决方案中,除SAN 方式以外最好的方案不外乎ISCSI架构方式了,在ISCSI
架构中,各服务器作为客户端直接连接网络存储服务器的一个空间,并映射为本地的SCSI
逻辑硬盘,这样各个服务器对此硬盘操作的时候,就如同本地硬盘一样访问读写。并且由于ISCSI是块直接读写,理论上应该比其他共享方式在效率上要快很
多。
首先我们要了解iSCSI 架构中的角色与专词,iSCSI 的储存设备称为iSCSI Target(或称iSCSI Target
Device),例如iSCSI 磁盘阵列柜、iSCSI 磁带柜等,而iSCSI 卡称为iSCSI HBA(Host Bus
Adapter),当然,iSCSI 允许使用一般Ethernet NIC 卡(网络卡,为了效率多半是GbE以上等级)与Ethernet
Switch(交换器),若使用一般GbE 卡,则还需要搭配软件才能让GbE 卡收发iSCSI 协议,此软件称为iSCSI
Initiator,事实上iSCSI HBA的角色也等同于iSCSI Initiator。
简单来说在软件构成的ISCSI 方案中,ISCSI Target可以被视作ISCSI服务器端,ISCSI Initiator
可以被视作客户端。在本次项目中,我决定由现有的网络存储服务器担任ISCSI Target,其余服务器都安装iSCSI
Initiator来进行与存储的通信并映射网络存储服务器的指定空间为本地硬盘。
不过,使用软件实现ISCSI必须多加权衡,由于它运用服务器的CPU 来进行iSCSI
协议的编解运算,会折损服务器的本务运算效能(即伺服应用服务的运算),建议在性能非常好的服务器上使用,且也要多斟酌效能冲击性,也不建议直接以服务器
内唯一的GbE 网埠来传发iSCSI 协议,因为这将阻碍服务器原有对前端服务的能力(即Internet/LAN 与SAN
的传输交迭影响),所以多会额外加装第二张GbE 网卡,以另一专属区网(SAN)的作法来传输iSCSI。
三、软件实现ISCSI 需要的工具和准备工作
软件实现ISCSI 要按操作系统分,主要推荐以下几种:(都是免费的,或者收费我还不知道!-_-!)
|
Target |
Initiator |
Linux |
|
用linux 自带的就好了 |
Windows |
starwind |
starport |
windows 下的Initiator 还可以使用微软自己的客户端:
如果操作系统为Windows VISTA 的话,那么恭喜你,系统已经自带ISCSI Initiator 了。
其实不管是由任意的操作系统做 Target 还是做Initiator ,由于有规范的ISCSI 协议的约束,都是可以相互进行通信的,所以可以任意自由组合选择。
废话到此为止,赶快介绍一下Linux 下的 ISCSI Target的安装方法!
四、用Linux Red Hat Enterprise 4 + ISCSI Target 软件实现一个强大的ISCSI Target 网络存储服务器。
以下操作全部为root 权限下操作。
1.首先肯定是准备好Linux 系统环境。
操作系统我选用的是Red Hat Enterprise Linux 4 (RHEL4) ,别的我也没有时间试,这个版本历经考验比较稳定。
安装的时候,如果系统只用来做存储服务器的话,选择基本的安装就好,不用安装杂七杂八的服务。
安装完操作系统,最好配置该机上网,更新Kernel(当然需要有RedHat Network 口令),使用以下命令:
(当然如果你用的版本就是AS 4 的话,可以完全跳过这一步。)
up2date kernel
(更新完成后,要重新关闭并打开一个新的终端窗口。)
然后更新Kernel 组件
up2date kernel-devel openssl-devel gcc rpm-build
2. 下载并安装iSCSI Enterprise Target (IET) RPM 包。
我计划下载RPM 包以后 放在/usr/src/iscsitarget,然后再编译运行,当然你可以自己选择喜欢的安装位置。执行以下命令:
建立安装位置目录
mkdir /usr/src/iscsitarget
进入目录
cd /usr/src/iscsitarget
下载安装包
wget
或
wget http://www.digicola.com/developer/iscsitarget-0.4.12-6.src.rpm
(当然也可以用浏览器访问 来获取其他版本或形式的安装包,保存在安装位置目录中)
3.解压RPM源文件
rpmbuild --rebuild iscsitarget-0.4.12-6.src.rpm
4.build ISCSI target 和 ISCSI Kernel 源,并进行安装
rpm -Uvh
/usr/src/redhat/RPMS/i386/iscsitarget-0.4.12-6.i386.rpm
/usr/src/redhat/RPMS/i386/iscsitarget-kernel-0.4.12-6_2.6.9_22.0.2.EL.i386.rpm
5.在chkconfig 中添加并启用 ISCSI target 服务。
chkconfig --add iscsi-target
chkconfig --level 2345 iscsi-target on
或
chkconfig iscsi-target on
6.配置 ISCSI Target 服务
ISCSI Target 服务的配置文件位于 /etc/ietd.conf 。可以使用vi 编辑器进行编辑,这里我准备将linux 本地的 sdb 物理盘共享出来用作 ISCSI DISK.
命令:
vi /etc/ietd.conf
内容大致如下(更改后):
# iscsi target configuration
Target iqn.2008-03.com.digicola:storage.lun1
IncomingUser iscsiuser pass123
OutgoingUser
Lun 0 Path=/dev/sdb,Type=fileio
Alias iDISK0
#MaxConnections 6
大致说明:
IncomingUser 和 OutgoingUser 表示ISCSI 客户端的用户名和密码,用户名和密码都可以为空,默认为allow权限,密码最长可为12个字符。
Target iqn.2000-12.com.digicola:storage.lun1 表示该ISCSI Target 的命名,命名在同一子网内应该是唯一的,标准命名方式为:
"Target "+ target名字 (格式如下: iqn.yyyy-mm.
[:identifier] )
本次配置中 Type 的设定为"fileio",我主要用来对一个磁盘进行存储共享。
当然也可以针对需要设置为: "file" or "LVM" (稍微玩过linux 的人都能看明白吧!这里不用做过多介绍)。
7.启动 ISCSI Target 进程,并检查ISCSI Target 启动状态
使用以下命令启动ISCSI 服务:
service iscsi-target restart
如果服务启动正常,为了确认建议还是到系统日志中检查一下:
cat /var/log/messages
当然你的配置出错,有可能在服务启动的时候显示服务启动正常,但是链接不上,这时你可以在系统日志中查看到具体的错误类型。
至此,一个标准的 ISCSI Target 服务就配置完毕了,你现在就可以使用 ISCSI Initiator 链接到这个服务器的 IP:3260 就可以链接上Target 了。
链接至Target 以后,就可以在磁盘管理器中找到你共享出的硬盘了,你可以随意对其格式化,分区做本地硬盘的任何操作。
至于各系统版本 的ISCSI Initiator 的链接过程,我会另外建立一篇专门描述。
阅读(2031) | 评论(0) | 转发(1) |