购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第6章
阵列之行
——大话磁盘阵列

两三块磁盘做RAID 0或1,四五块磁盘做个RAID 3、4、5是小事一桩,不过太没魄力。要玩就弄个几十块盘,那才过瘾。这不,有人发明了专门装这些磁盘的大柜子,我们这就去看看这柜子是怎么回事儿吧。

退隐江湖——太累了,该歇歇了

自从张真人创立了降龙三掌之后,江湖各门各派争相修炼,商人不断推出基于降龙掌的新商品。江湖上浮躁之气再次袭来,很少有人去钻研底层功夫了,都是拿来就用,不思进取。几十年过去了,张老道已经成了头发苍白的老人。

这天晚上,人少星稀。唯独天上的北斗七星,光芒还是那么灿烂,仿佛已逝去百年的七星大侠,还在天上苦苦钻研。

张真人如今也已经是白发苍苍,可是知己已不在。一百年来,江湖上为了利益你争我抢,反目成仇,打打杀杀。呜呼哉!!!难道这个江湖真要从此衰败么?张老道失望至极。

闻道

尘世浮华迷人眼,

梦中情境亦非真。

朝若闻道夕死可,

世间何处有高人?

第二天,张真人对外宣布,他从此退隐江湖,不再参与江湖事。瞬时间,整个江湖就像地震了一样,人们没有了主心骨,都不知道该干什么好了。打打杀杀的也不打了,商人也没得吹了。很多商人纷纷上武当来游说张真人,让他出山,包荣华富贵,都被张真人一一回绝了。江湖又恢复了以往的平静,只是这平静似乎预示着一场更加猛烈的暴风雨即将来临。

前仆后继——后来者居上

话说有位少年,自幼好钻研和寻根问底,被人称作“隔一路”。此人不善于口头表达,不会忽悠,但是如果世界只剩下他一个人,那么他便会爆发出神奇的力量。由于内向的性格,他吃了不少亏,但他依然我行我素,并不在乎别人的议论和猜忌甚至是诋毁。这位少年名为无忌。他实际上也确实是无所畏忌,明知山有虎,偏向虎山行,用天真和执著去挑战世俗,跌倒了大不了重来。

既然选择了这条路,就要把它走完。孤独和压迫给了他巨大的动力,每天晚上都在刻苦学习。他学习IO大法和磁盘大挪移,学习七星北斗阵和降龙大法。虽然他并没有实践过这些知识,但是依然有一股力量促使他不断地学习钻研。

6.1 初露端倪——外置磁盘柜应用探索

无忌已经充分掌握了前人留下的心法口诀。在不知道该做点什么的时候,他突然有了一个想法。虽然按照七星大侠的RAID方式,可以将多块磁盘做成逻辑盘,但是普通的服务器或者PC机箱里面,也就安装两三块磁盘,空间就满了。如果做很多块盘的RAID,把磁盘都放到机箱里面肯定不行,得想个办法来让机器可以带多块磁盘。

“拿出来,拿出来,全部都掏出来!”他找来一台机器,装了一块Ultra 320 SCSI卡,这个卡只有一个通道,可以连接15块磁盘。但是15块盘怎么放入一个机箱呢?太困难了,所以必须把这些盘放到机箱外面。但是连线和电源问题又不好办。他索性找来一个箱子,把所有磁盘都放在这个箱子里。箱子有独立电源和散热系统,保障磁盘的稳定运行。接口方面,内部其实就是一条SCSI线缆,只不过将它做到了电路板上,然后在外面放一个接口,这个接口是用来连接主机上的SCSI卡的。如果主机上装的是不带RAID功能的SCSI卡,那么加电之后,主机会识别到磁盘箱中的所有磁盘。箱子中有多少磁盘,在OS磁盘管理器中就会显示多少块磁盘。如果主机上安装的是带RAID功能的SCSI卡,那么可以用这个RAID卡先来对认到的多块磁盘做一下RAID,划分出逻辑盘,这时OS识别到的就是逻辑磁盘,而不会认到箱子中的物理磁盘。

这种简单的磁盘箱如图6-1所示,无忌给它取了个学名,叫做“JBOD”,也就是Just a Bound Of Disks,“只是一串磁盘”,这个描述非常形象。无忌立即将这个做法公布了出去,没想到大受欢迎,一时间各个厂家争相生产这种磁盘柜,在市场上卖得很火。

图6-1 JBOD磁盘阵列示意图

6.2 精益求精——结合RAID卡实现外置磁盘阵列

思考: 能否把RAID功能做到磁盘箱中,因为如果要调整RAID的话,还需要重启主机等,会影响主机应用。如果做到了磁盘箱中,那么在主机上就不需要做什么,只要在磁盘箱中做完之后连接到主机,主机重启之后或者不用重启就能认到新逻辑盘了。

经过多次实验,终于做成了一个设备。少年把这种自带RAID控制器的磁盘箱叫做“磁盘阵列”。自此在江湖上有了一个不成文的规定,凡是JBOD都叫做磁盘柜,凡是自带RAID控制器的盘柜就叫做磁盘阵列或者盘阵。盘柜和盘阵,前者只是一串外置的磁盘,而后者自带RAID控制器。图6-2为JBOD磁盘柜实物图。

盘阵是在盘柜的基础上,将内部的磁盘经过其自带的RAID控制器的分分合合,虚拟化成逻辑磁盘,然后经过外部SCSI接口连接到主机上端的SCSI接口。此时,整个盘阵对于主机来说,就是主机SCSI总线上的一个或者多个设备,具有一个或者多个SCSI ID。所有逻辑磁盘都以LUN的形式呈现给主机。

如图6-3所示,盘阵中的SCSI控制器在逻辑上有两个部分,右边的S2控制器连接了一条SCSI总线,上面有若干磁盘。左边的S1控制器同样也连接了一条SCSI总线,但是上面只有两个设备:一个就是主机SCSI控制器,另一个就是它自己。

图6-2 JBOD磁盘柜实物图

图6-3 带RAID控制器的磁盘阵列示意图

毫无疑问,在左边的SCSI总线上,盘阵SCSI控制器是作为Target模式,被主机SCSI控制器操控,处于被动地位;在右边的SCSI总线上,盘阵的S2控制器成了Initiator模式,它在右边总线上占据主动权,拥有最高优先级,而各个磁盘均为SCSI Target,受控于Initiator。当然S1和S2不一定就是两块物理上分开的芯片,很有可能就是一块单独的芯片逻辑地分成两个部分。甚至有可能将RAID芯片和SCSI控制器芯片全部集成到一个大芯片中。

图6-4所示的是一个SATA盘阵控制器的主板示意图。

图6-4 一个可以连接16块SATA磁盘的小型RAID控制器主板

图6-5所示的是一个小型盘阵控制器的内部实物图。

图6-5 一个小型控制器实物图

图6-6所示的是一台盘阵的磁盘插槽实物图。

图6-7所示的为这台盘阵的电源模块插槽。

图6-6 磁盘插槽、背板

图6-7 电源模块插槽

6.3 独立宣言——独立的外部磁盘阵列

主机由于肚量太小容不下想法太多的磁盘!终于磁盘从主机内部跑出来了,磁盘们在外置的大箱子里,在RAID控制器的带领下,欣欣向荣,勇往直前!

磁盘和控制器发布了独立宣言,彻底摆脱了主机的束缚,成为与主机对峙的一个独立的外部设备。从此以后,存储技术才真正的成为一个独立的庞大学科,并不断发展壮大。本书后面的章节会介绍更多的存储技术,包括存储网络和网络存储。

1.前端和后端

对于盘阵来说,图6-3中RAID控制器的左边就称为“前端”,右边则称为“后端”。面向主机对外提供服务的就叫前端,面向自己管理的磁盘用于内部管理而外部不需要了解的部分就叫做后端。同样,对于主机来说,它的SCSI适配器反而成了后端,而以太网卡可能变成了前端。因为对于主机来说,直接面对外部客户机的是以太网,而管理磁盘的工作不必对客户说明,所以变成了后端。

2.内部接口和外部接口

对于盘阵来说,还有一个内部接口和外部接口的概念。内部接口是指盘阵RAID控制器连接其内部磁盘时用的接口,比如可以连接IDE磁盘、SCSI磁盘、SATA磁盘和FC磁盘等。外部接口是指盘阵控制器对于主机端,也就是前端,提供的是什么接口,比如SCSI接口、FC接口等。内部接口可以和外部接口相同,比如内部用SCSI磁盘,外部也用SCSI接口连接主机,这种情况也就是图6-3中所示的情况。

内外接口也可以不同,比如内部连接IDE磁盘,外部却用SCSI接口连接主机(仅限于盘阵,盘柜必须内外接口一致)。盘阵控制器是一个虚拟化引擎,它的前端和后端可以不一致,它可以向主机报告其有多少LUN,尽管内部的磁盘是IDE的。

3.多外部接口

同时,我们也不要被盘阵上为什么可以有多个外部SCSI接口而感到困惑。有多个接口是为了连接多台主机用的。每个由盘阵RAID控制器生成的逻辑磁盘,可以通过设置只分配(Assign/Map)到其中一个口,比如LUN1被分配到了1号口,那么连接到2号口的主机就不会看到这个LUN。也可以把一个LUN同时分配(或叫做Map,映射)到两个口,那么两台主机能同时识别出这个LUN。让两台主机同时对一个LUN写数据,底层是允许的,但是很容易造成数据的不一致,除非使用集群文件系统,或者高可用性系统软件的参与。

4.关于LUN

LUN是SCSI协议中的名词,我们前面也描述过。LUN是SCSI ID的更细一级的地址号,每个SCSI ID(Target ID)下面还可以有更多的LUN ID(视ID字段的长度而定)。对于大型磁盘阵列来说,可以生成几百甚至几千个虚拟磁盘,为每个虚拟磁盘分配一个SCSI ID是远远不够用的。因为每个SCSI总线最多允许16个设备接入(目前32位SCSI标准最大允许32个设备)。要在一条总线上放置多于16个物理设备也是不可能的,LUN就是这样一个次级寻址ID。磁盘阵列可以在一个SCSI ID下虚拟多个LUN地址,每个LUN地址对应一个虚拟磁盘,这样就可以在一条总线上生成众多虚拟磁盘,以满足需求。

后来,人们把硬件层次生成的虚拟磁盘,统一称为“LUN”,不管是不是在SCSI环境下,虽然LUN最初只是SCSI体系里面的一个概念。而由软件生成的虚拟磁盘,统一称为“卷”,比如各种卷管理软件、软RAID软件等所生成的虚拟磁盘。

有些盘阵配有液晶操控面板,如图6-8所示。而有些低端的盘阵更是在液晶面板周围加上了按钮,用来对盘阵进行简单快速的配置,比如查看磁盘状态、设置RAID、划分逻辑磁盘等。这种方式极其简化了配置操作,一般用户通过阅读说明书就可以完成配置。不过液晶屏幕比较小,能完成的功能不多,操作相比用鼠标要麻烦。所以一些盘阵提供了COM口或者以太网接口,可以用PC连接这些接口与盘阵通信,通过仿真终端或Web界面就可以对盘阵进行配置。

图6-8 一个带液晶面板的盘阵前视图

提示: 用户用PC与盘阵的COM口或专用于配置的以太网接口连接,完全是为了配置磁盘阵列的各种参数,而不是通过这些配置专用接口从磁盘阵列的磁盘上读写数据。

6.4 双龙戏珠——双控制器的高安全性磁盘阵列

如果盘阵内部只有一个控制器模块,那么会是一个SPOF(Single Point Of Failure),即单点故障点。所以一些高端的盘阵内部都有两个控制器,互为冗余。分配给其中一个控制器的LUN逻辑卷,可以在这个控制器因故障失效的时候,自动被另一个工作正常的控制器接管,继续处理针对这个LUN的读写请求。两个控制器平时都管理各自的LUN,一旦发现对方故障,那么就会自动将所有LUN都接管过来。

因为如此,两个控制器之间需要相互通信,通告对方自己的状态以及交互一些其他的信息。两个控制器之间可以用PCI总线连接,也可以用厂商自己设计的总线来连接,没有统一标准。至于交互信息的逻辑和内容,更是因品牌而不同,而没有标准来统一它们。

为了避免单点故障,给盘阵安装一个额外的控制器,这个控制器和原来的控制器在它们后端共享一条或者多条磁盘总线。两个控制器可以使用Active-Standby方式,也可以使用Dual-Active的互备方式连接。

1.Active-Standby

这种方式又称HA(High Availability方式,高可用性),即两个控制器中同一时刻只有一个在工作,另外一个处于等待、同步和监控状态。一旦主控制器发生故障,则备份控制器立即接管其工作。

对于内部为SCSI总线的双控制器盘阵,在机头内部的一条SCSI总线中,两个控制器可以分别占用一个ID,这样剩余14个ID给磁盘使用。平时只有主控制器这个ID作为Initiator向除了备份控制器ID之外总线上的其他ID(也就是所有磁盘的ID)来发送指令从而读写数据。

同时备份控制器与主控制器之间保持通信和缓存同步,一旦主控制器与备份控制器失去联系,那么备份控制器立即接管主控制器。同时为了预防脑分裂(见下文),备份控制器在接管之前需要通过某种机制将主控制器断电或者重启,释放其总线使用权,然后自己接管后端总线和前端总线。

提示: 主机端必须用两个SCSI适配器分别连接到盘阵的两个控制器上,才能达到冗余的目的,但是这样做主机端必须通过某种方式感知到这种HA策略并在故障发生时切换。目前,由于SCSI盘阵本身比较低端,可接入容量不大,所以没有双控制器的设计,以上文字只是对HA机制的一种描述。但是对于本书后面要讲述的FC盘阵来说,使用双控制器以及在主机端使用双FC适配卡是非常普遍的。

2.Dual-Active

顾名思义,这种双控制器的实现方式是两个控制器同时在工作,每个控制器都对所有后端的总线有通路,但是每个总线平时只被其中一个控制器管理,另一个控制器不去触动。可以将后端一半数量的总线交由一个控制器管理,另一半交由另外一个控制器管理。一旦其中一个控制损坏,则另外一个控制器接管所有总线。这种方式比Active-Standby方式高效很多。

3.脑分裂(Split Brain)

这个词明显有点恐怖。设想一下,如果某时刻连接两个控制器之间的通路出现了问题,而不是其中某个控制器死机,此时两个控制器其实都是工作正常的,但是两者都检测不到对方的存在,所以两者都尝试接管所有总线,这时候就是所谓的“脑分裂”,即同时有两个活动控制器来操控所有后端设备。这种情况是可怕的,类似精神分裂症。

如何预防这种情况呢?通常做法是利用一个仲裁者来选择到底使用哪一个控制器接管所有总线,比如用一两个控制器都能访问到的磁盘,控制器向其上写入自己的仲裁信息。一旦发生脑分裂,二者就参考这个磁盘,谁最后写入了信息就把控制权给谁。或者用一种电源控制器,一旦其中某个控制器要接管,那么不管对方是确实发生故障了还是正常的,这个控制器都会向电源控制器发送信号,让对方重启并进入Standby状态,这样就成功地预防了脑分裂。

接管了总线的控制器一般都会对总线上所有磁盘进行SCSI Reserve操作,即预订操作。总线上所有目标设备一旦被预订,它们便不再接受其他控制器的IO请求。SCSI 2标准中的SCSI Reserve不允许其他控制器读写被原有控制器预订的设备,但是SCSI 3中的Reserve策略有了一些灵活性,可以允许其他控制器对已经被预订的目标设备进行读IO,而写IO则被拒绝。

图6-9所示的是一双控制器盘阵机头示意图。

图6-9 双控制器磁盘阵列示意图

提示: 实际中,由于SCSI盘阵比较低端,一般没有这种设计模式的产品。

6.5 龙头凤尾——连接多个扩展柜

一条SCSI总线最多可以连接15块磁盘,为了这15块磁盘,大动干戈地赋予两个昂贵的RAID控制器,有点不值。为了把这两个控制器充分利用起来,榨取最后一滴性能,15块磁盘不够,那就再加。前面说过,一个控制器上可以有多个通道,一个通道下面就是一条SCSI总线,那么将盘阵的每个控制器上再多接一个或者两个通道,来充分发挥它的能力,这样就比较实惠了。如图6-10所示,这台盘阵机头带有一个扩展后端磁盘柜接口。

图6-10 带有一个扩展外部磁盘通道接口的控制器示意图

通道建好之后,下一步就是要扩充磁盘数量了。当然,JBOD就成了最佳选择。

图6-11所示的盘阵的每个控制器上多出一个额外的磁盘通道接口,这个接口露在机箱外面,用线缆连接了一个JBOD扩展柜。

图6-11 外接一个JBOD扩展柜的磁盘阵列

经过这样的改造,可连接的磁盘数量成倍增长。图中所示的是每个控制器增加了一个磁盘通道,还可以增加到两个或者多个通道。理论上,只要RAID控制器处理速度够强,总线带宽和面板上空间够大,多增加几个通道都没问题。

JBOD盘柜以前只有一个外部接口,为了配合双控制器,JBOD在其外部也增加了一个接口用来连接冗余的控制器。这样,扩展柜上也有两个外部接口了。

把带有控制器的磁盘柜称作“机头”,因为它就像火车头一样,是提供动力的。机头里可以有磁盘,也可以根本不含磁盘。把用于扩展容量用的JBOD叫做“扩展柜”,它就像一节节火车车厢,本身没有动力,全靠车头带,但是基本的供电和冷却系统还是要有的。图6-12所示的是IBM的DS400盘阵机头后视图,每控制器提供3个通道,机头内部的磁盘占用一个,然后另外两个提供扩展,在后面板上给出两个SCSI接口。图中Expansion ports所示的就是这两个SCSI接口。右边空白的地方是用来接入另外一个控制器的,这个控制器是可选组件。

图6-12 DS400盘阵的机头后视图

图6-13是用于连接DS400机头的扩展柜EXP400。可以看到它的左右各有一个接口模块,每个模块上有一个SCSI接口用来连接机头。

图6-13 EXP400扩展柜的后视图

6.6 锦上添花——完整功能的模块化磁盘阵列

再后来,机头做的都比较漂亮,而且感觉很厚实。但是JBOD就是一堆磁盘,显得和机头有些不搭配。所以也给扩展柜增加了所谓的模块,不仔细看的话,外观和机头没多大区别。只不过扩展柜的模块上,没有RAID控制器的功能,但是会加上一些其他功能,如探测磁盘温度等二线辅助功能。这个模块将接口、功能芯片、电路等都集成在一个板子上,所以外观和机头差不多。

图6-14所示的ESM模块,就是实现这些功能的插板。图6-15中所示的是一个磁盘扩展柜的实物后视图,可以看到上下两个模块,这两个模块不但负责链路通信,还负责收集设备各处的传感器发来的信息。

图6-14为一台盘阵的前视图。图6-15是一台FC接口的扩展柜后视图,可以看到上下两个ESH(Electrical Switch Hub)模块。这些磁盘扩展柜上的模块中主要包含单片机或者DSP芯片、FC-AL半交换逻辑处理以及其他功能的FPGA/ASIC/CPLD芯片、SFP适配器编码芯片、ROM或者Flash芯片(存放Firmware)、RAM缓存芯片(用于存放芯片执行程序时所需的数据)等,视设计不同而定。如果有新的Firmware被开发出来,可以将程序逻辑写入Flash或ROM芯片中,这个过程就是固件升级。FPGA/CPLD等芯片需要用外置的编程器写入新的电路逻辑。ASIC芯片不可升级,是固定逻辑的芯片,适用于成熟的、量产的芯片,比如SFP编码芯片等。

图6-14 一个扩展柜的前视图

图6-15 一个磁盘扩展柜的后视图

图6-16为扩展柜上的一个ESH2模块的内部实物图。

图6-16 ESH2模块实物图

6.7 一脉相承——主机和磁盘阵列本是一家

1.盘阵(磁盘阵列)控制器的主机化

随着人们需求的不断提高,一个存储系统拥有几TB甚至几十几百TB的容量已经不是什么惊人的事情了。面对如此大的容量和如此多的磁盘,小小的控制器已经不能满足要求了。因此大的主机系统替代了短小精悍的控制器。

思考: 可能有人已经不知所措了,用主机系统替代盘阵控制器,这不矛盾么?盘阵是给主机服务的,主机替代了盘阵控制器,岂不是乱了辈分了?

事实并非如此。众所周知,主机系统的经典架构就是CPU、内存、总线、各种IO设备和CPU执行的代码(软件),而观察一下盘阵控制器的基本架构,如RAID控制器芯片(CPU)、内存、总线、IO接口(SCSI接口等)和RAID芯片执行的代码(软件),就可以发现盘阵控制器就是一个简单的主机系统。

既然这样,完全可以用一台主机服务器来充当存储系统的控制器。比如,在这台主机上插入几张SCSI卡作为前端接口卡,再插入若干SCSI卡作为后端连接磁盘箱的接口卡,然后设计软件从/向后端读写数据,经过处理或者虚拟化之后,再传送给前端的主机服务器。

目前有两种趋势:一种是趋向使用现成的主机来充当控制器的载体,另一种是趋向使用高集成度的芯片作为控制器的核心。两种趋势各有利弊。

图6-17所示的是一台主机化的磁盘阵列实物图。

图6-17 主机化的盘阵控制器

2.盘阵的类型

按照前端和后端接口来分,有SCSI-FC盘阵、FC-FC盘阵、SATA-FC盘阵、SCSI-SCSI盘阵等类型。SCSI-FC类型表示后端接口为SCSI接口,前端用于连接主机的为FC接口,也就是后端为SCSI磁盘,前端为FC接口的盘阵。

我们在后面会讲到FC-FC盘阵,这也是目前最高端的盘阵所采用的架构。图6-18所示的就是一台大型FC磁盘阵列的透视图,图示中一共5个机柜,中间的机柜整柜都为控制器,上方可见一排IO插卡,插卡上方为9个风扇。其余机柜中均为磁盘扩展柜。

图6-18 EMC DMX系列盘阵透视图

6.8 天罗地网——SAN

存储区域网络

大家来看最后一张图片,如图6-19所示。我们一开始描绘的那张“网中有网”的图片,现在大家应该能更深刻地理解了。网络,不仅仅指以太网、TCP/IP网,可以是SCSI网、PCI总线网、USB网等。RAID控制器,就相当于一个路由器,也就是协议转换器。

图6-19 网中有网

将磁盘放到了主机外部,存储设备和主机之间,就形成了又一个独立的网络:存储区域网络(Storage Area Network,SAN)。

数据就是在这种网络中来回穿梭,格式不断被转换和还原。 98Ybp9xl1+E9vOzvm/9fKchf+MxtEby5nYhziezlfUbfKLJOuQWaZcqAYt3EUg4N

点击中间区域
呼出菜单
上一章
目录
下一章
×