桃源谷

心灵的旅行

人生就是一场旅行,不在乎旅行的目的地,在乎的是沿途的风景和看风景的心情 !
posts - 32, comments - 42, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ATA Over Ethernet: 把硬盘放到局域网上

Posted on 2009-02-02 12:54 lymons 阅读(1024) 评论(1)  编辑 收藏 引用 所属分类: Unix/Linux文章翻译
Kernel Korner - ATA Over Ethernet: 把硬盘放到局域网上

ATA Over Ethernet: 把硬盘放到局域网上

By Ed Cashin 翻译:Lymons Lau

Created 2005-04-28 01:00

 

随着ATA硬盘比起磁带这样的存储设备来是越来越便宜,一些简单的新存储技术能使你为存档,备份或者现场应用建立一个存储阵列。

几乎每个人都遇到过硬盘空间不足的时候。幸运的是,硬盘的容量是越来越大,价格是越来越便宜。虽然如此,我们会拥有更多的磁盘空间,但我们却会使用掉的更多空间,不久还是会遇到磁盘空间不足这种状况的。

一些数据天生就是非常巨大,例如,视频文件总是花费掉大量的空间。商业公司经常需要存储视频数据,尤其是数字业务变得更普通了。即使在家里,我们也要在自己的电脑上观看和制作视频影像。

使用电脑进行备份和数据冗余对于任何公司都是必要的。看起来对于存储容量似乎没有什么关系,但是拥有更多的容量总也是很不错吧,即使存放e-mail的目录也能被占满,连互联网服务提供商也知道这一点。

当磁盘不再放到电脑里面,存储和它正使用的电脑解耦(离机存储)使得无限存储变的可能了。把相关组件解耦的原则在许多的领域变得更具有弹性,而不仅仅表现在数据存储方面。在遇到不可预知的需求的时候,模块化的源代码能被更灵活的使用。一个由多个组件组合成的立体声系统用起来比几合一的立体声盒子更加有趣的多。

离机存储的最熟悉的例子可能就是存储区域网络(SAN.我还记得SAN开始使用的时候,遇到一些麻烦。超越hypehype这个词是什么意思)并找出它真正的是什么是非常困难的。最终我有一些失望,发现SAN很复杂,私有和昂贵。

尽管,为了支持SANLinux社区已经在内核里做了很多的努力去帮助修改。发行的2.4内核的企业版已预示了2.6内核的新特征的要被开发,并且现在的稳定版的内核里有很多年前我们遗漏掉的功能。如,它能支持巨大的块设备,能跨越原来的2TB的限制,它同时连接更多的磁盘。也支持复杂的存储卷管理,另外,甚至在文件系统被挂载的时候也能扩张到巨大尺寸,并能被使用。

对于这些内核的新特征这篇文章描述了一个新方法,把磁盘拿到电脑的外边去并克服了先前的存储使用和容量的限制。你能相信ATA over Ethernet (AoE)可以作为用以太网络代替你的IDE线缆的一个方法,随着把存储从电脑中解耦出来和在这两者之间的以太网的弹性,可能性仅仅是被限制在你的想像力和是否愿意主动去学习新事物。

什么是AoE?

ATA over Ethernet是作为以太网协议0x88a2IEEE里注册的一个网络协议。AoE是低级的,比TCP/IPIP更简单的协议。TCP/IPIP是在互联网上数据的可靠传输是必须的,但电脑得额外的处理它们带来的复杂性。

iSCSI的用户已经注意到TCP/IP带来的问题。iSCSI是一个在TCP/IP之上发送I/O的方法,以便使用低廉的以太网设备代替光纤设备成为可能。许多iSCSI用户已经开始购买TCP卸载引擎(TOE),这个TOE卡是很昂贵的,但是它能解析TCP/IP来减轻使用iSCSI的机器的负担。

大多数时间,一个有趣的调查是iSCSI竟然不用在互联网上。如果网络包自己就知道去另一间屋子里架子上的机器,那重量级的TCP/IP协议看起来就是杀鸡焉用牛刀啦。

因此,替代卸载TCP/IP,为什么不和它一起分离开呢?ATA over Ethernet协议准确的利用了灵巧的以太网交换机。一个现代的交换机有流控制,最大化的吞吐量和限制网络包冲突。在局域网,网络包顺序被保存并且为了完整性每个包通过网络硬件都要被校验。

每个AoE包都给一个ATA设备的装载一个命令或者一个来自ATA设备的响应。AoELinux内核驱动程序执行AoE命令并使得远程磁盘像一个正常的块设备一样应用,例如把/dev/etherd/e0.0作为IDE设备使IDE线缆那一端的本地设备象/dev/had一样应用。必要时这个设备传输这些包,AoE设备对于内核来说看起来就像所有的其他磁盘一样没有什么区别。

除了ATA命令之外,AoE还有一种简单的功能就是使用查询配置包来识别网络上可用的AoE设备。即,对于AoE来说重要的是:ATA命令和查询配置包。

所有的在SAN上工作的和学习过相关知识的人都知道这一点如果所有的磁盘都放到LAN上,那么怎么能限制对某一个磁盘的访问呢?。也就是,我怎么能保证机器A在访问机器B的磁盘的同时,机器B的磁盘的安全呢?

答案就是AoE它是不带路由的。你能容易的决定那些电脑能看见那些磁盘,仅仅是通过设置对等模式(ad hoc)的以太网络。因为AoE设备没IP地址,去创建一个隔离的以太网是非常容易的事情。除此之外,许多的交换机都有一个基于端口的VLAN功能来语序一个交换机被有效的划分到一个被分割,孤立的广播域中。

AoE协议是如此的轻量级以至于廉价的硬件就能使用它。到目前为止只有CoraidAoE硬件的生产商,但是其他的软硬件开发商可以很高兴的发现AoE的技术文档仅仅只有8页纸。它的简单性完全和拥有上百页并包含加密,可路由,用户访问控制等的技术文档的iSCSI形成了鲜明的对比。复杂性带来了高价格,现在我是要选择我们到底是要复杂性还是宁愿要低价格。

单原始也许就是强有力的工具。对于去了解AoE的简单性的Linux用户来说可能不会带来什么惊喜,一旦存储设备驻留在网络上也不会带来迷惑的可能性。让我们开始一个具体的例子然后讨论他们的可能性。

档案管理远Stan

下面的例子是一个真实的故事。Stan是为州政府工作的系统管理员(名字是虚构的),新的州立法规定了所有的官方文档都要被永久性的存储起来,州的任何居民能在任何时候要求去看任何的文档。Stan于是需要一个没有束缚能被扩充的巨大的存储空间,尽管存储的性能上不需要比本地的ATA磁盘更好,但他想要所有的数据能被立即和容易的获取

Stan在以太网和Linux系统管理上的工作比较舒适,因此他决定尝试ATA over Ethernet。他要采购一些设备,为了下面的东西他仅仅付出了不到6500美元:

  • 用一个双端口的千兆以太网卡代替原来服务器上的百兆网卡
  • 一个带有两个千兆端口的26口的网络交换机
  • 一个Coraid EtherDrive支架和十个EtherDrive刀片设备
  • 十个400GBATA磁盘

十个刀片设备的支架占用了三个夹板单元。每一个EtherDrive刀片设备是一个有效地把ATA磁盘放到LAN上并完成AoE协议的小型计算机。十个刀片设备上的数据带占用了本地ATA设备的吞吐量,因此千兆网线能有效的使用吞吐量。尽管他能像其他的任何人一样把EtherDrive刀片设备放到同一个网络上,但是为了安全性和性能他还是决定把这些存储设备用服务器的第二块网卡(eth1)放到连接到自己的网络上。

Stan在阅读了LinuxRAID HOWTO后(察看在线资源)决定使用镜偶配置的RAID 10-striping。尽管这个配置比起RAID 5配置来并没有带来更多的可用的容量,但RAID 10能有最大化的可靠性,最小化的执行RAIDCPU负荷并在一个磁盘损坏时有最短的阵列重初始化时间。

在阅读完LVM HOWTO (see Resources)后,Stan为了避免将来磁盘空间不足提出了一个计划。JFS是一个能动态扩张大小的文件系统,因此他在逻辑卷上构筑JFS文件系统,而逻辑卷则仅仅放置在一个物理卷上。那物理卷是由RAID 10的块设备构成,最后RAID 10是在EtherDrive存储设备上使用LinuxRAID创建的。将来,他能购置另一个机架存储设备去创建另一个RAID 10,并作成一个物理卷来扩展逻辑卷的容量,那么JFS文件系统也就成在线扩张了。

列表1显示了Stan在他的服务器上准备ATA over Ethernet所使用的命令。他使用AOE_PARTITIONS=1来编译AoE驱动程序,因为他使用的是2.6内核的Debian sarge操作系统。这种系统目前还不支持大的次设备号(大于255的次设备号),因此为了能使用更多的磁盘他关掉了磁盘分区支持,另外,由于Debian系统的bug 292070Stan安装了最新的设备映射(device mapper)和LVM2用户端软件

列表1. 第一步,从几个AoE设备上建立一个软RAID设备。

# setting up the host for AoE

# build and install the AoE driver

tar xvfz aoe-2.6-5.tar.gz

cd aoe-2.6-5

make AOE_PARTITIONS=1 install

# AoE needs no IP addresses!  :)

ifconfig eth1 up

# let the network interface come up

sleep 5

# load the ATA over Ethernet driver

modprobe aoe

# see what aoe disks are available

aoe-stat

 

次设备号

一个程序想要使用一个设备得通过打开一个于这个设备相对应特殊文件。一个较熟悉的例子就是文件/dev/hadls -l命令可以看到/dev/had有两个号码,303就是设备的主设备号,0就是次设备号。文件/dev/hda1的次设备号就是1,而主设备号仍然是3

直到2.6的内核,次设备号的大小一直都是8位,因此它的取值范围就被限制在0255这个范围内。没有人有那么多的子设备,所以这个限制也就没有关系。现在由于磁盘已经能从服务器上解耦出来,原来的8位也就不够用了,所以到了2.6内核使用了20位的数据作为次设备号。

最大值一直能到1,048,576的次设备号对于使用许多子设备的系统来说很有用,但并不是所有的软件都支持它。如果glibc库或者一些特定的应用程序仍然认为次设备号不能大于255的话,你在使用大于255以上的次设备号的时候可能会有困难。

为了渡过这个过渡期间,AoE驱动程序可以以不带分区的形式来进行编译。也就是用每个磁盘只能做成一个次设备号来代替每个磁盘的16个次设备号。因此即使你的系统不关心2.6内核的大次设备号,你仍然能使用它直到256AoE磁盘。

列表2显示了创建文件系统和逻辑卷的命令。Stan给卷组取了“ben,给逻辑卷取了“fanklin”的名字。LVM2现在需要一对儿来做这个配置,一个是需要一行types = [ "aoe", 16 ],以便LVM能使被AoE磁盘,另一个是需要needs md_component_detection = 1,以便当整个RAID 10变成物理卷的时候它里面的磁盘能被忽略。

列表2。设置软件RAIDLVM卷组

 

# speed up RAID initialization

for f in `find /proc | grep speed`; do

        echo 100000 > $f

done

# create mirrors (mdadm will manage hot spares)

mdadm -C /dev/md1 -l 1 -n 2 \

        /dev/etherd/e0.0 /dev/etherd/e0.1

mdadm -C /dev/md2 -l 1 -n 2 \

        /dev/etherd/e0.2 /dev/etherd/e0.3

mdadm -C /dev/md3 -l 1 -n 2 \

        /dev/etherd/e0.4 /dev/etherd/e0.5

mdadm -C /dev/md4 -l 1 -n 2 -x 2 \

        /dev/etherd/e0.6 /dev/etherd/e0.7 \

        /dev/etherd/e0.8 /dev/etherd/e0.9

sleep 1

# create the stripe over the mirrors

mdadm -C /dev/md0 -l 0 -n 4 \

        /dev/md1 /dev/md2 /dev/md3 /dev/md4

# make the RAID 10 into an LVM physical volume

pvcreate /dev/md0

# create an extendible LVM volume group

vgcreate ben /dev/md0

# look at how many "physical extents" there are

vgdisplay ben | grep -i 'free.*PE'

# create a logical volume using all the space

lvcreate --extents 88349 --name franklin ben

modprobe jfs

mkfs -t jfs /dev/ben/franklin

mkdir /bf

mount /dev/ben/franklin /bf

 

我复制了Stan的硬件环境,使用Debian sarge操作系统,服务器是22.1GHz Athlon MP处理器和1GB的内存,选用的网卡是PRO/1000 MT Dual-Port NIC,以及使用容量比较小的40GB硬盘,另外网络交换机是Netgear FS526T。在Coraid shelf EtherDrive 刀片设备上构建的是RAID 10,因此我能看到23.58MB/s的读数据吞吐量和17.45MB/s的写数据吞吐量。这个测试结果是在刷新过页缓存后,把1GB的文件拷贝到/dev/null上测量出来的,并且在写数据的同时来使用sync命令。

上面构建的系统中,RAID 10有四个stripe元素,每一个设备都有一个镜偶。总体上,你通过考虑有多少个stripe元素就能容易的估计出EtherDrive刀片设备的吞吐量。对于RAID 10来说,有一半的磁盘作为stripe元素,每一个磁盘都有另一个磁盘镜像。而对于RAID 5只有一个磁盘作为校验数据用,剩下的磁盘就作为stripe元素。

期望的读吞吐量是stripe元素的个数乘上6MB/s。这意味着Stan如果采购两个机架来构建18个刀片的RAID 10来代替8个刀片的RAID 10的话,他期望得到是2倍于原来的吞吐量。但Stan并不需要更多的吞吐量,他需要一个1.6TB的文件系统。

列表3显示了Stan在买了一个机架后扩张文件系统的情况。列表中并没有显示mdadm-aoe.conf文件和他的启动和关机脚本。mdadm配置文件告诉mdadm进程运行在监视模式并怎么来管理热备援(hot spares),以便他们随时用其他的任何镜像来替换损坏的磁盘。

列表3。不用卸载文件系统就扩张它,设定第二个RAID 10磁盘阵列,增加它到卷组中并增加文件系统的容量。

 

# after setting up a RAID 10 for the second shelf

# as /dev/md5, add it to the volume group

vgextend ben /dev/md5

vgdisplay ben | grep -i 'free.*PE'

# grow the logical volume and then the jfs

lvextend --extents +88349 /dev/ben/franklin

mount -o remount,resize /bf

 

启动和关机脚本很容易去生成。启动脚本简单的汇集了每一个镜偶RAID 1,汇集每个RAID 0并开始mdadm监视进程。关机脚本停止mdadm脚本,停止RAID 0,最后停止镜像。

共享块存储

现在我们已经实际的看到了具体的ATA over Ethernet的例子,读者可能想知道当另一个主机已经访问这个存储网络的时候会发生什么。第二个主机能否挂载这个JFS文件系统并访问同样的数据?答案是“不安全!”,JFSext3和大多数文件系统一样被设计成被一个主机使用。这些单主机文件系统在多个主机挂载同一个块存储设备的时候可能导致文件系统的冲突。原因就是在2.6内核里被设计成唯一的带有页缓存的缓冲区缓存。

Linux无论何时都强制的在内存理缓存文件系统的数据,这是为了避免使用较慢的块存储设备而获得很高的性能。你能通过在对同一个目录运行两次find命令,很容易的发现缓存的作用。

一些文件系统被设计成多个主机可以同时使用。群集文件系统,就像他的名字一样,它有办法保证所有主机上的缓存保留在文件系统下的同步状态。GFS就是一个伟大的开源工程,它使用群集管理软件来跟踪主机群中的谁正在访问文件系统。当同时访问文件系统的同时,它通过加锁来保证不同的主机间进行协作。

通过使用群集文件系统例如GFS,它使得在以太网上利用ATA over Ethernet访问同一个块设备成为可能。它不需要任何像NFS服务那样的东西,因为每一个主机都能直接访问存储设备,漂亮的分发I/O。但是这也有一些问题,在任何时候使用一些磁盘,你就增加了磁盘损坏的机会。通常的,你能通过增加冗余磁盘并使用RAID来避免它。不幸的是,Linux软件RAID并不是群集软件。这意味着在网络上每个主机不能使用mdadm来做RAID 10并使工作变得简单。

Linux的群集软件正在如火如荼的开发着,我相信在未来的一两年内能看到一些好的群集RAID软件。那么到目前,为了使用AoE共享设备也有些思想可供选择。一个基本的思想就是集中RAID功能。你能买到一到两个Coraid RAIDblade并使群集结点访问它们到处的存储设备,RAIDblade能管理所有的EtherDrive刀片设备。或者,如果你感觉有点冒险的话,你能也可以亲自使用Linux软件RAID并导出有防止磁盘失败的块设备。参看使用ATA over Ethernet导出存储设备的软件例子中的vblade程序。

备份

因为ATA over Ethernet可以在以太网上放置廉价的硬盘,一些系统管理员可能感兴趣把AoE放到他们的备份计划中。通常,备份策略使用像在线存储那样不会相当快的二阶存储(tier-two storage-storage),但是也不至于像磁带那样不可访问。ATA over Ethernet使得很容易的使用便宜的ATA磁盘作为二阶存储。

但是,随着硬盘变得如此廉价和越来越稳定的软件RAID,我们为什么不使用硬盘来作为我们的备份介质呢?不像磁带,硬盘这种备份媒体支持瞬间访问任何存档文件。

一些新的备份软件产品正在利用文件系统的特征。通过使用硬连接,他们能完成多次的带有有效的增量备份的完全被分。搜索在线资源中的备份PCrsync备份软件来获取更多的信息。

结论

把廉价的磁盘放到本地网络上的想法为什么在此之前没有人能做到呢?然而,仅仅使用了一个简单的网络协议就把存储设备从服务器上实际的解耦出来,而不用昂贵的硬件,并仅仅是一个本地的以太网就能使简单的网络协议工作。在一个单独的以太网上我们不需要复杂和有些夸张的互联网协议例如TCP/IP

如果你在本地网络上实施存储并且通过创建以太网就可以配置访问就足够了,那ATA over Ethernet就完全适合你。如果你需要加密,可路由何基于用户的访问控制等的特征的话,iSCSI也许就是你感兴趣的存储协议。

[3]

Links

[3] https://www.ssc.com/lj/subs/NewUSA.html

 

Source URL: http://www.linuxjournal.com/article/8149



http://hilli.dk/howtos/ata-over-ethernet-aoe-in-gentoo-linux/
gentoo的使用例子,作为参考!

Tuesday January 10, 2006 - 03:57pm (SGT)

Feedback

# re: ATA Over Ethernet: 把硬盘放到局域网上  回复  更多评论   

2010-06-29 07:37 by ssd
fdfsfsdfsddsgsdgsgds

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


我的个人简历第一页 我的个人简历第二页