分布式存储系统的一些理解和实践_第1页
分布式存储系统的一些理解和实践_第2页
分布式存储系统的一些理解和实践_第3页
分布式存储系统的一些理解和实践_第4页
分布式存储系统的一些理解和实践_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分布式存储系统的一些理解和实践张建伟一、分布式存储系统介绍简介至弱化全都性要求,以得到高并发和高性能。按功能分类,主要有以下几种:分布式文件系统hdfscephglusterfstfs分布式对象存储s3(dynamo)cephbcs(mola)分布式表格存储hbasecassandraoceanbase块存储cephebs(amazon)分布式存储系统,包括分布式系统和单机存储两局部;不同的系统,虽在功能支持、实现机制、实现语言等方面是有差异的,但其设计时,关注的关键问题是根本一样的。单机存储的主流实现方式,有hash引擎、B+树引擎和LSM树(LogStructuredMergeTree)三种,不开放介绍。本文其次章节,主要结合hbase、cassandraceph,讲下分布式系统设计局部,需要关注的关键问题。适用场景各分布式存储系统功能定位不尽一样,但其适用和不适用的场景,在肯定程度上是一样的,如下。适用大数据量〔100T,乃至几十PB〕key/value或者半构造化数据高吞吐高性能高扩展不适用Sql查询简单查询,如联表查询简单事务二、分布式存储系统设计要点数据分布解决的就是数据分布问题,即哪些数据存储在哪些机器〔节点〕上。常用的有hash类算法和用meta表映射两种方式。一般完全分布式的设计〔无master节点,会用hash类算法;而集中式的设计〔有master节点〕用meta表映射的方式。两者各有优缺点,后面讲到具体问题时再做比较。hash将存储节点和操作的key〔key唯一标识存储的objectobjectname〕hash0~2的32次方区间。映射到如下环中的某个位置。沿操作key的位置顺时针找到的第一个节点即为此keyprimary存储节点。如以下图所示:1全都性hashCassandra借鉴了dynamo的实现,用了全都性hash的方式。节点的hash值〔也叫Keyhashmd5(key)3primary2个存储节点即为replica存储节点。Hash类算法,优点是无需master节点,一个缺点是,不支持key的挨次扫描。Crush算法也是一种类hash也是一种类hash算法,随着ceph诞生,也是ceph的一大亮点。Crush算法比较简单,这里简化介绍下。Ceph的每个Object最终都会映射到一组OSD中,由这组OSD保存这个Object,映射流程如下:Object→PG→OSDsetOSD先理解为机器节点吧PG即PlacementGroups,可以理解为存储在同一组OSDobject的集合Object先映射到PG(PlacementGroup),再由PG映射到OSDset。每个表空间有固定数量的pg,在建表时指定。每个Object通过计算hash值并对pg数量取模得到它所对应的PG。PG再映射到一组OSD〔OSD的个数由表的副本数打算,也是建表时指定〕,第一个OSD是Primary,剩下的都是Replicas。22cephcrush算法伪代码如下所示:PG→OSDset的映射由几个因素打算:CRUSHhash算法:一种伪随机算法。OSDMAP:包含当前全部OSD的状态、OSD的机器机架信息等。CRUSHRules:数据映射的策略。这些策略可以敏捷的设置object存放的区域。比方可以指定table1中全部objects1objects1个副本放置在1上的效劳器A21上的效劳器Btable2中全部object2、3、4上,全部Object12的效劳器2334的效劳器上。具体实现不再开放。locatorlocator=object_nameobj_hash=hash(locator)pg=obj_hash%num_pgosds_for_pg=crush(pg) #returnsalistofosdsprimary=osds_for_pg[0]replicas=osds_for_pg[1:]Crush相比全都性hash更加敏捷。range查表masterrangerange的数据存储在哪些节点上。range是依据keyClient在执行keymasterang,查询其存储在哪些节点;再直接跟存储节点交互,实现存取。Hbase是用这种方式实现,支持key的挨次扫描。region即一段range的数据〔存储在materserver上regionsever节点。3hbaseregion映射数据牢靠性数据牢靠性,即数据不丧失,是存储系统的第一职责。4数据中心数据不丧失,是任何分布式存储系统都必需考虑的。已有做法有以下几种。多副本即数据保存N+1份〔一般是3份N份时,仍能修复数据。缺点是,需N倍的冗余存储空间。hbase、cassandra、ceph都很好的支持。纠删码马上一条数据切分成nnm份相等大小的校验数据块儿。n+m份数据,各自存储在不同的节点上,拿到n+m中的任意n份数据,均可计算得到原始的数据。一般n10,m3。优点是,只需m/n倍的冗余空间,缺点是读写效率较低,且消耗cpu。5纠删码Hbase:hdfs层为hbase供给支持。Cassandra:社区版本不支持,社区还无添加此功能的路线图,之前社区有争论过此功都有较大影响,且性能较低。Ceph:支持。但在功能上有些缺失,比方不支持partialread,适合读远多于写的场景,应用较少。跨级群自动备份一般为了更高的牢靠性,数据会通过准实时备份机制,备份到另外一个IDC的存储集群。Hbase:社区版本已经支持。cassandraceph:都不支持,短期没有路线图,长远来讲,是需要添加的。接入修复客户端写数据到存储集群,一般先按肯定规章找到一个接入节点,再由次接入节点做proxy3定时或者收到通知不行用节点变为可用时,尝试写入之前未写成功的数据。Hbase:hdfshdfsnamenode记录了每个block的meta数据block存储在哪些datanod,一个datanode以看到,记录meta这种方式很敏捷Cassandra:有hinthandoff机制,原理如上Ceph:有pglog机制,原理如上全局扫描修复用以修复磁盘损坏、误删文件等缘由引起的数据丧失。由master节点发起全局数据,或者primary节点发起自己负责的range的数据,的多个副本间的数据扫描。假设觉察某个副本缺失,则进展修复。Hbase、cassandra、ceph都有类似机制,原理类似,机制不同,这里不一一开放讲了。Hbashdfs层的datanodeblocknode比照修复Cassandra:基于Merkletreeanti-entropy机制Ceph:scrubdeep-scrub机制可用性至整个机房断电断网等极端状况下,仍不影响在线读写。个机房断电,只能是多副本的跨idc存储,一般分布式存储系统都支持这种方式,只是目前实际应用的很少。点的。集中式的设计,有meta信息,需要metaserver的角色,一般也会将metaserver做成集群式,以避开单点问题。下面结合例子讲下。1) or集中式Hbase:metaserver是集群方式,通过zk的选举算法选出一个主节点来供给效劳,主节hbasemetaserverregionserver是单点的,即一个regionserver挂掉,在master没有为其负责的region进展重安排前,regionrange,是无法供给在线读写的。之所以存在此单点问题,猜测由于hbaseregionserver的这种设计能较便利是实现强全都性和简洁事务,后面会提到。现在貌似已有regionserverstandby机制,即一台regionserver挂掉,另一台预备就绪的能马上接替并供给效劳。Hbase架构如下:6hbase架构cassandraceph:是完全分布式的〔ceph虽有monitorserver,但仍可理解为完全分布式的,这里不开放了,无单点问题。可扩展性面结合例子讲下。1) 扩容Hbase:比较简洁,扩容的大致过程为:增加一些regionserver,由masterserver做一下balanceregionserverregion的对应关系〔region负责肯定范围的ke,对应于hdfs上的一组文件,完全不需要拖数据。而hdfs本身扩容也较简洁,由于有namenode〔相当于masterservehdfs的每个块儿都记录其存储节点可以将写入的文件写入到扩容的server,这样不需要拖数据;假设要考虑写压力均衡〔即不把写压力集中在参加的机器上,仍旧写全部机器,仍需要做数据迁移。Cassandraceph:由于keyhash类算法,所以拖数据不行避开。拖的数据node所负责的数据量。全都性hashcrush算法不同,导致拖数据的源节点不一样,但总的来说大同小异。数据全都性全都性分强全都性和最终全都性,解释如下:强全都性:写完一条数据key1,马上读key1,能读到最数据。最终全都性:写完一条数据key1,马上读key1,可能读到老数据,但一段时间后,能够读到数据。最终全都性相比强全都性primary和replica在读写时的地位相关,不同系统在实现上会有不同的取舍,下面具体说明。1) 单主、多主、主从Hbase:regionserver是单点,可以理解问题单主方式,自然的强全都性。Cassandra:最终全都性,通过客户端全都性级别的设置也可实现强全都性。Cassandra高,除了牺牲了强全都性,还有造成写冲突问题,cassandra通过column级别的时间戳解决此问题,但不彻底,时间戳一样时就没有方法了。Ceph客户端只能读主节点。以此实现强全都性。Ceph也支持配置为本地化〔就近,不肯定是主节点〕读方式,这种方式也牺牲了强全都性。Ceph的块儿存储和分布式文件系统功能,要求它必需支持强全都性。性能前面已经提到,不同的全都性会对性能有影响。另外,还有两点对对性能影响较大:or集中式集中式架构需要有metaservemetaservedatanode写操作除更datanode也可能要更metaservermetaserver交互的过程。所以延时更低。且集中式,在数据量巨大或者压力很大时,metaserver有可能成为性能瓶颈,目前有metaserver分层、静态子树等解决方案。Hbase:是集中式的,但客户端维护metaserver的缓存,一般读写时无需网络查询metaserverhbasehdfs层读写必需要namenode参与,所以性能低些。Hbase+hdfs这种分层架构,有很多好处,但明显性能会逊一筹。Cassandranodenode通过全都hash定位真正负责此次读写的node,再进展读写。效率要比hbase高些。Ceph:是完全分布式的,客户端通过monitorserver得到节点信息,缓存在本地,再通crush算法,直接定位到主节点实现读写。这个角度看,cephcassandra更高些。单机存储引擎分布式存储一般承受LSMTlog和

内存方式,能极大提高写性能。读操作,还是通过索引来提高性能。分布式存储的数据模型一般是schema-less括不同的列;一般只有主key索引;不需考虑数据完整性约束〔比方外键约束、列类NOTNULLLSMTSchema-less是分布式存储一般性能较高的缘由之一。7LSMTHbase、cassandra、ceph都是wal的方式。挨次写完journallog后,写实际数据。写数hbase和cassandra是写memtabl〔源自bigtable吧Ceph不是memtablesyncMemtable的方式对小value更加友好,但需要引入的compaction,compaction带来了更多的运维工作。Ceph由于其块儿存储功能,常常会修改一个对象的某一小段,假设用memtable的方式,即使修改一小段,也要重写整个对象,效率比较低。易运维性〔盘故障〔数据修复〕等操作的快速性和简洁性。12*2T24*4T盘。单机存储数据量是很大的。扩容或1或者缩短迁移时间。扩容、顶替、升级Hbasehdfs的话,其扩容、顶替更简洁,由于不涉及迁移数据。Hbase因单点问题,升级必定影响在线效劳,这一点是始终在努力优化的,例如之前提到的regionserverstandby机制,hdfsnamenode的热备机制。Cassandragossip360有多达几十个cassandra它,刚开头集群建设一步到位,后续不扩容,假设有机器损坏,直接修,而不是顶替。Cassandra的升级比较有优势,31/3的机器,而不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论