当前位置:首页 期刊杂志

基于Ceph的分布式异构存储系统数据处理优化研究

时间:2024-05-04

陈晓丹 庞双龙 曾德生 邵翠

(广东创新科技职业学院 广东省东莞市 523960)

近年来,互联网行业逐渐产生了大量的数据,人们对于计算性能与存储性能要求不断提高。各界学者面临着如何设计低成本的存储系统应对数据爆炸问题。传统的集中系统属于常用的储存数据的方法,只是单纯的将计算与存储集中在一起,受到CPU与存储介质发展速度的限制,并不能满足数据增长的速度,为此需要分散多台主机,进而实现分布式计算与存储。但随着科学技术的不断进步,Ceph分布式对象储存系统得到了广泛应用。数据大规模增长会导致生产环境中多个集群有先后顺序或功能的需求,会造成存储异构情况。异构环境下,数据放置问题成为了当前的研究热点,数据放置策略的不同,可积极影响系统性能与集群的负载平衡。

Ceph作为分布式对象存储的代表,拥有很多对象存储的有点优点,如扩展性,小文件存储,容易维护等,Ceph利用硬件水平扩展,应用分层组织方法,支持大规模数据存储。以往的大部分文件分布式文件系统存储时,应用分片方式对文件进行处理,而在实际存储的时候则需优先处理文件分片,一般借助128M、256M切分。但在对小文件进行处理的时候很容易出现空间浪费的情况,而对象存储则可对小文件存储的问题予以有效处理。而且Ceph无需对多余数据层次结构进行维护,仅将重点放在数据本身即可。目前,有关Ceph的研究成果较多,国外有学者对不同大小的文件使用不同的模型进行优化,也有学者对数据进行迁移,实现可编程数据存储系统,让用户按照自己的需求实现负载均衡。

1 Ceph的架构与读写流程

Ceph的应用目的就是提高负载均衡的效率,而当前所需解决的问题就是热点节点高于其他节点负荷。但在实际应用中,Ceph会借助伪随算法将数据的存储分散在集群中的所有主机扇,另外,其具有可用性,即便发生故障,也不会影响数据完整性与可访问性。Ceph的组件包括客户端、元数据服务器、集群监视器、对象存储集群。所谓客户端,具体指的就是在生产实践中,用户无需直接读写对象,而Ceph可提供三种接口,为用户集群操作提供一定便利(如图1)。文件系统接口(CephFS)是利用RADOS作为底层存储的文件系统,可以兼容POSIX接口,文件系统接口适用于各类Linux系统,而CephFS会分开存储数据与元数据,一定程度提高了程序性能与可靠性。Ceph集群的内部,文件系统接口需要借助链接库对RADOS进行访问,而底层存储集群则需设置不少于一个节点,进而对元数据服务进程进行部署。而块设备接口,则提供了具有可扩展性的高性能内核模块,可利用虚拟块设备与海量数据存储系统实现交互。对象网关接口所提供的接口兼容了Open Stack与Amazon S3,但因S3与Swift API共享命名空间,所以一般会选用同一API写入数据,用另外的API检索。元数据服务器是指,在应用文件系统接口访问底层存储时,应用其维护Ceph文件系统的命名空间。元数据服务器内所含元数据以及相数据会在对象存储集群内存储,因而可拓展性十分理想。元数据服务器在实际运行的过程中,借助内部动态子树算法即可调整系统命名空间。而集群监视器经Paxos算法处理后,可对元信息Cluster Map加以维护,在和集群监视器通信的过程中,用户即可对集群组件具体位置加以获取,经CRUSH算法处理后可确定对象节点位置。通过网络提供访问,应用对象存储设备的CPU与内存进行复制,进而实现负载均衡、监控、恢复故障等。

图1:Ceph提供的访问方式

在Ceph中主要含括了对对象分布、复制、迁移实施管理的分布式对象存储服务,其在应用智能对象存储设备,取缔了传统的存储。各Ceph集群均含有大量OSD,且每个对象会随意分配至一OSD。对于读写而言,客户端首先与Ceph监视器通信,在获取集群图像后对集群整体配置、状态等形成一定了解,并分割存储数据,使得所有对象均具有ID,这个ID是Ceph存储数据时需要的逻辑分区,结合数据访问频率特性创建相应数据,并在存储设备中分开存放,对象ID下,Ceph分组,放置组通过在对象之上抽象出来一层,降低数据管理难度。Ceph存储集群是一个整体系统,在处理大量并发请求时,不会影响集群整体的性能。

通常,存储含括了数据存储、元数据存储两部分。其中,元数据即数据信息、数据大小与存放位置等,也就是存储数据的属性。对于出啊同分布式系统,如果添加了新的数据,那么元数据也会随之更新,但数据存储的物理位置会被Master节点吸入后对具体数据进行存储,此过程的数据量只有GB/TB级别被证明具有可行性,若存储PB或EB级别的数据,则不应该应用上述方法。实际上,此种存储方式面临着单点故障问题,若Master节点出现故障,则会丢失元数据,致使所有数据丢失。为此,无论是对单一Master节点副本维护,亦或是对数据和元数据整体复制均需要保证容错性,进而规避元数据丢失。在管理元数据的过程中,也能够有效规避存储系统出现瓶颈而影响系统的可用性。使用Ceph存储、管理数据的时候一般会借助CRUSH算法,此算法是智能数据分布机制,在Ceph数据存储机制中发挥了核心作用。长期以来,存储系统对于中心节点的依赖性较高,而将元数据亦或是索引表存放于节点之上,即可实现管理存储系统的目的。较之于传统系统,Ceph在数据计算中会选择CRUSH算法以确定数据位置,消除了存储元数据的限制条件,在需要时执行CRUSH算法,可以快速应用此种方法进行查找。实际上,CRUSH算法属于伪随机算法,在多参数哈希算法的帮助下即可获得映射关系的输出结果,但受算法特殊性影响,对象与存储设备间的映射关系并非显式相关。而用户则能够对分布情况进行自定义,以及制定数据放置策略。

Map Reduce是编程模型,因而对于节点处理数据的计算量较大,结合拓扑结构可将节点细化成集群和网格两种。其中,集群指的就是节点硬件配置类似的共享局域网,而网格指的则是节点硬件配置异构差异,分布于不同的位置,在对Map Reduce核心思想进行分析的过程中,可实现结构化数据、非结构化数据向键值对的转化,然后对其进行合并,具有将数据本地化的优势,且可减少通信开销问题。Map Reduce在提交任务时,要对任务配置文件进行切分,之后将其拷贝到分布式存储集群中,按照Map阶段,Shuffle阶段与Reduce阶段对数据进行存储。Map Reduce一般可在大规模离线批处理任务(科学计算、排序等)时运用,但一般在较高实时性要求的计算问题中并不适用。

2 基于Ceph改进结构的设计

2.1 灾备问题

既有Ceph把全部存储设备对象当做整体系统而对外提供服务,各PG能够结合CRUSH Map内buket类型划分,而主要级别包括主机、机架和机柜。生产实践中,仅借助此机制很难对灾备问题加以解决,仅可确保单集群内故障所致数据丢失,一旦集群整体出现故障,系统的可用性则无法得到保障。目前阶段,很多企业在分布式系统内开始引入异地多活技术,与异地容灾的方法比较,其更加复杂,且对数据的同步要求更高。在对分布式一致性算法使用的过程中,即可确保系统内的部分集群处于宕机状态下,系统能够在短时间内做出切换并对外提供服务。即便A地区有灾害,B地区同样可提供正常服务,且无需开展更多备份恢复工作,对容灾问题加以解决。此外,还能够使集群的部署成本减少,改进原本的Ceph架构可以解决无法解决的异地容灾问题。

2.2 异构系统

目前阶段,绝大部分互联网的应用规模相对较大,即便是单一数据中心,其内部的设备也存在显著不同。在此研究中,将地理位置故障域添加至Ceph,将原本的底层存储根据地理位置进行了划分,使得集群间的数据传输网络在延迟方面存在一定差异,容易引起网络异构问题。较之于低延迟网络,高延迟网络通信会降低传输速率,影响整个系统性能的现象。在此状况下,下游任务应在上游任务完成后才可执行其传输功能,进而形成了网络瓶颈。除去此项因素外,OSD的计算能力也影响整个系统的性能,究其原因,各OSD计算能力存在差异,所以执行同一任务的时间开销也必然有所区别,那么根据数据本地化的特性,对其进行处理,若计算性能强的OSD上有更多数据,同一时段内,有更强的计算能力。一旦数据比较强性能机器总容量多的情况下,则要对集群负载均衡情况加以考虑。一般来讲,负载均衡的目的就是尽可能规避一台主机访问节点发生阻塞,为此,需要将所有数据分配到的部分高性能设备进行综合考量,以免造成网络拥塞。

图2:改进Ceph的数据分配机制

2.3 性能优化的分区机制

数据放置策略有很多挑战,如何合理放置数据减少网络传输,如果在异构环境下改进数据放置策略,将自身存储能力发挥出来,如何提升系统总体容量等问题也随之发生。为解决上述问题,此研究提出Ceph结构优化法以及分区机制下分配数据法,在Ceph中,数据会以对象的形式存储到RADOS中,并借助CRUSH Map对用户自定义防治规则加以获取,通过对CRUSH算法的使用,可保证OSD上分配的数据更加均匀。在正常运行Map Reduce时,需要综合考虑日志以及数据预测等因素,如果计算性能不理想很容易增加任务的堆积量,致使网络传输流量明显增加,因而应用此方式进行数据放置时,就会导致APP的执行时间超出预期时间。本文优化Ceph架构,有必要将假设条件添加其中,并对各集群内计算性能、存储容量以及网络延迟同构做出假定,才能在改进的架构下,提出面向性能优化的分区机制,对数据进行分析,充分满足负载均衡的条件,将APP的执行时间最小化。

2.4 数据分配机制

首先,要将被处理的数据切分,每个对象的大小为64M,数据分配机制架构图如2所示。

对象是参数调用哈希函数,通过两次调用操作即可对对象集群ID、各集群内输入CRUSH算法需要的PGID成功获取。经两次调试即可调用CRUSH算法,并将集群ID加入其中,作为输入参数使用,以确保PGID分发到相对应集群当中,并对对象OSD位置予以获取。

2.5 数据备份流程

数据备份主要目的就是保证发生意外下,不会造成丢失,对于整个系统的优劣评估来说具有重要意义。Ceph支持两种方法的备份:

(1)使用纠删码;

(2)传统多副本形式。

而副本之间需借助计算方法实现数据恢复的目的,而纠删码与多副本机制相比较,存储空间显著节省,优势显著。但纠删码在数据恢复计算的过程中,要对多余计算资源进行消耗。较之于传统Ceph,纠删码也可在各集群内实现不同故障域级别隔离,且系统用户能够结合个性化需要选择不同的隔离方式。在跨地域级别故障域隔离方面,则要将对象所在集群分区予以删除,并作归一处理,充分保证对象的副本位于不同地理位置的集群,提供了完善的故障域隔离级别,提高了系统的可用性。

3 优化数据分配问题的定义和算法

3.1 模型与问题定义

根据改进的Ceph架构并结合Map Reduce计算框架,分析问题的定义,主要从四个方面进行:系统模型:集群底层的存储模型定义,存储系统由多个集群组成,每个集群内部有许多对象存储设备组成,对于每个集群内部来说,存储设备的容量不同,而对于此研究的系统模型来讲,集群的连接需借助异构网络,在数据传输的过程中,开销会跟随网络状况的变化而发生改变。应用模型:本文在上层计算框架方面应用的是Map Reduce,所以专门针对Map Reduce的流程进行建模,Map Reduce的工作流程可细化成三个阶段:

(1)Map阶段;

(2)Shuffle阶段;

(3)Reduce阶段。

如果完成了某一Map任务,且集群节点处有闲置资源的情况下,Shuffle阶段就会及时进行网络传输。此研究中为针对Shuffle阶段进行模型建造,就是对系统模型中所定义的网络传输开销予以直接使用,同时启动空闲节点部位的Reduce任务,并对函数进行调用与复制即可对不同节点Map任务输出予以获取,若系统有剩余空闲资源,则Map阶段与Reduce阶段共同执行。负载均衡约束的阈值:由于Map Reduce具有特殊性,应用数据块代表每个对象,在Map任务开始前,切分数据对象,而Ceph在存储数据时会将数据切块变成对象,基于此,应该规定每个对象的大小与数据块的大小一致,给定负载均衡约束阈值,可以调整,而系统所有者可结合以网络条件、硬件状况等多种因素做出决定。若全部集群内最大负载与最小负载集群间差异低于阈值,即可认定存储系统出现相对负载均衡状态。问题的定义:问题输入,给定一个对象集合、一个集群,在各OSD与不同集群执行同一任务时间的情况下,集群间网络宽带延时,而系统所有者定义负载均衡的约束阈值。对于问题输出,具体含括了集群内对象分布状况、任务最终执行时间。

3.2 混合整数线性规划算法

对于分布式异构系统而言,任务调度的作用不容小觑。目前,在研究实践中提出了各种各样的算法,本文利用MILP算法解决上文提出的问题。需将约束添加至Map Reduce整个过程中,而添加的内容含括Map任务的开始、执行、拷贝时间,Reduce任务开始时间与执行时间,向对象存储设备分配对象的过程中,将约束条件确定为系统负载状况,而负载均衡标准就是阈值。在MILP算法中所设计的约束应分为两个不同的部分。具体MILP算法的符号定义如表1。

表1:MILP算法的符号定义

任务约束:对分布计算框架Map Reduce的流程进行梳理,对于任意一个Map 任务i,Ami,on求和,结果1,

每个Reduce任务需要被分配到一个OSD上,

在Shuffle阶段,每个Map任务的中间结果被复制到Reduce任务节点的开始时间需在相应的Map任务完成时间后,

给另外一个约束,Reduce任务只能在Shuffle阶段所有中间结果的复制完成后,才开始,

下面的约束要有先行的假定条件,为了简化问题,假设每个计算节点有一个槽,只执行一个任务,在同一个OSD上先后执行两个Map任务不可重叠,,

在同一个OSD上先后执行的两个Reduce任务不可重叠,,

分析这两个公式属于非线性形式,并不能适用于混合整数线性规划模型,为了让这些公式变成线性形式,需要转换约束,所以用了四个变量:x,y,p,q辅助,进而实现非线性模型向线性模型的转化。

若Map任务i开始时间+执行时间=Map任务j的开始时间,那么mstmi+meton-mstmj=0,由此可以得到以下公式,若两个Map任务之间没有重叠,也就是说若下面公式同时成立,且x,y相加等于1,

xmi,mj+ymi,mj=1

Reduce任务的转换采用方法与Map任务的转换类似,

pri,rj+qri,rj=1

上一个小节已给出了任务部分的约束公式,由于是特定计算框架,所以Map任务的数量可以代表对象的数量,对一个OSD上的所有Map任务求和可得到:

用以下公式表示某个集群的负载情况,假定OSD上分配到的数据量是相同的,需要相除的计算方式可得到集群的负载情况。

上述公式中的T未负载均衡约束阈值,拥有最大负载与最小负载集群的偏差,且每个集群的负载情况需满足阈值。

基于上述两类约束条件,给出整个模型的优化目标,在Map Reduce框架中,Reduce任务要等到Map任务全部完成后执行,

在得到优化目标后,将上述约束不等式作为输入通过lingo或gurobi等优化软件进行求解,得出任务执行时间。

3.3 基于遗传算法改进的数据放置算法

若对象存储设备,集群数量多,MILP算法时间复杂度高,则需要寻找相似算法,代替最优解。遗传算法属于一种启发式的近似算法,最近几年中,有很多人通过对遗传算法的改进,来求解任务的调度问题,遗传算法理论基础上,本文提出了高效的改进算法也就是DPGA算法解决定义的问题模型。随着科学技术的不断发展,算法不断更迭中,应用算法获取的所有染色体各自的适应症,每一个染色体都代表一种方案,根据不同数据设置方案即可。

4 结束语

本文对现有的分布存储方案与分布式计算框架的发展现状进行了简要分析,针对Ceph的技术细节进行介绍,包括架构,读写流程以及CRUSH算法,分析不足之处,提出改进的新的分布式架构,提出算法与问题的定义,对系统和应用建模,在原有的数据分配中,添加了概率表,并在构建概率表的过程中,利用了异构环境,设备的计算能力与网络差异特点,对所面临的数据进行建模,随后对Map Reduce进行约束,对系统内部的集群负载进行约束,进而利用该算法求得问题的最优解。

综上所述,本文提出的架构与算法可有效解决存储系统异构环境下面临的数据分配问题,在灾备策略上,安全性与可用性得到了提高,Ceph作为一种去中心化的分布式对象存储系统,具有高可用性、可扩展性、可靠性。能够使比如Map Reduce这样的分布式计算框架运行在其上,性能良好,

本文通过对Ceph架构的改进,对数据放置方法的优化,同时,Ceph应用CRUSH算法分配数据,有效解决了系统内部集群的负载均衡问题。对于集群内部的节点同构问题,数据分配均匀问题,存储设备计算能力之间的差异问题等都是影响整个系统性能的因素,不同的数据放置策略严重影响系统整体性能。我们在改变数据放置策略后,提供系统性能,充分考虑网络异构性,以免造成网络拥塞。另外,对于系统高可用性方面的验证,还需要在未来的研究中对此问题建立模型分析,上述问题,今后的研究中会加以考虑。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!