《分布式存储系统概述.docx》由会员分享,可在线阅读,更多相关《分布式存储系统概述.docx(22页珍藏版)》请在优知文库上搜索。
1、内容总括分布式存储系统是基于分布式架构,由多个软硬件协同的存储节点通过网络互联来提供存储服务的系统.或简言之,分布式存储系统使用分布式的方法来提供存储服务.分布式存储系统首先是存储系统,作为存储存储系统,最基本的需求是提供系统的可靠性和可用性.可靠性是指,用户在存储系统写入的数据不能丢,读取的数据不能错;可用性是指,系统提供的服务不中断。除了可靠性和可用性,存储系统还需要具备高性能、高数据存储效率、高安全、易管理等特点.高性能是指系统提供高IOPS、高带宽、低时延;高数据存储效率是指,存储系统利用数据缩减方法(如RAID、EC、电弱、压缩等)使用户写入的数据占用尽最小的存储空间;高安全主要针对
2、存慵系统的用户业务、存储设备、存博网络等,需要保证它们不易受到安全威胁和攻击,即使收到攻击后也易于恢复;易管理是指系统在生命周期内可以进行方便的配置、维护、优化等.分布式存储是使用分布式的方法设计的,必然具有分布式系统的特点.这些特点包括易扩展、融合存储服务、生态开放等.易扩展是指可以在方便地在已有的分布式存储系统中添加(或缩减)节点,并且系统的整体性能(IOPS、带宽)和节点数量(近)线性相关;融合服务能力是指存储系统可以同时支持块、文件、对象、HDFS等多种存储服务;生态开放是指分布式存储不仅可以方便地对接各种上层应用,其系统自身的软硬件也具有相对开放的生态.人们总是追求完美的产品,对于分
3、布式存储产品,也不例外.比如数据高可靠要高,永远不会丢数据;系统可用性要高,永远在线;系统扩展性要强,可任意扩、缩存储节点;系统容错性强,随便坏几块硬盘,甚至坏几个节点都不会影响存储系统的可靠性和系统可用性;当然,存储还必须具备高性能.但是,完美的存储系统是不存在的。这倒不完全是由于技术的原因,一些更深层的原理,比如分布式存储中的CAP理论,就从理论上制约了完美存储的存在.实际上,我们在设计分布式系统的时候,往往要在可靠性、可用性、性能、存储效率、成本等不同的方面进行权衡和取舍.不同的用户、不同的应有场景,对分布式存储系统的关注点也不尽相同.这也是为什么即使是同一个的厂商的分布式存储产品,也会
4、分成不同的产品系列和型号。其主要作用就是满足不同场景和用户的需求.本文的主要目的,是对分布式存储系统设计中所关注的问颖和方法做一些简要的说明,以期读者通过此文对分布式存储系统有一个基本的了解。下面,我将对本文中提及的分布式存储的特征做一个基本描述.因为文章长度的限制,这里的描述是粗略的。之后,我希望根据读者的兴趣和本人的能力,对分布式存储系统中的一些问题和方法进行专题论述.二、可靠性首先,我们看一下分布式存储系统的可靠性.可靠性在不同的语境下有不同的含义.为避免歧义,此文中我们特指存储系统数据的可扉性.更加严格一点说,是指存储系统在给定的时间内(定量计算中一般取一年)数据不丢失的概率.比如,亚
5、马逊S3存储服务的数据可宛性指标是11个9,也就是99.999999999%。照此计凭,用户存储百亿对象,平均十年可能出现1个对象丢失.对分布式存储系统来说,造成数据丢失的主要原因是硬件失效(除硬件失效外,软件Bug也会造成数据可靠性降低,软件Bug不在本文中论述)。硬件失效包括硬盘失效、存储节点失效、网络异常、IDC故障等.硬件失效时不可避免的.为了保证在发生硬件失效时,从整个存硫系统的角度不丢失数据,一般采用数据冗余的方法,在分布式存储集群内做数据冗余,甚至在IDC机房间的不同分布式存储集群间做数据冗余(数据备份)。当前较为成熟的数据冗余方法包括多副本和纠删码,一些新的网络编码方案也探索中
6、.多副本,腺名思义,就是把数据在分布式系统中保存多份;纠删码是RAID技术的拓展,它把格存储数据分割成固定长度的数据片段,基于这些数据片段,利用算法计算出若干个校验片段,然后把数据片段和校验片段存储到不同的存谛介质上.为了最大限度的提高数据可靠性,数据的不同副本或纠刷码片段尽最要存储在不同存储节点(甚至不同机架)。基于硬件失效(硬盘、节点、网络等)的数据可篇性可以通过建模的方法计算出来.常见的算法模型包括蒙特卡洛方法和基于泊松分布的数据估计方法,后续文章专门论述,本文从略。数据可靠性还包含了数据完整性.用户写入存博系统的数据再读取时必须正确的.实际上,数据进入存储系统,要经过网卡、CPU、内存
7、、RAID(HBA)卡、硬盘等多个部件的处理,理论上,每个部件在处理过程中都可能发生数据错误.为避免这些可能的错误,需要数据中添加校睑信息,以保障最终落盘数据的完整性.校验信息不仅可以保障落盘数据的完整性,还可以避免另一类更要问题,即静默错误(SilentDataCorruption)。磁盘发生静默错误的原因包括介质损坏、firmware问题等.在读取发生静默错误的数据时,通过校验信息,就可以发现读物数据的问期.此时,通过其他副本(或其他校验方法)可以更新读出正确的数据,保证读取数据的完整性.为了提升分布式存储系统的数据可靠性,需要从多个维度进行考量.从存储节点部件(硬盘、内存、CPU、RAI
8、D/HBA卡)级,到存储集群系统级,再到解决方案级,需要多个层次通盘考虑.在部件级,硬盘(包括HDD和SSD)最终承载了用户数据,且其数量大,相对易出错,所以,如何有效、快速地识别和处理硬盘故障,把硬盘故障对整个系统的影响降到最低,是可靠性设计面临的关键挑战.对硬盘可靠性提升的方法包括硬盘坏道检测、错误处理、满盘检测和隔寓、故障预测等内容.除硬盘外,网卡、内存等部件有需要相应的可靠性检测和保护技术.存储集群系统级的可品性技术包括数据布局的方法、故障节点的快速检测和切换、数据的快速函构等.数据布局技术就是数据的副本或EC分片在存储集群中的分布方法。良好的数据布局在可以在相同副本或EC配首下最大化
9、数据可靠性.为此,经常需要综合利用节点池、硬盘池、故障域、保护域等多种技术.节点故障(包括硬盘故障)的快速检测对提升存储系统数据可旅性和系统可用性(下文中详细讲解)都要蚕要作用.通常利用基于软件心跳的方法检测节点故障,部分厂商基于硬件故障上报或软硬结合的方法,可以更快地进行故障检测和切换.在单个硬盘或节点失效时,存储系统部分数据可靠性处于降级状态,此时,需要尽快地进行数据电构,恢且数据完整性.计算表明,数据至构的时间和数据可求性并非线性关系,而是指数型关系,所以快速圭构对于数据可靠性的提升具有重大意义.而数据田构速度在很大程度上依赖于数据布局策略,良好的数据布局可以充分发挥分布式存储的特点,多
10、个节点(硬盘)并行重构数据,从而大幅提升电构效率.解决方案级的数据可靠性技术主要包括不同存储系统间的异步复制和同步夏制技术.此处不详述.三、可用性系统的可用性(availability)指系统可以正常提供服务的能力。对分布式存储系统而言,可用性就是指系统可以正常提供读/写数据的能力.这里所谓的正常,是指用户的读写操作在合理的时间内被存储系统执行,用户写入数据被正确地持久化在存储系统内,用户读出的数据是最近更新成功的数据.可用性一般用系统提供正常服务的时长与总时长的比例来衡量。比如,若一个存储系统的可用性指标是99.9999%,则该系统在一年内不能提供服务的时间约为30秒.对分布式存储系统来说,
11、硬件部件(如硬盘)故障、节点失效、网络故障都被视为无可避免的正常情况。要实现系统高可症,就是在这些情况出现,分布式存储整体作为一个系统,将不可提供读写服务的时间压缩到最短,甚至没有(主机应用读写无感知)。理论上将,对于一个含有N个节点的对称式分布式存储集群来说,每一份写入集群的数据最好能在笛个节点上有一个副本,这样,及时N-I个节点全部失效,剩下的一个节点也包含完整数据,可以对外提供读写服务。但如果这样做,必然导致数据存储效率的降低,以及较低的性能.这时显而易见的.所以,系统设计时,要在可用性和存储效率、性能之间做一定的取舍和均衡.分布式存储系统的一个好处是,系统中的任何一个节点都可以提供读写
12、服务。-个自然的要求是,我们希望每个节点在同一时刻看到的数据是一致的.更具体地说,就是在一个具有一致性的分布式系统中,一旦对任何一个节点的写入返回成功,后续系统中其它任何节点都可以立即读到这个更新值.这个性能称为分布式系统的一致性(Consistency).一致性的要求是合理的,比如对于一个分布式应用来说,一些节点需要从存储系统的不同节点上读取数据的最新写入值,并根据这个值做进一步处理.此时,如果不能满足数据一致性的要求,就可能导致应用错误.分布式系统的另一个合理要求是分区容错性(Partitiontolerance).分区即网络分区,是因为网络故障导致网络不连通,不同节点分布在不同的子网络中
13、,子网内通信正常.分区容错性就是在发生网络分区时,系统仍然可提供服务,系统仍然可用.从需求上说,系统可用性、一致性、分区容错性都是分布式存储的必备性质。然而,2002年,麻省理工学院的Gilbert和1.ynch发表了著名的CAP定理,证明了在分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partitiontolerance)不可装得.虽然CAP定理存在一定争议,但争议本身已在不断加深人们对分布式系统内在性质的理解.实际上,一致性的模型是比较巨杂的.从概念上分,一致性模型包括严格一致性、线性一致性、眼序一致性、因果一致性、单调一致性、最终一致性
14、等.CAP定理中的一致性指线性一致性,底于强一致性中的一种。对一致性的详细介绍在专门的文章中讨论.对分布式存储来说,网络分区(P)是不可避免的。而C.A、P又不能共存,那么我们只能选择CP或者AP.对于一个通用的分布式存体系统来说.缺少一致性对部分应用来说是不可接受的,所以,大部分分布式存硅系统都是CP型系统.当然,这并不意味着完全舍弃了可用性(八).实际上,CAP理论中的A是理论上的最高可用性.在实际的系统中,并不会放弃A,设计者只是选择在C和A中选择哪个更妥一点,再一次做权衡和取舍.在发生分区的时候,我们选择了CP;不发生分区的时候,C和A自然是可以兼顾的。然而在此时,可用性和性能,具体地
15、说,是可用性和时延又成了一对不可兼得的特性.也就是说,在无分区的情况下,要追求更强的一致性,就得接受更高的响应时长。这个结论出自PACE1.C定理。对这个定理的一个粗略解释是:更强的一致性必然要求数据以同步的方式进行复制,相比于异步复制,同步豆制需要花芟更多的时间.响应时长就是性能三大指标之一的时延.从这里我们也可以看到,及时在不发生网络分区的情况下,可用性和性能(时延)之间也要做仔细的权衡和取舍。分布式存储系统要做到商可用,需要从多个角度进行设计.分布式存储系统自身首先要做到高可用。存储系统中保存多份数据(数据可靠性).并且其中多个(甚至所有)节点都可以独立对外提供存储服务,这是高可用的基础
16、.另外,在系统中发生故障时,需要系统具备快速的故障检测和故障转移能力.距商来说,外部主机通过虚拟地址连接到存储集群中的某一台存储节点读写集群数据,在该存储节点发生宕机等事件无法继续提供服务时,存储系统要具备快速将服务切换到虚拟地址对应的备用存储节点上继续提供服务.要提升可用性,有时还需要应用侧(主机侧)进行配合。比如,在主机通过多路径软件连接到分布式存储集群时,在存储集群检测到其中某个存储节点故障时,可以立即通知主机侧(如通过主机上安装的代理软件),进行快速路径切换。这种方法比简单地通过主机侧利用软件超时的方法进行故障倒换要快的多.再比如,在主机侧安装特定的存储客户端软件,使主机以负载分担的方法,和存玮集群中的多个节点同时通信.此时,若某个节点故障,主机还可以通过其他道路读写集群数据,这也是对可用性的提升.除了在本地分布式存储集群中考虑提升可用性外,如果有更高的可用性要求,可以考虑基于不同地理位置的业务连续性保护方案,典型如异步夏制方案、AA双活方案等.异步巨制方案中,存