本发明涉及数据处理技术领域,更具体的说是涉及一种分布式文件系统中数据恢复方法及电子设备。
背景技术:
ceph为一种开源式分布式文件系统,用于提供块、文件和对象接口服务。ceph采用多副本机制来保证数据的安全性和高可用性。具体的,多副本机制以pg(placementgroup)为单位,其中,pg为数据迁移和改变的最小单位,用于维护ceph中的用户数据(object)。一个pg包括一个主pg和多个副pg,分别分布在不同的数据存储设备上(object-basedstoragedevice,osd),osd是一个独立的数据维护进程,为集群中容易发生故障的进程。
当osd发生故障时,将会导致主pg维护的用户数据和副pg维护的用户数据的副本出现不一致的现象,因此需要进行数据恢复,以保证用户数据以及用户数据的副本的一致性。在进行数据恢复时,主pg先发起peering,进入peering阶段,在peering阶段暂停所有的io处理,并通过对比主pg和所有副pg的日志,确定出发生故障的osd所丢失的用户数据;然后,主pg进入恢复阶段,基于未发生异常的pg的日志对发生异常的pg进行数据恢复。
由此可见,数据恢复工作由主pg来完成的,这将使得主pg所在osd的压力比较大,由于在恢复阶段允许进行io处理,因此主pg的数据恢复工作还会影响其io处理速度,从而降低集群的io处理性能。
技术实现要素:
有鉴于此,本发明提供一种分布式文件系统中数据恢复方法及电子设备,以克服现有技术中由于数据恢复任务和io读写任务都有主pg负责,导致数据处理速度下降的问题。
为实现上述目的,本发明提供如下技术方案:
一种分布式文件系统中数据恢复方法,所述方法包括:
获取数据恢复任务;
依据预先存储的主pg对应的文件数据的至少一个文件副本的副pg的路径信息,确定与所述主pg对应的所有副pg;
从与所述主pg对应的所有副pg中,确定具有数据恢复能力的至少一个第一副pg,以及待恢复数据的第二副pg;
从所述主pg和所述至少一个第一副pg中,确定第一目标pg;
控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复。
其中,所述控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复包括:
将所述主pg对应的第一日志文件与所述第二副pg对应的第二日志文件进行比对;
生成包含属于所述第一日志文件且与所述第二日志文件不同内容的数据恢复列表;
将所述数据恢复列表发送至所述第一目标pg,以便所述第一目标pg依据所述数据恢复列表对所述第二副pg对应的文件副本进行恢复。
其中,所述从所述主pg和所述至少一个第一副pg中,确定第一目标pg包括:
获取所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载;将所述主pg和所述至少一个第一副pg中工作负载最小的pg,确定为所述第一目标pg;
或,
获取所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载;当所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载均大于等于第一预设阈值时,将任一pg确定为所述第一目标pg;
或,
从所述主pg以及所述至少一个第一副pg中,将任一pg确定为所述第一目标pg。
其中,在所述控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复之后,还包括:
获取所述第一目标pg的工作负载;
当所述第一目标pg的工作负载大于等于第二预设阈值,且所述主pg和所述至少一个第一副pg中第三目标pg的工作负载最小且小于所述第二预设阈值时,获取所述第一目标pg对所述第二副pg对应文件副本的数据恢复进度;
将所述数据恢复进度以及所述数据恢复列表发送至所述第三目标pg,以使所述第三目标pg依据所述数据恢复进度以及所述数据恢复列表对所述第二副pg对应文件副本进行恢复。
其中,所述从与所述主pg对应的所有副pg中,确定具有数据恢复能力的至少一个第一副pg,以及待恢复数据的第二副pg包括:
将所述主pg对应的第一日志文件与每一副pg对应的日志文件进行比对;
将日志文件与所述第一日志文件相同的副pg,确定为具有数据恢复能力的第一副pg;
将日志文件与所述第一日志文件不相同的副pg,确定为待恢复数据的第二副pg。
一种电子设备,包括:
存储器,用于存储文本数据、第一数据维护程序以及用于表征所述文件数据对应的至少一个文件副本的第二数据维护程序的路径信息,所述第一数据维护程序包括主pg,所述主pg用于维护所述文本数据与每一所述文本副本相同,每一第二数据维护程序包括副pg,每一副pg用于维护一个或多个文件副本与所述文本数据相同;
处理器,用于执行所述第一数据维护程序;所述第一数据维护程序中的主pg具体用于:
获取数据恢复任务;
依据用于表征所述文件数据对应的至少一个文件副本的第二数据维护程序的路径信息,确定与所述主pg对应的所有副pg;
从与所述主pg对应的所有副pg中,确定具有数据恢复能力的至少一个第一副pg,以及待恢复数据的第二副pg;
从所述主pg和所述至少一个第一副pg中,确定第一目标pg;
控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复。
其中,每一第二数据维护程序对应一第二数据维护进程;
所述存储器还用于:存储第三数据维护程序;
所述处理器在从与所述主pg对应的所有副pg中,确定待恢复数据的第二副pg时,具体用于:
当一第二数据维护进程发生故障且预设时间内未恢复正常时,将所述第三数据程序对应的第三数据维护进程确定为发生故障的第二数据维护进程包含的副pg的承载进程;
将所述第三数据维护进程中的副pg,确定为所述第二副pg;
当一第二数据维护进程发生故障且所述预设时间内恢复正常时,将发生故障的第二数据维护进程包含的副pg,确定为所述第二副pg。
其中,所述处理器在控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复时,具体用于:
将所述主pg对应的第一日志文件与所述第二副pg对应的第二日志文件进行比对;
生成包含属于所述第一日志文件且与所述第二日志文件不同内容的数据恢复列表;
将所述数据恢复列表发送至所述第一目标pg,以便所述第一目标pg依据所述数据恢复列表对所述第二副pg对应的文件副本进行恢复。
其中,所述处理器在从所述主pg和所述至少一个第一副pg中,确定第一目标pg时,具体用于:
获取所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载;将所述主pg和所述至少一个第一副pg中工作负载最小的pg,确定为所述第一目标pg;
或,
获取所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载;当所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载均大于等于第一预设阈值时,将任一pg确定为所述第一目标pg;
或,
从所述主pg以及所述至少一个第一副pg中,将任一pg确定为所述第一目标pg。
其中,所述处理器在所述控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复之后,还包括:
获取所述第一目标pg的工作负载;
当所述第一目标pg的工作负载大于等于第二预设阈值,且所述主pg和所述至少一个第一副pg中第三目标pg的工作负载最小且小于所述第二预设阈值时,获取所述第一目标pg对所述第二副pg对应文件副本的数据恢复进度;
将所述数据恢复进度以及所述数据恢复列表发送至所述第三目标pg,以使所述第三目标pg依据所述数据恢复进度以及所述数据恢复列表对所述第二副pg对应文件副本进行恢复。
经由上述的技术方案可知,与现有技术相比,本发明提供的分布式文件系统中数据恢复方法中,主pg获取数据恢复任务;从与所述主pg对应的所有副pg中,确定具有数据恢复能力的至少一个第一副pg,以及待恢复数据的第二副pg;从主pg和所述至少一个第一副pg中,确定第一目标pg;控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复。本发明实施例中可以依靠副pg进行文件副本的数据恢复,无需都依靠主pg对需要恢复文件副本的进行恢复,从而减轻了主pg的工作量,从而不会影响主pg的io处理速度,提高了集群的ip处理能力。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的集群的结构图;
图2为本发明实施例提供的一种分布式文件系统中数据恢复方法的流程图;
图3为本发明实施例提供的工作负载均衡方法的流程图;
图4为本发明实施例提供的一种电子设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种分布式文件系统中数据恢复方法,分布式文件系统可以为ceph,分布式文件系统可以应用于集群中,如图1所示,为本发明实施例提供的集群的结构图。
集群包括云控制器11以及多个服务器12,每一服务器12包括存储器121和处理器122,存储器121中存储有文本数据和程序。文本数据可以为用户数据(object)等。为了保证数据的安全性和高可用性,可以采用多副本机制。例如文本数据a存储在一服务器12中,文本数据a的文本副本可以存储在另一服务器12中(如图1所示),这样即使文本数据a所在的服务器12发生故障,还可以使用文本数据a的文本副本所在服务器12对文本数据a进行恢复。在分布式文件系统中,通过主pg维护文本数据,通过副pg维护文件副本,以使得文本数据与文件副本中的数据相同。
同一文本数据对应一主pg和多个副pg,因此,在整个集群中可能包括多个文本数据,即多个主pg,和与每一主pg对应的多个副pg。本发明实施例中将一主pg和与其对应的多个副pg称为一组pg,由于对于每一组pg而言,数据恢复方法均相同,所以本发明实施例中以一组pg为例对数据恢复方法进行说明。
主pg和与其对应的多个副pg可以位于同一服务器12中,可以理解的是,当这一服务器12发生故障时,文本数据和所有文件副本都会丢失,为了避免这种风险,一般情况下,都将主pg和与其对应的多个副pg分布在不同的服务器12中,主pg与其维护的文件数据分布在同一服务器中,每一副pg与其维护的文件副本分布在同一服务器中。
在分布式文件系统中承载主pg和副pg的是数据维护程序,主pg和与其对应的多个副pg的分布规则可以通过crushrule来定义,本发明实施例中将承载主pg的数据维护程序称为第一数据维护程序;承载副pg的数据维护程序称为第二数据维护程序。
存储器121存储的程序可以包括第一数据维护程序和/或至少一个第二数据维护程序。
处理器122可以调用存储器121中存储的第一数据维护程序和/或所述至少一个第二数据维护程序;本发明实施例将第一数据维护程序在执行过程中对应的进程称为第一数据维护进程;第二数据维护程序在执行过程中对应的进程称为第二数据维护进程。
第一数据维护进程的运行过程包括主pg维护文本数据的过程。第二数据维护进程的运行过程包括副pg维护文本副本的过程。
可以理解的是,为了让各数据维护进程知道与其属于同一组pg的主pg和/或副pg,可以预先在主pg所在服务器的存储器121中存储用于表征文件数据对应的至少一个文件副本的第二数据维护程序的路径信息;可以在副pg所在的服务器的存储器中存储用于表征文件数据对应的除自身外的各文件副本的第二数据维护程序的路径信息,以及文件数据对应的第一数据维护程序的路径信息。
存储用于表征文件数据对应的至少一个文件副本的第二数据维护程序的路径信息可以是第二数据维护程序对应的第二数据维护进程的标识id。文件数据对应的第一数据维护程序的路径信息可以为第一数据维护程序对应的第一数据维护进程的标识id。
本发明实施例中同一集群中各服务器中的数据维护进程都有不同的标识id,例如服务器12中数据维护进程的标识id为osd1,另一服务器12中数据维护进程的标识id为osd2。因此可以将数据维护进程的标识id作为数据维护进程的路径信息。
本发明实施例提及的发生故障包括:承载副pg的第二数据维护进程发生故障和/或承载主pg的第一数据维护进程发生故障。
每一服务器中的主pg可以监控与其属于同一组的各副pg对应的第二数据维护进程是否发生故障,例如当在一定时间内没有接收到副pg的消息,则认为承载该副pg的第二数据维护进程发生故障。
当数据维护进程发生故障后,对数据进行恢复可以包括两种方式,第一种增量恢复,即对发生故障的第二数据维护进程承载的副pg对应的文件副本中缺失的数据进行补充;第二种全量恢复,此时需要重新分配一新的数据维护进程,将该新的数据维护进程替换发生故障的第二数据维护进程;并将文件数据的文件副本,拷贝到新的数据维护进程所在的服务器。
采用增量恢复的应用场景可以为:第一服务器未发生异常,第一服务器中某一第二数据维护进程发生异常,且预设时间内恢复正常,此时也可以采取增量恢复。
采用全量恢复的应用场景可以为:第一服务器中各第二数据维护进程正常,但第一服务器发生异常,导致各第二数据维护进程不能正常工作,针对该故障,采取的是全量恢复。
采用全量恢复的应用场景还可以为:第一服务器未发生异常,第一服务器中某一第二数据维护进程发生异常,且预设时间内未恢复,此时也可以采取全量恢复。
可以理解的是,若承载主pg的第一数据维护进程发生故障,且在预设时间内恢复,则主pg可以通过比对自己的日志文件和副pg对应的日志文件,确定出自身之前出现了故障,自己对自己的文本数据进行恢复。
云控制器11可以监测第一数据维护进程、各第二数据维护进程是否发生故障;当第一数据维护进程发生故障,且在预设时间内未恢复,则云控制器11可以在与主pg属于同一组pg的各副pg中选择一临时主pg,使得承载临时主pg的第二数据维护进程承担第一数据维护进程的工作。当第一数据维护进程恢复后,其承载的主pg可以继续承担主pg的工作,此时临时主pg变回副pg。
本发明实施例提供的分布式文件系统中数据恢复方法是针对主pg如何利用各副pg进行文件副本的恢复而言的,可以理解的是临时主pg也具有主pg的功能,结合上述结构对分布式文件系统中数据恢复方法进行说明,该方法的流程图如图2所示,该方法包括:
步骤s201:获取数据恢复任务。
由于预先存储有主pg对应的文件数据的至少一个文件副本的副pg的路径信息,所以若承载副pg的第二数据维护进程未发生故障,则主pg在一定时间内可以接收到副pg发送的消息,若在一定时间未接收到,则说明该第二数据维护进程发生故障,此时就需要进行数据恢复,就获得了数据恢复任务。
尽管主pg能够确定出有副pg发生故障,但是并不能确定出是哪一副pg发生故障,所以还需要进一步判断。
步骤s202:依据预先存储的主pg对应的文件数据的至少一个文件副本的副pg的路径信息,确定与所述主pg对应的所有副pg。
步骤s203:从与所述主pg对应的所有副pg中,确定具有数据恢复能力的至少一个第一副pg,以及待恢复数据的第二副pg。
发生故障的第二数据维护进程承载的副pg为待恢复数据的第二副pg;未发生故障的副pg为第一副pg。
在第二副pg所在的第二数据维护进程发生故障时刻,到主pg获取数据恢复任务时刻之间,用户可能对文件数据进行了io操作(包括删除、增加、修改等操作),即主pg对应的文件数据可能已经发生了改变。
由于未发生故障的副pg可以维护文件副本,因此文件数据和未发生故障的副pg对应的文件副本的内容是相同。由于第二副pg无法对与其对应的文件副本进行维护,所以第二副pg对应的文件副本中的数据可能与文件数据不完全相同。
假设主pg对应第一日志文件,第一日志文件包括:对文件数据进行读写操作的时间、读写操作涉及的数据量、在文件数据中读写操作的具体位置等等;每一副pg对应一日志文件,副pg对应的日志文件包括:对文件副本进行读写操作的时间、读写操作涉及的数据量、在文件副本中读写操作的具体位置等等。因此,步骤s203可以具体包括:
将所述主pg对应的第一日志文件与每一副pg对应的日志文件进行比对;将日志文件与所述第一日志文件相同的副pg,确定为具有数据恢复能力的第一副pg;将日志文件与所述第一日志文件不相同的副pg,确定为待恢复数据的第二副pg。
可以理解的是,由于主pg的第一日志文件比较大,因此主pg可以将自己对应的第一日志文件的信息与每一副pg对应的日志文件的信息进行比对;将日志文件的信息与所述第一日志文件的信息相同的副pg,确定为具有数据恢复能力的第一副pg;将日志文件的信息与所述第一日志文件的信息不相同的副pg,确定为待恢复数据的第二副pg。
日志文件的信息可以包括对数据操作时间、具体操作动作(例如删除、增加、修改等等),日志文件的信息可以不包括具体增加或修改的数据量和位置。
步骤s204:从所述主pg和所述至少一个第一副pg中,确定第一目标pg。
步骤s201至步骤s204是主pg发起peering,peering阶段主pg暂停所有的io(输入/输出,input/output)处理,在步骤s201至步骤s204这段时间内,不会对主pg对应的文件数据进行读写操作。
第一目标pg可能为主pg,也可能为至少一个第一副pg。
步骤s205:控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复。
控制第一目标pg对所述第二副pg对应的文件副本进行恢复包括两种方式,第一种为增量恢复、第二种为全量恢复。
若为增量恢复,假设第二副pg存储在第一服务器,则对第一服务器中存储的文件副本进行恢复。
若为全量恢复,假设第二副pg存储在第一服务器中,当第二副pg发生故障,则可以在第二服务器中添加一新的数据维护进程,将文件数据进行拷贝后,存储至第二服务器中,将第二服务器中一新的数据维护进程替换发生故障的第二数据维护进程。
本发明实施例提供的分布式文件系统中数据恢复方法,主pg获取数据恢复任务;从与所述主pg对应的所有副pg中,确定具有数据恢复能力的至少一个第一副pg,以及待恢复数据的第二副pg;从主pg和所述至少一个第一副pg中,确定第一目标pg;控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复。本发明实施例中可以依靠副pg进行文件副本的数据恢复,无需都依靠主pg对需要恢复文件副本的进行恢复,从而减轻了主pg的工作量,从而不会影响主pg的io处理速度,提高了集群的ip处理能力。
由于第一日志文件中记录有对文件数据的读写操作,所以第一目标pg可以依据第二副pg的日志文件与第一日志文件的区别,对第二副pg的文件副本进行恢复,具体的,所述控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复包括:
将所述主pg对应的第一日志文件与所述第二副pg对应的第二日志文件进行比对;
生成包含属于所述第一日志文件且与所述第二日志文件不同内容的数据恢复列表;
将所述数据恢复列表发送至所述第一目标pg,以便所述第一目标pg依据所述数据恢复列表对所述第二副pg对应的文件副本进行恢复。
第二副pg可以基于数据恢复列表从主pg对应的文件数据中获得自己缺失的数据,并将这些缺失的数据补入自身对应的文件副本中,从而使得自身对应的文件副本与文件数据相同。
上述分布式文件系统中数据恢复方法中“从所述主pg和所述至少一个第一副pg中,确定第一目标pg”的方式可以有多多种,本发明实施例提供但不限于以下几种。
第一种,获取所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载;将所述主pg和所述至少一个第一副pg中工作负载最小的pg,确定为所述第一目标pg。
工作负载可以是指pg所在的服务器的工作负载。
主pg可以发起获取各副pg的工作负载请求,各副pg接收到这一请求后,向主pg反馈自身的工作负载。
由于工作负载越大,数据处理速度越慢效率越低,所以从所述主pg和所述至少一个第一副pg中选择一个工作负载最小的作为第一目标pg。这样可以加快整个集群的数据处理速度和提高数据处理效率。
第二种,获取所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载;当所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载均大于等于第一预设阈值时,将任一pg确定为所述第一目标pg。
可以理解的是,若主pg和各第一副pg的工作负载都大于第一预设阈值,例如80%,显然,将恢复数据的任务交给哪一pg,其工作效率都会降低,此时,可以随机选择一pg作为第一目标pg。
第三种,从所述主pg以及所述至少一个第一副pg中,将任一pg确定为所述第一目标pg。
在实际应用中,分布式文件系统同时出现故障的第二数据维护进程的个数一般为一个,表明具有数据恢复能力的第一副pg有多个,此时可以动态的从主pg和具有数据恢复能力的多个第一副pg中选择工作负载较小的pg去执行数据恢复工作,可以更好的均衡集群的工作负载,缩短数据恢复周期,提高io读写操作的响应时间。
综上,第一目标pg在接受数据恢复任务,对第二副pg对应的文本副本进行恢复的过程中,自身的工作负载、其他第一副pg和主pg的工作负载都可能发生了变化,为了进一步提高集群的数据处理速度和效率,本发明实施例还提供了均衡工作负载的方法,具体流程如图3所示,该方法包括:
步骤s301:获取所述第一目标pg的工作负载。
当第一目标pg接受了数据恢复任务的过程中,主pg可以实时获取第一目标pg的工作负载,也可以每隔预设时间获取第一目标pg的工作负载。第一目标pg也可以实时或每隔预设时间将自己对应的工作负载发送至主pg。
步骤s302:当所述第一目标pg的工作负载大于等于第二预设阈值,且所述主pg和所述至少一个第一副pg中第三目标pg的工作负载最小且小于所述第二预设阈值时,获取所述第一目标pg对所述第二副pg对应文件副本的数据恢复进度。
数据恢复列表中可以包括读写操作对应的时刻;数据恢复进度可以是指当前对第二副pg对应的文件副本恢复的读写操作,对应数据恢复列表的哪一时刻。
例如数据恢复列表中包括:2017年3月29日15分10秒,在文件数据的第一位置增加10kb的数据;2017年3月29日20分10秒,在文件数据的第二位置增加10kb的数据;2017年3月29日30分10秒,在文件数据的第三位置增加10kb的数据。
假设当前对第二副pg对应的文件副本恢复的读写操作,对应数据恢复列表的时刻为2017年3月29日15分10秒,则第三目标pg可以从2017年3月29日20分10秒时刻对第二副pg对应的文件数据进行恢复。
假设数据恢复列表包括10条读写操作,第一目标pg已经对第二副pg对应文件副本恢复了3条读写操作,则数据恢复进度可以为30%;数据恢复进度可以为已恢复读写操作的条数/总条数。
第三目标pg可以从数据恢复列表的第四条读写操作对第二副pg对应的文件副本进行恢复。
步骤s302还可以包括:当所述第一目标pg的工作负载大于等于第二预设阈值,且所述主pg和所述至少一个第一副pg的工作负载均大于所述第二预设阈值时,确定仍旧使得第一目标pg恢复数据。
步骤s303:将所述数据恢复进度以及所述数据恢复列表发送至所述第三目标pg,以使所述第三目标pg依据所述数据恢复进度以及所述数据恢复列表对所述第二副pg对应文件副本进行恢复。
所述将所述数据恢复进度以及所述数据恢复列表发送至所述第三目标pg包括:
依据所述数据恢复进度对所述数据恢复列表进行更新,获得更新后的数据恢复列表;将更新后的数据恢复列表发送至第三目标pg。
仍以上述为例,假设数据恢复列表包括2017年3月29日15分10秒,在文件数据的第一位置增加10kb的数据;2017年3月29日20分10秒,在文件数据的第二位置增加10kb的数据;2017年3月29日30分10秒,在文件数据的第三位置增加10kb的数据;而数据恢复进度表明已经恢复了“2017年3月29日15分10秒,在文件数据的第一位置增加10kb的数据”,则更新后的数据恢复列表可以包括:2017年3月29日20分10秒,在文件数据的第二位置增加10kb的数据;2017年3月29日30分10秒,在文件数据的第三位置增加10kb的数据。
为了本领域技术人员更加理解本发明实施例提供的数据恢复方法,下面举一具体例子进行说明。
在分布式文件系统中,为了保证数据安全性,文件副本通常是在三个以上,即一文件数据对应三个文件副本,假设文件数据对应主pg;三个文件副本分别对应副pg1、副pg2、副pg3;且主pg、副pg1、副pg2、副pg3分别位于第一数据维护进程osd0、第二数据维护进程osd1、第二数据维护进程osd2、第二数据维护进程osd3。
假设第二数据维护进程osd1发生故障,导致副pg1对应的文件副本的部分数据丢失。此时主pg发起peering,主pg进入getinfo状态,处于getinfo状态的主pg向副pg1、副pg2、副pg3发送获取日志文件的信息请求,所有的副pg1、副pg2、副pg3收到获取日志文件的信息请求后,将自身的日志文件的信息反馈至主pg。主pg通过将自己的第一日志文件的信息和副pg1的日志文件的信息、副pg2的日志文件的信息、副pg3的日志文件的信息进行对比,选出待恢复数据的第二副pg和具有数据恢复能力的pg。在此例子中,具有数据恢复能力的pg为主pg,副pg2,副pg3。
然后主pg进入getlog状态,处于getlog状态的主pg向副pg1、副pg2、副pg3发送获取日志文件的请求,副pg1、副pg2、副pg3收到获取日志文件的请求后,将自身的日志文件发送给主pg。主pg通过将自己的第一日志文件和副pg1的日志文件、副pg2的日志文件、副pg3的日志文件进行对比,构造出数据恢复列表。
主pg进入getlog状态后,还可以向副pg1、副pg2、副pg3发送获取工作负载请求,副pg1、副pg2、副pg3收到获取工作负载请求后,将承载其osd所在服务器的工作负载发送给主pg。主pg根据具有数据恢复能力的主pg、副pg2、副pg3的工作负载优先选择工作负载最低的第一目标pg进行数据恢复任务,在数据恢复的过程中第一目标pg定期的向主pg上报数据恢复进度,并且上报自己所在的服务器的工作负载。
主pg可以依据数据恢复进度更新数据恢复列表。
当第一目标pg的工作负载超过第二预设阈值(例如80%)时,主pg发起重新选择数据恢复pg,根据当前具有数据恢复能力的pg的工作负载,选择一个工作负载最低的第三目标pg,第三目标pg根据更新后的数据恢复列表继续执行数据恢复工作。若当前具有数据恢复能力的pg的工作负载超过均第二预设阈值,则可以不再进行切换,第一目标pg继续执行数据恢复任务。
根据具有数据恢复能力pg的负载动态切换恢复任务,可以更好的平衡集群的工作负载,释放主pg的工作压力,主pg可以更快速的处理读写请求,同时提高数据恢复的工作能力,缩短恢复数据的执行时间。
本发明实施例公开了一种电子设备,该电子设备的结构如图4所示,该电子设备包括:
存储器41,用于存储文本数据、第一数据维护程序以及用于表征所述文件数据对应的至少一个文件副本的第二数据维护程序的路径信息,所述第一数据维护程序包括主pg,所述主pg用于维护所述文本数据与每一所述文本副本相同,每一第二数据维护程序包括副pg,每一副pg用于维护一个或多个文件副本与所述文本数据相同;
存储器41可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
处理器42,用于执行所述第一数据维护程序;所述第一数据维护程序中的主pg具体用于:
获取数据恢复任务;
依据用于表征所述文件数据对应的至少一个文件副本的第二数据维护程序的路径信息,确定与所述主pg对应的所有副pg;
从与所述主pg对应的所有副pg中,确定具有数据恢复能力的至少一个第一副pg,以及待恢复数据的第二副pg;
从所述主pg和所述至少一个第一副pg中,确定第一目标pg;
控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复。
处理器42可能是一个中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
电子设备还可以包括通信总线43,其中,存储器41、处理器42均通过通信总线43完成相互间的通信。
可选的,每一第二数据维护程序对应一第二数据维护进程;
所述存储器还用于:存储第三数据维护程序;
所述处理器在从与所述主pg对应的所有副pg中,确定待恢复数据的第二副pg时,具体用于:
当一第二数据维护进程发生故障且预设时间内未恢复正常时,将所述第三数据程序对应的第三数据维护进程确定为发生故障的第二数据维护进程包含的副pg的承载进程;
将所述第三数据维护进程中的副pg,确定为所述第二副pg;
当一第二数据维护进程发生故障且所述预设时间内恢复正常时,将发生故障的第二数据维护进程包含的副pg,确定为所述第二副pg。
可选的,处理器在控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复时,具体用于:
将所述主pg对应的第一日志文件与所述第二副pg对应的第二日志文件进行比对;
生成包含属于所述第一日志文件且与所述第二日志文件不同内容的数据恢复列表;
将所述数据恢复列表发送至所述第一目标pg,以便所述第一目标pg依据所述数据恢复列表对所述第二副pg对应的文件副本进行恢复。
可选的,所述处理器在从所述主pg和所述至少一个第一副pg中,确定第一目标pg时,具体用于:
获取所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载;将所述主pg和所述至少一个第一副pg中工作负载最小的pg,确定为所述第一目标pg;
或,
获取所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载;当所述主pg的工作负载以及所述至少一个第一副pg相应的工作负载均大于等于第一预设阈值时,将任一pg确定为所述第一目标pg;
或,
从所述主pg以及所述至少一个第一副pg中,将任一pg确定为所述第一目标pg。
可选的,所述处理器在所述控制所述第一目标pg对所述第二副pg对应的文件副本进行恢复之后,还包括:
获取所述第一目标pg的工作负载;
当所述第一目标pg的工作负载大于等于第二预设阈值,且所述主pg和所述至少一个第一副pg中第三目标pg的工作负载最小且小于所述第二预设阈值时,获取所述第一目标pg对所述第二副pg对应文件副本的数据恢复进度;
将所述数据恢复进度以及所述数据恢复列表发送至所述第三目标pg,以使所述第三目标pg依据所述数据恢复进度以及所述数据恢复列表对所述第二副pg对应文件副本进行恢复。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。