一种PG成员选择方法、装置、存储池和分布式文件系统技术领域
本发明涉及数据存储领域,特别涉及一种PG成员选择方法、装置、存储池和分布式
文件系统。
技术背景
随着现代社会科技的发展,大数据已经成为未来发展的一种趋势。计算机通过文
件系统管理、存储数据,而处于大数据时代中的人们可获取的数据成指数倍的增长,单纯通
过增加硬盘个数来扩展计算机文件系统的存储容量的方式,在容量大小、容量增长速度、数
据备份、数据安全等方面的表现都差强人意,这就使得分布式文件系统的应用越来越广泛。
分布式文件系统可以有效解决数据的存储和管理难题,通过将固定于某个地点的
某个文件系统,扩展到任意多个地点/多个文件系统,使众多的节点组成一个文件系统网
络。每个节点可以分布在不同的地点,通过网络进行节点间的通信和数据传输。人们在使用
分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需
要像使用本地文件系统一样管理和存储文件系统中的数据。
现有技术中,对于分布式文件系统中easure类型的存储池,存放数据的PG(放置
组,数据迁移与改变的最小单位)的成员osd若发生故障,会产生不必要的数据迁移。如图1
和图2所示的crush算法在osd out之前和osd out之后的osd选取过程。可以看出,两次选择
的最终结果分别为{0,2,1}和{2,-1,1},尽管是osd1发生了故障,但也导致osd2的位置也发
生了变化,也就是非故障osd的位置发生了改变,致使非故障的osd中的数据会从当前osd迁
移至通过crush算法计算出的新的osd上,这种数据的迁移是不必要的,并且速度比较缓慢,
会影响系统的效率。
发明内容
本发明实施例所要解决的技术问题是,提供一种PG成员选择方法、装置、存储池和
分布式文件系统,以保证PG非故障成员的位置不会发生变化,减少数据迁移量,保证系统的
高效稳定。
为解决上述技术问题,本发明提供了一种PG成员选择方法,该方法包括:
计算出每个item的osd值后,遍历临时数组判断是否与临时数组中记录的选中osd
值相同;
若否,将所述osd值作为选中osd值记录到所述临时数组,并判断所述osd值是否
out;当所述osd值out时,所述item不选择所述osd值;当所述osd值没有out时,所述item选
择所述osd值;
若是,判断是否达到预设遍历次数;
当达到预设遍历次数时,则所述item不选择所述osd值;
当没有达到预设遍历次数时,则继续计算出所述item新的osd值。
可选的,还包括:
当所述临时数组中存在out的选中osd值时,新一轮选择开始前删除所述临时数组
中的out的选中osd值。
可选的,还包括:
当PG成员选择完成后,清空所述临时数组中的选中osd值。
此外,本发明提供了一种PG成员选择装置,该装置包括:
遍历模块,用于计算出每个item的osd值后,遍历临时数组判断是否与临时数组中
记录的选中osd值相同;若否,向记录模块和第一判断模块发送选中信号;若是,向第二判断
模块发送冲突信号;
记录模块,用于接收所述选中信号,将所述osd值作为选中osd值记录到所述临时
数组;
第一判断模块,用于接收所述选中信号,判断所述osd值是否out;若是,向选择模
块发送不选择信号;若否向选择模块发送选择信号;
选择模块,用于接收所述选择信号或所述不选择信号,对所述item选择所述osd值
或不选择所述osd值;
第二判断模块,用于接收所述冲突信号,判断是否达到预设遍历次数;若是,向选
择模块发送不选择信号;若否,向计算模块发送计算信号。
计算模块,用于接收所述计算信号,继续计算出所述item新的osd值。
可选的,还包括:
删除模块,用于当所述临时数组中存在out的选中osd值时,新一轮选择开始前删
除所述临时数组中的out的选中osd值。
可选的,还包括:
清空模块,用于当PG成员选择完成后,清空所述临时数组中的选中osd值。
本发明还提供了一种存储池,包括:如上述任一项所述的PG成员选择装置。
本发明还提供了一种分布式文件系统,包括:如上一项所述的存储池。
本发明所提供的一种PG成员选择方法,包括计算出每个item的osd值后,遍历临时
数组判断是否与临时数组中记录的选中osd值相同;若否,将所述osd值作为选中osd值记录
到所述临时数组,并判断所述osd值是否out;当所述osd值out时,所述item不选择所述osd
值;当所述osd值没有out时,所述item选择所述osd值;若是,判断是否达到预设遍历次数;
当达到预设遍历次数时,则所述item不选择所述osd值;当没有达到预设遍历次数时,则继
续计算出所述item新的osd值;
可见,本发明通过加入临时数组记录选中osd值,每个item选择前先遍历临时数
组,使得第一轮选择结束后就可以把所有item选择的osd值确定,后面的轮次只针对不选择
osd值的item;这样就保证了PG非故障成员osd中的数据不会发生变化,减少了数据迁移量,
并且可以减少选择的轮次,使得选择的效率显著提高。本发明还提供了的一种PG成员选择
装置、存储池和分布式文件系统,同样具有上述有益效果。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使
用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于
本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其
他的附图。
图1为现有技术中crush算法在osd out之前的PG成员选择流程图;
图2为现有技术中crush算法在osd out之后的PG成员选择流程图;
图3为本发明实施例提供的一种PG成员选择方法的流程图;
图4为本发明实施例提供的另一种PG成员选择方法的流程图;
图5为本发明实施例提供的另一种PG成员选择方法的osd out之前的整体示意图;
图6为本发明实施例提供的另一种PG成员选择方法的osd out之后的整体示意图;
图7为本发明实施例提供的一种PG成员选择装置的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完
整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于
本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本申请保护的范围。
为了解决PG中osd的非故障osd数据迁移的问题,经研究发现,PG会处于稳定的
degrade状态和不稳定的degrade+remapped状态,处于后一种状态的PG,会使数据从当前
osd迁移至通过crush算法计算出的新的osd上,也就是发生非故障osd中的数据迁移。
为了解决非故障osd中的数据迁移,需要从现象入手,调研PG的remapped状态是如
何产生的。通过不断的调研与尝试,发现osd故障状态变为out之后,部分pg成员的状态变为
remapped,根本原因就在于多轮次选择的时候,会不断的发生冲突,从而重新开始新一轮的
选择。只要解决了冲突问题,选取的过程就会快很多,从而解决PG非故障成员osd中的数据
迁移问题。
请参考图3,图3为本发明实施例提供的一种PG成员选择方法的流程图。该方法可
以包括:
步骤101:计算出每个item的osd值后,遍历临时数组判断是否与临时数组中记录
的选中osd值相同;若否,进入步骤102;若是,进入步骤105。
其中,本实施例中的步骤,是针对PG成员选择过程中的item选择osd的过程,计算
出的item的osd值就可以是此item进行选择后的osd。例如,计算出item1的osd值为1,若此
osd值可以供item1选择,那么item1就可以选择osd1。
可以理解的是,计算出每个item的osd值后进行的遍历,是指PG中所有的item按照
预定顺序或随机,逐个item进行的遍历。并不是所有item都计算出osd值后共同进行遍历。
需要说明的是,临时数组中记录选中osd值可以是其他item已经选择的osd值,因
为每个item只可以选择一个不相同的osd值,所以判断osd值与选中osd值是否相同也可以
说是查看是否已经有item选取了此osd值。
步骤102:将所述osd值作为选中osd值记录到所述临时数组,并判断所述osd值是
否out;若是,进入步骤103;若否,进入步骤104。
其中,判断osd值是否out,可以通过传入此osd值对应的weight参数,根据weight
参数是否为0判断osd值是否out。weight参数为0则证明此osd值out了。
可以理解的是,osd值out可以是此osd值代表的osd发生了故障,不能供item选择。
步骤103:所述item不选择所述osd值。
其中,item不选择osd值可以将此item选择-1表示,证明没有osd供此item选择,对
于不选择osd值的表示方式可以是-1,也可以是其他值,本实施例对此不受任何限制。
步骤104:所述item选择所述osd值。
其中,item选择osd值可以是此item选择此osd值代表的osd。例如:若此item为
item1,此osd值为1,则item1选择了osd1。
步骤105:判断是否达到预设遍历次数;若是,进入步骤103;若否,进入步骤106。
可以理解的是,本步骤是针对第一轮选择以上的轮次选择中,对于选取的osd值
out的item来说,每计算出一个osd值就需要遍历临时数组,若遍历次数达到预定值,就可以
证明排除了所有临时数组中记录的选中osd值,也就是说此item计算出的osd值都是被其他
item选择过的或out的。
其中,预设遍历次数可以为设计人员预先设置可以保证排除所有临时数组中记录
的选中osd值的次数,本实施例于次数的设置不做任何限制。
步骤106:继续计算出所述item新的osd值。
其中,计算出item新的osd值可以是继续计算此item的osd值,然后再进行遍历临
时数组的步骤。
需要说明的是,计算出的item新的osd值,可以与上次计算出的osd值相同,也可以
不同。这是根据原先设置的计算方式导致的。
可以理解的是,本实施例中的步骤,是针对PG成员选择过程中的item选择osd的过
程,对于每一轮所有item的选取过程结束后,存在不选择osd值的item且此item没有遍历临
时数组达到预设遍历次数,需要进行新一轮选择。新一轮选择开始前可以删除临时数组中
的out的选中osd值,因为对于存在上层结构的PG成员选择来说,不删除临时数组中的out的
选中osd值可能无法进行新一轮的选择。若不存在上层结构,可以删除临时数组中的out的
选中osd值,也可以不删除。本实施例对此不受任何限制。
对于临时数组中的数据可以在PG成员选择完成后,清空所述临时数组中的选中
osd值。当然,也可以在在PG成员选择开始前对临时数组中的数据进行清除或不清除,本实
施例对此不受任何限制。
本实施例中,通过加入临时数组记录选中osd值,每个item选择前先遍历临时数
组,使得第一轮选择结束后就可以把所有item选择的osd值确定,后面的轮次只针对不选择
osd值的item;这样就保证了PG非故障成员osd中的数据不会发生变化,同时因为将原本选
择过程中的冲突变为与临时数组中的选择osd值相同,可以避免选择过程的冲突,从而可以
减少选择的轮次,使得选择的效率显著提高。
请参考图4、图5、图6,图4为本发明实施例提供的另一种PG成员选择方法的流程
图,图5为本发明实施例提供的另一种PG成员选择方法的osd out之前的整体示意图,图6为
本发明实施例提供的另一种PG成员选择方法的osd out之后的整体示意图。该方法可以包
括:
步骤201:计算出item的osd值。
其中,osd值可以为0、1或2等代表osd0、osd1或osd2等osd的数值。
可以理解的是,只要可以计算出item的osd值,对于item的计算方式本实施例不做
任何限制。
步骤202:遍历临时数组判断是否与临时数组中记录的选中osd值相同;若否,进入
步骤203;若是,进入步骤207。
其中,本步骤与步骤101相似,在此不再赘述。
可以理解的是,本步骤中的与选中osd值相同也就是图5和图6中的与临时数组冲
突。
步骤203:将所述osd值作为选中osd值记录到所述临时数组,并传入所述osd值对
应的weight参数。
其中,传入osd值对应的weight参数是为了接下来通过weight参数判断此osd值是
否out。
步骤204:根据所述weight参数判断所述osd值是否out;若是,进入步骤205;若否,
进入步骤206。
可以理解的是,每个osd值均对应一个weight参数,weight参数可以相同也可以不
同。若osd值对应的weighed参数为0时,此osd值代表的osd发生了故障,不能供item选择。
步骤205:所述item不选择所述osd值。
其中,若未经过步骤207便进行了本步骤,则证明存在out的osd值,且还需在所有
item进行选择过程后,在开启新一轮选择;若经过步骤207后进行了本步骤,则证明PG成员
选择已完成,不需要再进行下一轮选择。
步骤206:所述item选择所述osd值。
其中,本步骤选择过后,可以判断是否所有item都进行了选择过程;若否,则计算
下一item的osd值;若是,则查看是否存在不选择osd值的item;若存在,则对不选择osd值的
item进行下一轮选择过程;若不存在,则可以证明PG成员选择已完成。
步骤207:判断是否达到预设遍历次数;若是,进入步骤205;若否,进入步骤201。
本步骤与步骤105相似,在此不再赘述。
可以理解的是,本实施例中的步骤,是针对PG成员选择过程中的item选择osd的过
程,对于每一轮所有item的选取过程结束后,存在不选择osd值的item且此item没有遍历临
时数组达到预设遍历次数,需要进行新一轮选择。新一轮选择开始前删除临时数组中的out
的选中osd值。
需要说明的是,本实施例中的步骤可以说是图5和图6中的Choose_item的选择过
程,item与Choose_item的意思相同。图5和图6是以Easure pool 2+1规则的集群为例,共有
三个osd可供选择,对应编号为1,2,3,一个PG需要选取3个osd,分别取名为choose_item0,
choose_item1,choose_item2。
图6中的第二轮选择开始前,进行的临时数组中item信息清除重新选择,也就是本
实施例中新一轮选择开始前删除临时数组中的out的选中osd值的过程。
对于临时数组中的数据可以在PG成员选择完成后,清空所述临时数组中的选中
osd值。当然,也可以在在PG成员选择开始前对临时数组中的数据进行清除或不清除,本实
施例对此不受任何限制。
本实施例中,加入临时数组记录选中osd值,每个item选择前先遍历临时数组,使
得第一轮选择结束后就可以把所有item选择的osd值确定,后面的轮次只针对不选择osd值
的item;这样就保证了PG非故障成员osd中的数据不会发生变化,减少了数据迁移量,并且
可以减少选择的轮次,使得选择的效率显著提高。
请参考图7,图7为本发明实施例提供的一种PG成员选择装置的结构图。该装置可
以包括:
遍历模块100,用于计算出每个item的osd值后,遍历临时数组判断是否与临时数
组中记录的选中osd值相同;若否,向记录模块和第一判断模块发送选中信号;若是,向第二
判断模块发送冲突信号。
记录模块200,用于接收所述选中信号,将所述osd值作为选中osd值记录到所述临
时数组。
第一判断模块300,用于接收所述选中信号,判断所述osd值是否out;若是,向选择
模块发送不选择信号;若否向选择模块发送选择信号。
选择模块400,用于接收所述选择信号或所述不选择信号,对所述item选择所述
osd值或不选择所述osd值。
第二判断模块500,用于接收所述冲突信号,判断是否达到预设遍历次数;若是,向
选择模块发送不选择信号;若否,向计算模块发送计算信号。
计算模块600,用于接收所述计算信号,继续计算出所述item新的osd值。
可选的,还包括:
删除模块,用于当所述临时数组中存在out的选中osd值时,新一轮选择开始前删
除所述临时数组中的out的选中osd值。
可选的,还包括:
清空模块,用于当PG成员选择完成后,清空所述临时数组中的选中osd值。
本实施例中,通过遍历模块100,使每个item选择前先遍历临时数组,使得第一轮
选择结束后就可以把所有item选择的osd值确定,后面的轮次只针对不选择osd值的item;
这样就保证了PG非故障成员osd中的数据不会发生变化,并且可以减少选择的轮次,使得选
择的效率显著提高。
本发明实施例还提供一种存储池,包括:如上一实施例所述的PG成员选择装置。
其中,存储池具体可以为easure类型的存储池。
本发明实施例还提供一种分布式文件系统,包括:如上一实施例所述的存储池。
需要说明的是,本说明书中的实施例均采用递进的方式描述,每个实施例重点说
明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于
装置、存储池和分布式文件系统实施例而言,由于其与方法实施例基本相似,所以描述的比
较简单,相关之处参见方法实施例的部分说明即可。
以上对本申请所提供的PG成员选择方法、装置、存储池和分布式文件系统进行了
详细介绍,本文中应用了具体实施例对本申请的原理及实施方式进行了阐述,以上实施例
的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,
依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内
容不应理解为对本申请的限制。