本发明涉及存储集群磁盘乱序上下电测试技术领域,具体涉及一种还原放置组分布的方法、装置、设备、产品。
背景技术:
在分布式存储系统中,存储的内容按照固定大小切割,这一块固定大小的数据称为一个对象,pg(placementgroup放置组,是用于放置对象的一个载体)就是多个对象的聚合,是一个逻辑上的概念,pg和对象之间通过一致性哈希算法对应起来,一个pg对应于多个对象。而每个pg与osd(object-basedstoragedevice对象存储设备)的对应是通过数据分布算法对应起来的,一个pg对应于多个osd,osd可以简单理解为物理上的磁盘,一个osd上可以有多个pg,这样想要存储的内容就放置在了磁盘上。当发生部分osd的下电,数据分布算法会为所有受影响的pg计算其分布,然后进行重构,假设在数据重构的过程中osd重新上电了,数据分布算法会再次为其计算分布,此时计算出来的某些pg的成员就会改变,会导致一些额外的数据迁移。
技术实现要素:
针对当发生部分osd的下电,数据分布算法会为所有受影响的pg计算其分布,然后进行重构,假设在数据重构的过程中osd重新上电了,数据分布算法会再次为其计算分布,此时计算出来的某些pg的成员就会改变,会导致一些额外的数据迁移的问题,本发明提供一种还原放置组分布的方法、装置、设备、产品。
本发明的技术方案是:
第一方面,本发明技术方案提供一种还原放置组分布的方法,包括如下步骤:
对象存储设备故障掉电时,遍历分布在该故障的对象存储设备上的放置组并计算出所述放置组的分布;
计算出分布后,记录对象存储设备对应的故障信息;
在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复。
进一步的,在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复的步骤包括:
遍历所有存储池并遍历每个存储池中新上电上线的对象存储设备;
遍历在该新上电上线的对象存储设备下该存储池下故障信息保存的放置组;
取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备;
判断第n替换对象存储设备未曾离线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
进一步的,取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备的步骤包括:
取出故障信息中保存的当时替换该新上电上线的对象存储设备的第一替换对象存储设备;
检查第一替换对象存储设备是否离线过;
若否,将从故障信息中取出的第一替换对象存储设备替换成刚上线的对象存储设备;
当遍历完刚上线的对象存储设备该存储池下故障信息保存的放置组后,则删除该刚上线的对象存储设备下关于该存储池的故障信息。
进一步的,取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备的步骤还包括:
若检测到第一替换对象存储设备离线过,取出在故障信息中存储的当时替换该第一替换对象存储设备的第二替换对象存储设备,同时删除第一替换对象存储设备存储的该存储池下的该放置组下的故障信息;
检查第二替换对象存储设备是否离线过;
若否,将从故障信息中取出的第二替换对象存储设备替换成刚上线的对象存储设备;同时删除第二替换对象存储设备存储的该存储池下的该放置组下的故障信息;
若是,取出在故障信息中存储的当时替换该第二替换对象存储设备的第三替换对象存储设备,同时删除第二替换对象存储设备存储的该存储池下的该放置组下的故障信息,直至判断第n替换对象存储设备未曾离线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
进一步的,该方法还包括:
将还原的放置组的分布下发下去完成本次调整。
第二方面,本发明技术方案还提供一种还原放置组分布的装置,包括计算模块、记录模块、还原模块;
计算模块,用于对象存储设备故障掉电时,遍历分布在该故障的对象存储设备上的放置组并计算出所述放置组的分布;
记录模块,用于计算模块计算出分布后,记录对象存储设备对应的故障信息;
还原模块,用于在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复。
进一步的,还原模块包括第一遍历单元、第二遍历单元、选取单元、判断单元和还原单元;
第一遍历单元,用于遍历所有存储池并遍历每个存储池中新上电上线的对象存储设备;
第二遍历单元,用于遍历在该新上电上线的对象存储设备下该存储池下故障信息保存的放置组;
选取单元,用于取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备;
判断单元,用于判断取出的第n替换对象存储设备是否离过线;
还原单元,用于判断单元输出取出的第n替换对象存储设备未离过线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
进一步的,选取单元,用于取出故障信息中保存的当时替换该新上电上线的对象存储设备的第一替换对象存储设备;
判断单元,用于第一替换对象存储设备是否离线过;
还原单元,用于若判断单元输出第一替换对象存储设备未曾离线时,将从故障信息中取出的第一替换对象存储设备替换成刚上线的对象存储设备;
该装置还包括删除模块;
删除模块,用于当遍历完刚上线的对象存储设备该存储池下故障信息保存的放置组后,则删除该刚上线的对象存储设备下关于该存储池的故障信息。
进一步的,选取单元,还用于若判断单元判断第一替换对象存储设备离线过时,取出在故障信息中存储的当时替换该第一替换对象存储设备的第二替换对象存储设备;同时删除模块删除第一替换对象存储设备存储的该存储池下的该放置组下的故障信息;
判断单元,用于第二替换对象存储设备是否离线过;直至判断第n替换对象存储设备未曾离线时,选取单元将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
进一步的,该装置还包括下发模块,所述的下发模块,用于将还原模块还原的放置组的分布下发下去完成本次调整。
第三方面,本发明技术方案还提供一种电子设备,包括存储器和处理器,存储器和处理器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如第一方面所述的还原放置组分布的方法。
第四方面,本发明技术方案还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行如第一方面所述的还原放置组分布的方法。
从以上技术方案可以看出,本发明具有以下优点:通过该优化可以还原放置组的分布,减少对象存储设备上电后数据分布算法的计算次数,减少额外的数据迁移,从而降低资源占用,提升系统性能,增强产品竞争力。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的方法的示意性流程图。
图2是本发明一个实施例的装置的示意性框图。
图3是本发明实施例提供的设备的示意性框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。下面对本发明中出现的关键术语进行解释。
osdobject-basedstoragedevice对象存储设备;
pgplacementgroup放置组,是用于放置对象的一个载体;
如图1所示,本发明技术方案提供一种还原放置组分布的方法,包括如下步骤:
s1:对象存储设备故障掉电时,遍历分布在该故障的对象存储设备上的放置组并计算出所述放置组的分布;在这里,分布在该故障的对象存储设备上的放置组是受到该故障设备影响的放置组。受到影响的放置组指的是,该设备故障时所有当时在其上分布的放置组,由于该设备故障,这些放置组的工作受到影响。假设有两个放置组其分布分别为(磁盘1,磁盘2,磁盘3),以及(磁盘2,磁盘4,磁盘5),那么当磁盘2故障时,这两个放置组都会由于该故障受到影响;
s2:计算出分布后,记录对象存储设备对应的故障信息;
s3:在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复。
在有些实施例中,步骤s3中,在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复的步骤包括:
s31:遍历所有存储池并遍历每个存储池中新上电上线的对象存储设备;
s32:遍历在该新上电上线的对象存储设备下该存储池下故障信息保存的放置组;
s33:取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备;
s34:判断第n替换对象存储设备未曾离线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
需要说明的是,步骤s34中,取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备的步骤包括:
取出故障信息中保存的当时替换该新上电上线的对象存储设备的第一替换对象存储设备;
检查第一替换对象存储设备是否离线过;
若否,将从故障信息中取出的第一替换对象存储设备替换成刚上线的对象存储设备;
当遍历完刚上线的对象存储设备该存储池下故障信息保存的放置组后,则删除该刚上线的对象存储设备下关于该存储池的故障信息。
若检测到第一替换对象存储设备离线过,取出在故障信息中存储的当时替换该第一替换对象存储设备的第二替换对象存储设备,同时删除第一替换对象存储设备存储的该存储池下的该放置组下的故障信息;
检查第二替换对象存储设备是否离线过;
若否,将从故障信息中取出的第二替换对象存储设备替换成刚上线的对象存储设备;同时删除第二替换对象存储设备存储的该存储池下的该放置组下的故障信息;
若是,取出在故障信息中存储的当时替换该第二替换对象存储设备的第三替换对象存储设备,同时删除第二替换对象存储设备存储的该存储池下的该放置组下的故障信息,直至判断第n替换对象存储设备未曾离线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
在有些实施例中,该方法还包括:
s4:将还原的放置组的分布下发下去完成本次调整。
基于上述实施例,具体的说明如下:
(1)osd故障时,遍历其受到影响的pg,通过数据分布算法计算出分布后,记录下该pg的out信息,本发明中所提及的out信息仅是一种命名方式,其所代表的是磁盘故障时,其存储池,osd,pg,及pg分布的相关联系,要保存是磁盘故障前后受影响的pg和osd的对应关系,也可称为故障信息;out信息的记录方法可以用如下结构表示:
map<out_osd,map<pool_id,map<pg_on_out_osd,pair<whoreplacetheoutosd,whichpositionoftheoutosd>>>>;
假设存储池1中pg1.0的原始分布为:
[osd.1,osd.2,osd.3,osd.4,osd.5,osd.6],此时osd.2掉电离线,数据分布算法计算出其新成员为[osd.1,osd.7,osd.3,osd.4,osd.5,osd.6],那么按照上述out信息的记录方法其out信息为:map<2,map<1,map<1.0,pair<7,1>>>>,假设osd.7也下电离线了,osd.9替换了osd.7,那么其out信息记录如下map<7,map<1,map<1.0,pair<9,1>>>>,此时pg1.0的分布为[osd.1,osd.9,osd.3,osd.4,osd.5,osd.6]其他受影响的pg的out信息也如此;
(2)重复上述步骤记录下所有受到影响的pg的out信息;
(3)在osd乱序上电后,依据out信息进行pg分布的恢复,一般步骤如下;1○,遍历所有存储池,遍历新上电上线的osd,再遍历在该osda下该存储池下out信息保存的pg;2○,取出out信息中保存的当时替换该osda的osdb;○3,循环,进行下述检查:检查其刚取出的osdb是否离线过,即查看保存的out信息中out的osd中是否有该osdb,如果有再检查该osdb下存储的out信息中是否有当前存储池的信息且该osdb和新上线的osda是否不相等;如果上述检查均通过,说明该osdb也下电离线过,且对该存储池产生了影响,否则,结束循环;如果该osdb在该存储池中能够找到当前正在遍历的pg,则说明其对该pg也产生了影响,否则结束循环;取出在out信息中存储的当时替换该osdb的osdc,同时删除osdb存储的该存储池下的该pg下的out信息;继续循环;4○,待循环跳出后将最后从out信息中取出的osd替换成刚上线的osda;○5当遍历完该osda该存储池下out信息保存的pg后,则删除该osda下关于该存储池的out信息;○6,当新上线的osd遍历完后,检查out信息中是否存在某osd下关于所有存储池的out信息均已清除,如果存在,则将该osd的out信息清除;以步骤(1)out信息为例:pg1.0现在的状态是:pg1.0[osd.1,osd.9,osd.3,osd.4,osd.5,osd.6],out信息为:map<2,map<1,map<1.0,pair<7,1>>>>,map<7,map<1,map<1.0,pair<9,1>>>>;假设osd.2上线,遍历该osd.2在存储池1下out信息保存的pg,即pg1.0,取出out信息中保存的当时替换该osd.2的osd:osd.7,进入循环,检查通过,再次取出在out信息中存储的当时替换该osd.7的osd.9,删除部分out信息,此时out信息变成map<2,map<1,map<1.0,pair<7,1>>>>,map<7,map<1,map<,pair<,>>>>,继续循环,osd.9未离线过,在out信息中找不到,循环结束,将当前pg1.0的分布中位置为1的osd.9替换成osd.2,此时pg1.0的分布为[osd.1,osd.2,osd.3,osd.4,osd.5,osd.6];步骤○5再次删除部分out信息,out信息变成:map<2,map<,map<,pair<,>>>>,map<7,map<1,map<,pair<,>>>>;步骤○6再次删除部分out信息,out信息变为:map<7,map<1,map<,pair<,>>>>;假设此时osd.7上线,步骤1○,条件不满足直接进入步骤○6,删除部分out信息,至此out信息全部删除,pg的分布也回到原样;
如图2所示,本发明技术方案还提供一种还原放置组分布的装置,包括计算模块、记录模块、还原模块;
计算模块,用于对象存储设备故障掉电时,遍历分布在该故障的对象存储设备上的放置组并计算出所述放置组的分布;
记录模块,用于计算模块计算出分布后,记录对象存储设备对应的故障信息;
还原模块,用于在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复。
在有些实施例中,还原模块包括第一遍历单元、第二遍历单元、选取单元、判断单元和还原单元;
第一遍历单元,用于遍历所有存储池并遍历每个存储池中新上电上线的对象存储设备;
第二遍历单元,用于遍历在该新上电上线的对象存储设备下该存储池下故障信息保存的放置组;
选取单元,用于取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备;
判断单元,用于判断取出的第n替换对象存储设备是否离过线;
还原单元,用于判断单元输出取出的第n替换对象存储设备未离过线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
在有些实施例中,选取单元,用于取出故障信息中保存的当时替换该新上电上线的对象存储设备的第一替换对象存储设备;
判断单元,用于第一替换对象存储设备是否离线过;
还原单元,用于若判断单元输出第一替换对象存储设备未曾离线时,将从故障信息中取出的第一替换对象存储设备替换成刚上线的对象存储设备;
该装置还包括删除模块;
删除模块,用于当遍历完刚上线的对象存储设备该存储池下故障信息保存的放置组后,则删除该刚上线的对象存储设备下关于该存储池的故障信息。
在有些实施例中,选取单元,还用于若判断单元判断第一替换对象存储设备离线过时,取出在故障信息中存储的当时替换该第一替换对象存储设备的第二替换对象存储设备;同时删除模块删除第一替换对象存储设备存储的该存储池下的该放置组下的故障信息;
判断单元,用于第二替换对象存储设备是否离线过;直至判断第n替换对象存储设备未曾离线时,选取单元将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
在有些实施例中,该装置还包括下发模块,所述的下发模块,用于将还原模块还原的放置组的分布下发下去完成本次调整。
如图3所示,本发明实施例提供一种电子设备,该电子设备可以包括:处理器(processor)、通信接口(communicationsinterface)、存储器(memory)和总线,其中,处理器,通信接口,存储器通过总线完成相互间的通信。总线可以用于电子设备与传感器之间的信息传输。处理器可以调用存储器中的逻辑指令,以执行如下方法:s1:对象存储设备故障掉电时,遍历其受到影响的放置组并计算出放置组的分布;s2:计算出分布后,记录对象存储设备对应的故障信息;s3:在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复。
此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述方法实施例所述的方法,例如包括:s1:对象存储设备故障掉电时,遍历其受到影响的放置组并计算出放置组的分布;s2:计算出分布后,记录对象存储设备对应的故障信息;s3:在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
1.一种还原放置组分布的方法,其特征在于,包括如下步骤:
对象存储设备故障掉电时,遍历分布在该故障的对象存储设备上的放置组并计算出所述放置组的分布;
计算出分布后,记录对象存储设备对应的故障信息;
在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复。
2.根据权利要求1所述的还原放置组分布的方法,其特征在于,在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复的步骤包括:
遍历所有存储池并遍历每个存储池中新上电上线的对象存储设备;
遍历在该新上电上线的对象存储设备下该存储池下故障信息保存的放置组;
取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备;
判断第n替换对象存储设备未曾离线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
3.根据权利要求2所述的还原放置组分布的方法,其特征在于,取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备的步骤包括:
取出故障信息中保存的当时替换该新上电上线的对象存储设备的第一替换对象存储设备;
检查第一替换对象存储设备是否离线过;
若否,将从故障信息中取出的第一替换对象存储设备替换成刚上线的对象存储设备;
当遍历完刚上线的对象存储设备该存储池下故障信息保存的放置组后,则删除该刚上线的对象存储设备下关于该存储池的故障信息。
4.根据权利要求3所述的还原放置组分布的方法,其特征在于,取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备的步骤还包括:
若检测到第一替换对象存储设备离线过,取出在故障信息中存储的当时替换该第一替换对象存储设备的第二替换对象存储设备,同时删除第一替换对象存储设备存储的该存储池下的该放置组下的故障信息;
检查第二替换对象存储设备是否离线过;
若否,将从故障信息中取出的第二替换对象存储设备替换成刚上线的对象存储设备;同时删除第二替换对象存储设备存储的该存储池下的该放置组下的故障信息;
若是,取出在故障信息中存储的当时替换该第二替换对象存储设备的第三替换对象存储设备,同时删除第二替换对象存储设备存储的该存储池下的该放置组下的故障信息,直至判断第n替换对象存储设备未曾离线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
5.根据权利要求1所述的还原放置组分布的方法,其特征在于,该方法还包括:
将还原的放置组的分布下发下去完成本次调整。
6.一种还原放置组分布的装置,其特征在于,包括计算模块、记录模块、还原模块;
计算模块,用于对象存储设备故障掉电时,遍历分布在该故障的对象存储设备上的放置组并计算出所述放置组的分布;
记录模块,用于计算模块计算出分布后,记录对象存储设备对应的故障信息;
还原模块,用于在对象存储设备上电上线后,根据其对应的故障信息进行放置组分布的恢复。
7.根据权利要求6所述的还原放置组分布的装置,其特征在于,还原模块包括第一遍历单元、第二遍历单元、选取单元、判断单元和还原单元;
第一遍历单元,用于遍历所有存储池并遍历每个存储池中新上电上线的对象存储设备;
第二遍历单元,用于遍历在该新上电上线的对象存储设备下该存储池下故障信息保存的放置组;
选取单元,用于取出故障信息中保存的当时替换该新上电上线的对象存储设备的第n替换对象存储设备;
判断单元,用于判断取出的第n替换对象存储设备是否离过线;
还原单元,用于判断单元输出取出的第n替换对象存储设备未离过线时,将从故障信息中取出的第n替换对象存储设备替换成刚上线的对象存储设备,完成放置组分布的恢复。
8.根据权利要求7所述的还原放置组分布的装置,其特征在于,该装置还包括下发模块,所述的下发模块,用于将还原模块还原的放置组的分布下发下去完成本次调整。
9.一种电子设备,其特征在于,包括存储器和处理器,存储器和处理器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至5任一所述的还原放置组分布的方法。
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行如权利要求1至5任一项所述的还原放置组分布的方法。
技术总结