免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6654 | 回复: 15
打印 上一主题 下一主题

[NetBSD] 使用NetBSD构建基于iSCSI的小型SAN [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-06 01:42 |只看该作者 |倒序浏览
Matthew(黑夜编码人)

转自:http://cnfug.org/journal/systems/2006/000117.html

引言

随着信息系统应用的复杂和多样化,存储越来越受到企业关注,存储的需求也越来越多样化。NetBSD在近期的HEAD(CURRENT)代码中加入了对iSCSI服务的支持,下面就让我们来看看如何利用NetBSD来构建一个基本的SAN(Storage Area Network)环境。

开启iSCSI服务

首先要使用iSCSI服务,你得更新你的系统到HEAD版本,本文使用的NetBSD版本信息如下:
# uname -a
NetBSD 3.99.16 NetBSD 3.99.16 (GENERIC) #0: Sun Mar 5 09:59:31 UTC 2006 builds@works.netbsd.org:/home/builds/ab/HEAD/i386/200603050000Z-obj/home/builds/ab/HEAD/src/sys/arch/i386/compile/GENERIC i386
如果你的NetBSD版本过低,你可以到ftp://ftp.netbsd.org/pub/NetBSD-daily/HEAD下载安装包,或者使用cvs同步源代码,并升级你的NetBSD,这里就不详细介绍,具体升级方法请参见NetBSD Guide.
目前NetBSD对iSCSI的支持是用一个用户状态的守护进程iscsi-target来实现的,它位于/usr/sbin/iscsi-target。这里有两个概念需要简单的介绍一下,在服务端提供iSCSI存储服务的存储对像称为target,一个服务端可以有多个target,使用iSCSI服务的客户端称为initiator。
NetBSD上iSCSI的默认配置文件为/etc/iscsi/targets,它包含了每个target的描述,它的内容如下:
# $NetBSD: targets,v 1.2 2006/02/16 19:30:57 agc Exp $
#
# Structure of this file:
#
# + an extent is a straight (offset, length) pair of a file or device
# it's the lowest common storage denominator
# at least one is needed
# + a device is made up of one or more extents or other devices
# devices can be added in a hierachical manner, to enhance resilience
# + in this example, no device definitions are necessary, as the target
# will just use a simple extent for persistent storage
# + a target is made up of 1 or more devices
# The code does not support RAID1 recovery at present
# Simple file showing 1 extent, mapped straight into 1 target
# extent file or device start length
extent0 /tmp/iscsi-target0 0 100MB
# target flags storage netmask
target0 rw extent0 0.0.0.0/0
其中,extent指定了iSCSI数据的存储位置,而target则是iSCSI提供给客户端(initiator)的存储点,客户端将通过它来完成具体的存储请求。
上面配置文件中的具体含义是:定义了一个extent存储介质extent0,它将使用文件/tmp/iscsi-target0来存储数据,数据存储从文件头部开始,容量为100MB;定义了一个target存储点target0,权限为rw(读和写),它使用先前定义的存储介质extent0来进行存储,该存储点允许IP段为 0.0.0.0/0 的机器访问。
接下来是启用iSCSI服务,在/etc/rc.conf中增加如下行:
iscsi_target=YES
接下来便可以启动iSCSI服务了:
# /etc/rc.d/iscsi_target start
如果你的配置正确,你将会看到类似以下的启动信息:
Starting iscsi_target.
Reading configuration from `/etc/iscsi/targets'
target0:rw:0.0.0.0/0
extent0:/tmp/iscsi-target0:0:104857600
DISK: 1 logical units (204800 blocks, 512 bytes/block), type iscsi fs
DISK: LU 0: 100 MB disk storage for "target0"
TARGET: TargetName is iqn.1994-04.org.netbsd.iscsi-target
这表示iSCSI服务已经启动成功,是不是非常简便呢?

客户端连接iSCSI服务

现在iSCSI服务已经开始工作了,下面就是用客户端连接上iSCSI,以检测我们之前的工作是否正确。
这里我使用的客户端是Microsoft iSCSI Initiator 2.01 x86,你可以从http://download.microsoft.com/do ... E-908935-x86fre.exe 得到它,需要注意的是,它只支持Windows 2000 SP3及以上的Windows版本。下载完并安装好后,你会在桌面上看到一个名为Microsoft iSCSI Initiator的图标,双击打开后,可以看到Microsoft iSCSI Initiator窗口,如图1。

图1
点击Discovery标签,再点击Add按钮,出现增加Target Portal的对话杠,输入你的NetBSD服务器的IP地址,然后点确定,如图2。

图2
这里就可以看到你的NetBSD服务器的IP已经添加到Target Portals中,点击Targets标签,你将看到刚才我们设置的存储点target0,如果没有出现,请点击Refresh按钮刷新,如图3,点击Log On铵钮,出现登录框,直接点击OK即可,如图4。

图3

图4
登录成功后,你可以看到Targts中的状态已经变为Connected,同时NetBSD上的/var/log/messages中你也可以看到一条类似以下的initiator登录提示信息:
Mar 30 09:07:59 iscsi-target: > Normal login from iqn.1991-05.com.microsoft:minilab on 192.168.0.9
接下来就是初始化iSCSI硬盘了。进入控制面板->管理工具->计算机管理,点击磁盘管理,这里会出现磁盘签署升级向导,如图5。

图5
点击下一步按钮,这里列出了要签署的硬盘,选中它,继续点击下一步,出现硬盘升级列表,同样选中它,点击下一步完成升级。这里,计算机管理的磁盘管理器列表中会多出一个硬盘,本例中为Disk1,如图6。

图6
右击它,创建新的磁盘卷。本例中创建了一个新的卷G,打开我的电脑,你便可以看到它,现在你就可以像使用本地硬盘一样使用它。如图7为向该硬盘(G:)中复制文件。

图7
到此,我们便完成了iSCSI服务的建立和客户端的连接,接下来我们继续看看如何使用NetBSD的RAIDframe提高存储性能和保护数据的安全性。

使用RAID5保护iSCSI数据安全

首先要确认你的Kernel是否已经包含对RAID的支持(GENERIC内核默认情况下支持RAID),方法如下:
# grep RAIDframe /var/run/dmesg.boot
如果看到:
Kernelized RAIDframe activated
说明你的内核已经开启了RAID支持,如果没有看到,你就需要在你的内核配置文件中加入:
options RAID_AUTOCONFIG
pseudo-device raid
并重新编译内核。
RAIDframe使用/sbin/raidctl来对内核RAID进行管理,raidctl将读取一个配置文件来实现对RAID设备的配置,raid配置文件分为4个部分和2个可选部分,每个部分使用START标示该部分的开始。以下是本例中的RAID配置文件/etc/raid5.conf:
START array
1 3 1
START disks
/dev/sd0a
/dev/sd1a
/dev/sd2a
START spare
/dev/sd3a
START layout
# sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level
32 1 1 5
START queue
fifo 100
配置文件的具体意义如下:
START array
1 3 1
这里是一个array的配置,它分别表示该配置为1个RAID,3个磁盘设备,1个备用盘。
START disks
/dev/sd0a
/dev/sd1a
/dev/sd2a
这里是一个disks的配置,它列出了要加入到RAID中的硬盘设备为sd0a、sd1a、sd2a。
START spare
/dev/sd3a
这里是一个备用盘的配置,它说明sd3a将作为备用盘加入到RAID中。
START layout
# sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level
32 1 1 5
这里配置了RAID的具体细节,分别表示每个段占用32个扇区,每个校验单位占用1个段,每个重建单位点用1个段,该RAID的级别为RAID5。
START queue
fifo 100
这里主要配置了队列参数,使用fifo队列,每个部分的队列限制为100个请求。
接下来初始化RAID设备,使用/dev/raid5作为RAID设备:
# raidctl -C /etc/raid5.conf raid5
设置启动时自动配置RAID设备:
# raidctl -A yes raid5
成功时将返回:
raid5: Autoconfigure: Yes
初始化RAID序列号,这里的序列号为22334455,可根据需要改变:
# raidctl -I 22334455 raid5
检测RAID是否配置成功:
# raidctl -s raid5
Components:
/dev/sd0a: optimal
/dev/sd1a: optimal
/dev/sd2a: optimal
Spares:
/dev/sd3a: spare
Component label for /dev/sd0a:
Row: 0, Column: 0, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 22334455, Mod Counter: 15
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 2097088
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
Component label for /dev/sd1a:
Row: 0, Column: 1, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 22334455, Mod Counter: 15
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 2097088
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
Component label for /dev/sd2a:
Row: 0, Column: 2, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 22334455, Mod Counter: 15
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 2097088
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
/dev/sd3a status is: spare. Skipping label.
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.
上面的信息说明我们的RAID5已经配置成功,接下来是建立disklabel和创建文件系统:
# disklabel raid5
输出:
# /dev/rraid5d:
type: RAID
disk: raid
label: fictitious
flags:
bytes/sector: 512
sectors/track: 64
tracks/cylinder: 12
sectors/cylinder: 768
cylinders: 5461
total sectors: 4194176
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0
4 partitions:
# size offset fstype [fsize bsize cpg/sgs]
a: 4194176 0 4.2BSD 0 0 0 # (Cyl. 0 - 5461*)
d: 4194176 0 unused 0 0 # (Cyl. 0 - 5461*)
disklabel: boot block size 0
disklabel: super block size 0
创建文件系统
# newfs -O 2 /dev/raid5a
这里我们创建的是UFS2的文件系统。
接下来加载新的文件系统:
# mkdir /r5
# mount /dev/raid5a /r5
查看加载情况(这里sd0,sd1,sd2,sd3都为1G的SCSI硬盘)
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 497M 23M 449M 4% /
/dev/wd0e 2.2G 189M 1.9G 8% /usr
kernfs 1.0K 1.0K 0B 100% /kern
/dev/raid5a 1.9G 2.0K 1.8G 0% /r5
现在,将/etc/iscsi/targets中的配置文件改成:
# $NetBSD: targets,v 1.2 2006/02/16 19:30:57 agc Exp $
#
# Structure of this file:
#
# + an extent is a straight (offset, length) pair of a file or device
# it's the lowest common storage denominator
# at least one is needed
# + a device is made up of one or more extents or other devices
# devices can be added in a hierachical manner, to enhance resilience
# + in this example, no device definitions are necessary, as the target
# will just use a simple extent for persistent storage
# + a target is made up of 1 or more devices
# The code does not support RAID1 recovery at present
# Simple file showing 1 extent, mapped straight into 1 target
# extent file or device start length
extent0 /r5/iscsi-target0 0 1800MB
# target flags storage netmask
target0 rw extent0 0.0.0.0/0
重新启动iSCSI服务:
# /etc/rc.d/iscsi_target restart
现在你的iSCSI数据就已经保存在我们的RAID5设备上了,一个基本的SAN就已经完成,快快体验你的成果吧。
由于目前iSCSI在NetBSD中还处于开发阶段加上笔者水平有限,所以某些功能还暂未实现,欢迎大家共同讨论,分享你的新发现。

[ 本帖最后由 黑夜编码人 于 2006-5-6 01:45 编辑 ]

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
2 [报告]
发表于 2006-05-06 11:27 |只看该作者
文章绝对的一级棒,不过在下见识少看不太懂。
看见NetBSD的标题,进来顶一下。

论坛徽章:
0
3 [报告]
发表于 2006-05-06 13:53 |只看该作者
在一个局域网络内,不知道可不可以大家共享这个存储器,如果可以,
权限问题怎么解决?
如果可以的话,对我们单位就相当的方便了

[ 本帖最后由 xie_minix 于 2006-5-6 13:55 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-05-06 16:01 |只看该作者
IBM 的 SANergy 好像可以对iSCSI共享/权限进行管理,现在我们这儿也正要上一套iSCSI的IP-SAN,里面会用到SANergy,到时候就清楚细节了。也可以试试能不能用它来管理NetBSD上的iSCSI :p

[ 本帖最后由 黑夜编码人 于 2006-5-6 16:05 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-05-07 12:37 |只看该作者
不知道freebsd下支持iscsi么:)

论坛徽章:
0
6 [报告]
发表于 2006-05-08 01:50 |只看该作者
原帖由 km 于 2006-5-7 12:37 发表
不知道freebsd下支持iscsi么:)


目前不支持

论坛徽章:
0
7 [报告]
发表于 2006-05-08 09:32 |只看该作者
准备升级,我的nb很久没动了,谢谢分享

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-01-06 06:20:00
8 [报告]
发表于 2006-05-10 04:47 |只看该作者

OB下可以实现么!

OB下可以实现么!
什么系统都可以实现这种功能呢!

论坛徽章:
0
9 [报告]
发表于 2007-04-18 02:30 |只看该作者
在实验了。。。


我用在我网吧,做游戏服务器。。。 不知道效果如何 。 权限那里 估计会有卡壳 。。。 用只读 游戏里有的时候要写东西进去才行 用可写 那就有中游戏木马的 危险。。。


还是要加一句,我是BSD的忠实FANS 。  应用起来 总是有各种不如意 大多是因为比较新的硬件 造成的 。



如果会用BSD的人 在我网吧能有50% 我会决定把所有的机器都换成FB。。。

[ 本帖最后由 yuccc 于 2007-4-18 02:36 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-04-19 19:41 |只看该作者
可以用iscsi做游戏服务器!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP