【大话存储II】学习笔记(15章),块级集群存储系统

存储系统演变

存储系统一直以来都是一个总的控制器加上几串磁盘扩展柜存在的,但是随着数据量的快速增加,性能受限于控制器,所以要提升整体的处理能力,主要有两种方法:

  • 最简单的是在单个控制器中加入更多的CPU、内存等,就如同PC机性能不够了,就加内存、换SSD等。这种扩展方式称为带内扩展,Scale-up

    这种方式的问题是,随着CPU数量的增多,耗费的设计成本会越来越大。比如说在多CPU的系统中,我们需要花费大量的精力来保证CPU之间的通信。可见【大话存储】多CPU架构变迁, SMP,NUMA,MPP

  • 而多台独立的控制器形成一个集群,他们通过网络将互联起来。这种方式叫带外升级,Scale-Out

    不过现在大规模主机集群没有广泛应用于企业中,原因在于集群的应用程序还没有跟上。我们知道传统的程序主要是运行在单机上的,并没有针对集群进行相应的优化,目前只有一些数据库等系统提供了集群方式的部署,比如Oracle RAC等。

    另一方面,企业又被主机性能浪费所困扰,又需要部署虚拟机系统

    真的是集群也不是,不集群也不是,又催生了更彻底的解决方案——云系统

好了我们重新回到集群存储系统上来,如果存储系统要做集群,数据分布方式将有两种:

  • 将整体数据切分成若干份,然后每一份都分开存储在单个的节点上

    这种方式,因为完全由系统自己决定如何切分。如果多个应用系统同时访问,有可能会影响系统整体的性能。

  • 手动进行切分,每一份放在独立的节点上。

    这种方式需要更多人为干预,但是却可以保证性能资源的合理分配,每个应用系统只访问一个或者若干节点,不影响其他节点的性能。这种方式,相当于在传统架构中为每个应用建立独立的Raid Group一样。

其实一个存储系统最大的问题在于在多主机并发访问时,如何能保证系统的性能,目前主要是通过隔离资源的方法来解决。

所以对于主机而言,只能看到自己的LUN,只是这些LUN是虚拟出来的,可以进行集中管理。

我们可以把集群存储系统分为如下三种:

  • 块存储系统

  • NAS集群系统

  • 文件系统集群

下面我们将先介绍块存储系统,主要介绍市面上几种典型的产品。


image.png

IBM XIV集群存储系统

组成部分

XIV是一种网格集群化存储系统,每个节点都是一台PC Server,每个节点包含12块本地SATA盘,配置是两颗4核的CPU和8GB的内存。

XIV有共有两种类型的节点:Interface Node , Data Node

  • 只有Interface Node上插着FC HBA卡,也就说主机只能连接到Interface Module上。Interface Module本身含有12块SATA硬盘。

  • Data Node只有12块SATA硬盘以及两块双口千兆以太网卡。

所以这两种节点都可以提供存储空间,只是说Interface Node还可以接前端的主机而已。

下图为集群连接拓扑。

image.png

下图为机柜示意图

image.png

LUN的分布式设计

集群系统中,LUN被平均分布在多个节点上,也就是说一块逻辑硬盘实际上会拆分成若干份,散落在不同的节点上面。那么我们怎么知道LUN分散到哪里去了呢?这就需要一个映射图来记录每个LUN的分布情况。

为了保证数据块不丢失,每个LUN对应的数据块会镜像一份,而且放到另一个节点上。这样纵然这个节点挂了,还可以根据映射图找到其镜像,然后重新复制一份到剩余空间里面。这种思想就叫多副本机制,我们把源分块称为Primary,镜像分块称为Secondary。

这种思想与NetApp的WAFL文件系统极为类似,实际上高度虚拟化的设备,一般来说,底层的LUN不是存在于固定的位置。比如XIV可以通过映射图来记录LUN在所有节点的存储地址,这就是文件系统的思想,我们知道文件系统是可以通过INode Tree来遍历整个文件的分布情况的。

WAFL和XIV正是对文件系统的基本思想的灵活运用,但是XIV的粒度和元数据复杂度没有WAFL那么细,所以没有沦为一个彻底的文件系统。

所以像XIV这样的块存储系统,对内使用文件系统的基本思想进行LUN的管理,但是对外屏蔽细节,对主机而言是透明的。

如何应对客户端的写IO

当某个Interface Node接收到一个写IO的以后,首先会通过映射表去判断这个写IO会落到哪个节点上以及其镜像又落在哪里。有两种可能,一种是留在Interface Node 上,也可能在Data Node 上。

  • 如果是落在Interface Node本地硬盘中,则会将副本发送到分块镜像所在的Node中。
    然后返回成功。

  • 如果是放到另外的节点中,则Interface Node重定向这个写IO到该节点中。应该保存Primary分块的节点会再次根据映射表把分片数据复制到副本节点中。
    当副本也写入成功了以后,才会向最初的Interface Node返回成功回应。由Inteface Node向客户端返回成功。

image.png

总结一下,就是Interface Node会接收到主机的写IO请求,如果发现是写到自己的内部硬盘上,则复制两份到副本节点上。

如果Inteface Node发现数据是写到其他节点上,则会将写IO重定向到对应的节点上,由该节点复制两份数据到其他节点。当所有的写入都成功了以后,才会向最初的Interface Node返回成功,注意,此时仍由Inteface Node 向主机返回成功,也就意味着,主机其实不知道数据被重定向走了,它仍然以为自己在和此Inteface Node 交互数据呢。

XIV快照设计

我们知道XIV设计也使用了文件系统的思想,所以对于快照,XIV的做法与WAFL差不多,都使用Write Redirect。现在简单的讲一下。

XIV的卷管理模块其实是一个集群文件系统,每个LUN都对应一个分布式映射表(Distribute Map)

如要要生成快照,可以将这个点数据以及映射表先冻结,然后把映射表复制一份,做为新的活动映射表,之后的针对这个LUN的写IO都会被重定向到空闲数据块上,并把映射表更新。

所以再生成快照就简单了,只需要把活动的映射表复制一份即可,这就是Write Redirect模式。

故障恢复

XIV对数据分布的本质思想是分布式RAID 10,相当于将一个LUN复制一份,副本保存在其他位置,这样系统的可用容量相当于减半了,我们可以把这种设计称为上层分布式RAID 10

那么这种RAID 10的做法与传统的RAID 10有什么区别呢?

我们传统的RAID 10不管底层有没有数据占用,都会将所有数据块镜像起来,浪费了很多空间。这是因为判断有用或者是没有是上层的文件系统来做的,传统的RAID 10根本无法判断,所以只能一股脑的镜像。

XIV相当于一种粗粒度的文件系统,它可以在上层对数据块是否有用进行判断。

下面来具体看看XIV是怎么做:

  • 不需要备份无用的块:XIV卷管理系统相当于一个粗粒度的文件系统,LUN就是它管理的文件,所以它可以感知LUN分块占用了磁盘的哪块空间。也就是说卷管理系统完全可以只镜像部分LUN分块,而无须做其他的无用功。

  • 分布式

    假设LUN被分为6块数据块,分别标记为B1B6,镜像块为M1M6。

image.png

如果D1故障,为了恢复数据的冗余,可以将镜像块M1~M3复制到D3和D4磁盘中。

D1故障

如果D3又故障了,那么数据还是没有丢失,依然继续复制。此时还有冗余性,存在一份副本。

D3故障

此时如果D2或者D4发生了故障,则没有冗余性了,但是数据仍然没有丢失。

此时如果手动添加了两块硬盘,XIV会重新平衡数据。如下图:

image.png

XIV的这种上层RAID 10设计可以随时迁移数据块,并且可以任意分布式摆放数据块,不受磁盘数量限制。只受系统内剩余空间限制。我们把这种模式叫上层分布式RAID 10

那么与传统的RAID 10有什么区别。传统的RAID 10在一块盘故障之后,只能将数据镜像到新盘里面。

目前发布的XIV系统,最大配置为6个Interface Node和9个Data Node,最大磁盘数为1512 = 180块。XIV这种架构设计可以很容易的扩充节点*

XIV优点

下面我们来看一下XIV相对于传统架构有什么优点:

  • 如果此时系统还有剩余的磁盘空间,只要磁盘一块一块的坏下去,整体数据的冗余性可以保持,直到一点空间都没有的时候。当然前提是,当一个磁盘或者节点坏了以后,需要Rebuild,也就是只有在Rebuild以后,才允许再坏一块硬盘,否则有可能数据被损坏。

  • 另一个优点在于恢复的速度上,它的Rebuild时间短,一个1TB容量的SATA盘损坏之后,Rebuild时间只有30分钟作用,为什么这么快呢?

    • 原因一:XIV使用的是RAID 10的思想,而不是RAID 5。

    这样XIV没有校验盘,不需要计算校验值,也不需要把校验值放到其他空间里面,节省了大量计算资源和IO资源。所以XIV的恢复时间比RAID 5快十几倍很正常。

    我们可以简单的对比一下。假设有180块硬盘,组成大RAID 5,此时坏了一块盘,系统需要从剩下的盘里面读所有的数据。

    若一块盘容量为1TB,内部磁盘环路带宽为4Gb,需要耗费时间(179TB/4Gb)/3600=130.3小时,与XIV的30分钟相比,反差巨大。

    还可以与传统的RAID 10对比一下。180块盘组成RAID 10,其中90块数据盘和90块镜像盘,如果一块盘故障,会从对应的镜像盘中读数据。由于是RAID 10,不需要计算XOR等,可以整盘复制,所以是连续读写,可以达到磁盘的最大吞吐。SATA硬盘的理论连续读吞吐量为60MB/s,所以Rebuild时间为(1TB/60MB/s)/3600 = 4.85小时,为XIV的10倍。因为RAID 10需要整盘复制。

    • 原因二:分布式。

    传统RAID 10中,一块盘坏了,只能从镜像盘中取数据,写到新盘上,也就是一个盘读,一个盘写。

    而XIV是将LUN分块平衡存放到多个磁盘上,而这些分块对应的镜像也是存放在多块磁盘。所以XIV在 Rebuild的时候,是从多块盘读,多块盘写,相当于RAID 3,众人拾柴火焰高,恢复速度当然快。

    • 原因三:最重要的原因,不做无用功。

    Rebuild的时候,只使用了已占用的数据块,而不是整块盘

image.png

3PAR公司Inserv-T800集群存储系统

Inserv-T800为一款x86集群式存储系统。

每个节点都是一台x86 Server,整个集群可以由2~8个节点组成。系统所有节点两两直通,每两个节点使用一条独立的100MHz 64b PCI-X总线相连。

比如一个8节点的系统,1个节点需要与另外7个节点互联,所以每个节点都需要7条PCI-X总线连接到背板,形成一个具有28条直通PCI-X的星形结构。

image.png

PCI-X是半双工的,所以内部互联带宽为28*800MB/s=21.875GB/s。

不过因为PCI-X并非一种包交换网络传输模式,所以背板不需要加电,是一块布满导线和接口的被动式背板。也正因为此,只用了两个控制器,则只用到一条PCI-X作为互联.

image.png

上图为单节点内部的架构,其中ASIC芯片是比较独特的。它将Thin Provision和LUN Shrink功能内嵌到芯片里面来执行。

image.png

3PAR扩展柜很有特色:在4U的空间放置40块3.5的大盘。因为磁盘可以竖着插而且紧密排列,所以散热和共振的问题也解决了。

特点:

  • 使用直连的PCI-X总线作为节点之间的互联。但是因为使用点对点的互联,而不是使用交换的方式,系统的扩展性很有限

  • 节点内部使用ASIC来实现大部分的数据操作,而且还负载Thin Provision和LUNShrink(Space Reclaiming),降低了CPU的负担。而且扩展柜的高密度设计,减少了空间和连线,降低了耗电。

瓶颈在于每个节点使用3条1GB/s的PCI-X总线来支持6个扩展卡共4Gb/s的FC接口,有些不够。所以系统吞吐量上不去。

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容