1.本申请实施例涉及分布式存储领域,涉及但不限于一种数据存储方法、装置、设备及计算机可读存储介质。
背景技术:2.随着大规模分布式存储系统(pb级的数据和成百上千台存储设备)的出现,便需要平衡的分布数据和负载,以提高资源利用率,并最大化系统的性能,由此,一种基于哈希的数据分布算法(controlled replication under scalable hashing,ceph crush)应运而生,一方面,ceph crush能够有效映射数据至存储设备上,而并不需要中心设备;另一方面,ceph crush还能够处理存储设备的添加和移除,并最小化由于存储设备的添加和移除而导致的数据迁移。
3.但在实际使用中,当因故障被移除的存储设备恢复正常状态时,即便当前放置组(placement group,pg)中的所有存储设备均处于正常状态,ceph crush仍会将该恢复正常的存储设备再次加入至原先的pg中,并移除该存储设备故障期间的替补存储设备,从而改变pg中的映射关系,并进行副本数据恢复,因此占用系统内存、增加系统开销,消耗系统资源。
技术实现要素:4.有鉴于此,本申请实施例提供一种数据存储方法、装置、设备及计算机可读存储介质。
5.本申请实施例的技术方案是这样实现的:
6.本申请实施例提供一种数据存储方法,所述方法包括:
7.当确定当前的存储设备集合中存在第一故障设备时,从所述存储设备集合中移除所述第一故障设备;
8.确定替补存储设备,并将所述替补存储设备加入所述存储设备集合,以利用所述替补存储设备存储数据,并生成当前存储设备集合;
9.当确定所述第一故障设备可用时,获取所述当前存储设备集合的状态信息;
10.当所述状态信息表征所述当前存储设备集合中的存储设备均可用时,保持所述当前存储设备集合不变。
11.本申请实施例提供一种数据存储装置,所述装置包括:
12.移除模块,用于当确定当前的存储设备集合中存在第一故障设备时,从所述存储设备集合中移除所述第一故障设备;
13.确定模块,用于确定替补存储设备,并将所述替补存储设备加入所述存储设备集合,以利用所述替补存储设备存储数据,并生成当前存储设备集合;
14.获取模块,用于当确定所述第一故障设备可用时,获取所述当前存储设备集合的状态信息;
15.保持模块,用于当所述状态信息表征所述当前存储设备集合中的存储设备均可用时,保持所述当前存储设备集合不变。
16.本申请实施例提供一种数据存储设备,所述数据存储设备至少还包括:
17.处理器;以及
18.存储器,用于存储可在所述处理器上运行的计算机程序;
19.其中,所述计算机程序被处理器执行时实现上述数据存储方法的步骤。
20.本申请实施例提供一种计算机可读存储介质,所述计算机存储介质中存储有计算机可执行指令,该计算机可执行指令配置为执行上述数据存储方法的步骤。
21.本申请实施例提供一种数据存储方法、装置、设备及计算机可读存储介质,所述数据存储方法包括:当确定出存储设备集合中存在第一故障设备时,从存储设备集合中移除第一故障设备;接着,确定替补存储设备,并将替补存储设备加入存储设备集合中,以利用替补存储设备存储数据,此时生成当前存储设备集合;进一步地,当确定出第一故障设备可用时,获取当前存储设备集合的状态信息,如果状态信息表征当前存储设备集合的存储设备均可用时,则保持当前存储设备集合不变,如此,在当前存储设备集合的存储设备均可用时,即便第一故障设备恢复正常工作状态,也不会将恢复正常工作状态的第一故障设备替换至当前存储设备集合中,而是继续保持当前存储设备集合,避免了因存储设备集合中存储设备的变动而引起的副本数据恢复操作,从而降低系统开销、节约系统资源,并进一步提升系统存取效率。
附图说明
22.在附图(其不一定是按比例绘制的)中,相似的附图标记可在不同的视图中描述相似的部件。附图以示例而非限制的方式大体示出了本文中所讨论的各个实施例。
23.图1为本申请实施例提供的数据存储方法的一种实现流程示意图;
24.图2为本申请实施例提供的数据存储方法的另一种实现流程示意图;
25.图3为本申请实施例提供的确定替补存储设备的一种实现流程示意图;
26.图4为本申请实施例提供的文件存储方法的一种实现流程示意图;
27.图5为本申请实施例提供的crush算法实现示意图;
28.图6为本申请实施例提供的cluster map树状结构示意图;
29.图7为本申请实施例提供的数据存储方法的再一种实现流程示意图;
30.图8为本申请实施例提供的数据存储装置的组成结构示意图;
31.图9为本申请实施例提供的数据存储设备的组成结构示意图。
具体实施方式
32.为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
33.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
34.如果申请文件中出现“第一\第二\第三”的类似描述则增加以下的说明,在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
35.除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
36.基于相关技术所存在的问题,本申请实施例提供一种数据存储方法,应用于数据存储设备。本申请实施例提供的方法可以通过计算机程序来实现,该计算机程序在执行的时候,完成本申请实施例提供的数据存储方法中各个步骤。在一些实施例中,该计算机程序可以在数据存储设备中的处理器执行。图1为本申请实施例提供的数据存储方法的一种实现流程示意图,如图1所示,所述方法包括:
37.步骤s101,当确定当前的存储设备集合中存在第一故障设备时,从所述存储设备集合中移除所述第一故障设备。
38.这里,存储设备包括机械硬盘、固态硬盘以及混合硬盘等。第一故障设备是指因存在故障而无法正常工作的存储设备,例如,第一故障设备可以指在工作时的实际速度低于预期速度的固态硬盘,主要表现为读取过程中会出现突发的卡顿出现,读取速度突然降低;第一故障设备还可以指发生掉盘的固态硬盘,主要表现为操作系统在启动电脑时不识别固态硬盘、找不到固态硬盘盘符,或者在正常使用过程中突然卡住停止响应或者出现蓝屏。
39.在本申请实施例中,存储设备集合中至少包括两个存储设备,如果在预设时长内,读取到某一存储设备中数据的次数小于次数阈值,或者一直无法读取该存储设备中的数据,则认为该存储设备存在故障,并将该存储设备确定为第一故障设备,也即,表明当前的存储设备集合中存在第一故障设备,那么,将该第一故障设备从存储设备集合中移除,使得存储设备集合中不包含该第一故障设备。
40.步骤s102,确定替补存储设备,并将所述替补存储设备加入所述存储设备集合,生成当前存储设备集合。
41.这里,利用所述替补存储设备存储数据,其中,替补存储设备是指原先不在该存储设备集合中的可用存储设备。
42.在本申请实施例中,可以先获取存储设备集合之外的可用存储设备集合,并基于可用存储设备集合中各个可用存储设备的属性信息和负载信息,从可用存储设备集合中确定出替补存储设备;接着,将该替补存储设备加入存储设备集合中,从而生成当前存储设备集合。此时,在当前存储设备集合中,包含替补存储设备,而不包含第一故障设备。
43.将替补存储设备加入到存储设备集合中之后,为了使得替补存储设备中具有与其他存储设备一致的数据,在一些实施例中,还会从当前存储设备集合中确定出替补存储设备之外的其他存储设备,并获得该存储设备的当前数据,最后基于该存储设备的当前数据,确定替补存储设备所需的副本数据,最后将该副本数据写入替补存储设备中,从而完成数据迁移过程,保证当前存储设备集合的可靠性。
44.步骤s103,当确定所述第一故障设备可用时,获取所述当前存储设备集合的状态信息。
45.在一些实施例中,在步骤s101确定出存储设备集合中存在第一故障设备,并将第一故障设备移除之后,可以按照预设的时间间隔检测第一故障设备是否恢复可用,当检测到第一故障设备恢复可用时,执行步骤s103。当检测到第一故障设备不可用时,继续利用当前存储设备集合中的各个存储设备进行数据存储。
46.第一故障设备可用是指监测到第一故障设备能够正常工作,也即,第一故障设备消除了故障,例如,可以指第一故障设备能够被操作系统识别,并且工作时的实际速率可达到预期速率。
47.进一步地,获取当前存储设备集合的状态信息,其中,该状态信息包括当前存储设备集合中各个存储设备的状态信息,且各个存储设备的状态信息能够表征对应存储设备是否处于正常工作状态。
48.步骤s104,当所述状态信息表征所述当前存储设备集合中的存储设备均可用时,保持所述当前存储设备集合不变。
49.这里,当前存储设备集合中的存储设备均可用是指当前存储设备集合中的每个存储设备均处于正常工作状态,例如可以是,当前存储设备集合中的每个存储设备均能够被操作系统识别,并且工作时的实际速率可达到预期速率。在这种情况下,则保持当前存储设备集合不变,也即,并不会将恢复正常工作状态的第一故障设备替换至当前存储设备集合中。以通过ceph crush计算对象存储设备(object storage deceive,osd)集合为例,即便第一故障设备由故障状态恢复至正常工作状态,此时也不会基于crush算法再次计算osd集合。
50.在一些实施例中,当状态信息表征当前存储设备集合中的存储设备存在故障设备时,可以将该故障设备移除,将恢复可用的第一故障设备重新加入至存储设备集合。
51.本申请实施例提供一种数据存储方法,当确定出存储设备集合中存在第一故障设备时,从存储设备集合中移除第一故障设备;接着,确定替补存储设备,并将替补存储设备加入存储设备集合中,以利用替补存储设备存储数据,此时生成当前存储设备集合;进一步地,当确定出第一故障设备可用时,获取当前存储设备集合的状态信息,如果状态信息表征当前存储设备集合的存储设备均可用时,则保持当前存储设备集合不变,如此,在当前存储设备集合的存储设备均可用时,即便第一故障设备恢复正常工作状态,也不会将恢复正常工作状态的第一故障设备替换至当前存储设备集合中,而是继续保持当前存储设备集合,避免了因存储设备集合中存储设备的变动而引起的副本数据恢复操作,从而降低系统开销、节约系统资源,并进一步提升系统存取效率。
52.基于前述的实施例,本申请实施例再提供一种数据存储方法,应用于数据存储装置,图2为本申请实施例提供的数据存储方法的另一种实现流程示意图,如图2所示,该方法包括:
53.步骤s201,接收数据读取指令。
54.这里,读取指令可以为基于c语言、c++语言、面向对象编程语言(java)等等,该读取指令用于读取存储设备集合中各个存储设备的数据,数据存储装置能够实时接收到该读取指令。
55.步骤s202,响应于所述数据读取指令,从当前的存储设备集合中各个存储设备中读取数据。
56.在本申请实施例中,先确定出存储设备集合中的各个存储设备,然后分别依次读取各个存储设备中的数据。其中,可以是基于存储设备编号信息依次读取各个存储设备中的数据,也可以是基于存储设备的位置信息依次读取各个存储设备中的数据,本申请实施例并不对该读取操作做限定。
57.步骤s203,确定当前的存储设备集合中是否存在读取失败的存储设备。
58.步骤s203在实现时可以是判断在预设时长内是否存在读取失败的存储设备,当预设时长内存在读取失败的存储设备时,进入步骤s204;当预设时长内不存在读取失败的存储设备时,返回步骤s201。
59.这里,预设时长可以为5秒、10秒等。步骤s203可以通过以下两种方式实现:
60.第一种实现方式:如果在预设时长内一直不能读取到某一存储设备中的数据时,认为将该存储设备确定为读取失败的存储设备。
61.第二种实现方式:如果在预设时长内能够成功读取到某一存储设备中数据的次数小于次数阈值时,也将该存储设备确定为读取失败的存储设备。举例来说,10秒对应的次数阈值5,但实际在10秒内成功读取a存储设备的次数为2,由于2小于5,则将a存储设备确定为读取失败的存储设备。
62.步骤s204,确定该读取失败的存储设备为第一故障设备,并将所述第一故障设备从存储设备集合中移除。
63.在本申请实施例中,将步骤s203中确定的读取失败的存储设备确定为第一故障设备,存储设备集合中至少包括两个存储设备,接着,将该第一故障设备从存储设备集合中移除,使得存储设备中不包含该第一故障设备。
64.步骤s205,确定并将所述替补存储设备加入所述存储设备集合,生成当前存储设备集合。
65.在实现步骤s205时,如图3所示,可以通过以下步骤s11至步骤s13来实现:
66.步骤s11,获取所述存储设备集合之外的可用存储设备集合。
67.这里,系统中存储设备的个数多于存储设备集合中的存储设备的个数,可以先确定出系统中可用存储设备集合,然后求取可用存储集合与存储设备集合的差,将所获得的差集确定为存储设备集合之外的可用存储设备集合。
68.步骤s12,获取所述可用存储设备集合中各个可用存储设备的属性信息和负载信息。
69.这里,属性信息包括存储设备的编号、存储设备的类型等,负载信息包括存储设备的内存大小、占用内存以及可用内存等信息。
70.步骤s13,基于所述各个可用存储设备的属性信息和负载信息,从所述可用存储设备集合中确定所述替补存储设备。
71.举例来说,当前需求为可用内存为4g的固态硬盘,则从可用存储设备集合中确定出属性信息为固态硬盘且可用内存不小于4g的存储设备,如果满足该条件的存储设备为多个,则可以从中任选一个作为替补存储设备;也可将可用内存最大的一个作为替补存储设备。
72.步骤s206,从所述当前存储设备集合中确定所述替补存储设备之外的第四存储设备;
73.这里,当前存储设备集合中至少包括两个存储设备,其中一个为替补存储设备,基于此,从当前存储设备集合中选取替补存储设备之外的存储设备,并将该存储设备确定为第四存储设备。
74.步骤s207,获取所述第四存储设备的当前存储数据;
75.这里,可以通过读取指令获取第四存储设备的当前存储数据。
76.步骤s208,基于所述第四存储设备的当前存储数据,确定所述替补存储设备中所需的第二副本恢复数据;
77.这里,可以直接将第四存储设备的当前存储数据确定为第二副本恢复数据;也可以先获取替补存储设备的当前存储数据,比对替补存储设备的当前存储数据和第四存储设备的当前存储数据,获得差异数据,并将该差异数据确定为第二副本恢复数据。
78.步骤s209,将所述第二副本恢复数据写入所述替补存储设备。
79.如果第二副本数据为第四存储设备的当前存储数据,则将第二副本数据写入替补存储设备,并覆盖替补存储设备中原先的数据;如果第二副本数据为差异数据,则将该差异数据写入替补存储设备,同时保存替补存储设备中原先的数据,从而使得替补存储设备中存储数据与第四存储设备的当前存储数据保持一致。
80.步骤s210,检测第一故障设备是否可用。
81.如果第一故障设备可用,则进入步骤s211;如果第一故障设备仍不可用,返回步骤s201。
82.步骤s211,获取所述当前存储设备集合的状态信息。
83.其中,该状态信息包括当前存储设备集合中各个存储设备的状态信息,且各个存储设备的状态信息能够表征对应存储设备是否处于正常工作状态。
84.步骤s212,判断当前存储设备集合中是否存在第二故障设备。
85.这里,当基于各个存储设备的状态信息,确定当前存储设备集合中的各个存储设备均为可用,也即,当前存储设备集合中不存在第二故障设备,则执行步骤s213;当基于各个存储设备的状态信息,确定当前存储设备集合中存在第二故障设备时,则执行步骤s214。
86.步骤s213,保持当前存储设备集合不变。
87.步骤s214,移除第二故障设备,将第一故障设备重新加入存储设备集合,生成新的存储设备集合。
88.此时,该第二故障设备并不处于正常工作状态,也即,第二故障存储设备不能够被操作系统识别,或者第二故障设备工作时的实际速率低于预期速率。进一步地,将该第二故障设备从存储设备集合中移除,使得存储设备中不包含该第二故障设备。
89.以通过ceph crush计算osd集合为例,在第一故障设备恢复至可用且当前pg中存在故障osd时,数据存储设备会调用crush算法,并计算得到此时存储设备集合包含第一故障设备,接着,移除故障osd,并将恢复至可用的第一故障设备重新加入当前存储设备集合,以重新利用该第一故障设备存储数据,由于当前存储设备集合中的存储设备发生了变化,将此时生成的存储设备集合称为新的存储设备集合。
90.步骤s215,确定所述新的存储设备集合中的第三存储设备。
91.这里,第三存储设备不同于所述第一故障设备,新的存储设备集合中至少包括两个存储设备,其中一个为恢复至可用的第一故障设备,基于此,从新的存储设备集合中选取
第一故障设备之外的存储设备,并将该存储设备确定为第三存储设备。
92.步骤s216,获取所述第三存储设备的当前存储数据。
93.这里,可以通过读取指令获取第三存储设备的当前存储数据。
94.步骤s217,基于所述第三存储设备的当前存储数据,确定所述第一故障设备中所需的第一副本恢复数据。
95.在实现步骤s217时,可参考步骤s208的实现方法,此处不再赘述。
96.步骤s218,将所述第一副本恢复数据写入所述第一故障设备。
97.在实现步骤s218时,可参考步骤s209的实现方法,此处不再赘述。
98.本申请实施例中,通过步骤s201至步骤s218,先确定出存储设备集合中存在第一故障设备,基于此,从存储设备集合中移除第一故障设备;接着,确定存储设备集合之外可用的替补存储设备,并将替补存储设备加入存储设备集合中,以利用替补存储设备存储数据,此时生成当前存储设备集合,并完成替补存储设备的数据迁移;进一步地,当确定出第一故障设备可用时,获取当前存储设备集合的状态信息,一方面,如果状态信息表征当前存储设备集合中不存在第二故障设备时,则保持当前存储设备集合不变,避免了因存储设备集合中存储设备的变动而引起的副本数据恢复操作,从而降低系统开销、节约系统资源,并进一步提升系统存取效率;另一方面,如果状态信息表征当前存储设备集合中存在第二故障设备时,则从当前存储设备集合中移除第二故障设备,并将恢复正常工作状态的第一故障设备重新加入当前存储设备集合,生成新的存储设备集合,并完成第一故障设备的数据迁移,如此,保证存储设备集合中的各个存储设备均处于正常工作状态,从而确保数据能够正常、高效地存储于存储设备集合中的各个存储设备中。
99.在一些实施例中,在实现步骤s104或者步骤s218之后,如图4所述,还可以执行以下步骤s21至步骤s23:
100.步骤s21,获取待存储文件,并基于所述待存储文件确定至少一个待存储数据。
101.这里,待存储文件可以为文档、视频、音频等文件。
102.在本申请实施例中,可以设定内存阈值,例如该内存阈值可以为2m、4m等。进一步地,获取待存储文件的内存大小,如果该待存储文件的内存大小不超过内存阈值,则将该待存储文件确定为一个待存储数据;如果该待存储文件的内存大小大于内存阈值,则以内存阈值为单位对待存储文件进行切分,从而获得不少于两个待存储数据。
103.步骤s22,确定各个待存储数据对应的存储设备集合。
104.这里,可以基于哈希算法确定出各个待存储数据的设备集合。
105.步骤s23,将所述各个待存储数据存储至对应的存储设备集合的各个存储设备中。
106.举例来说,待存储数据1对应的存储设备集合为[a,b,c],则将待存储数据1分别存储至存储设备a、存储设备b以及存储设备c中。类似的,其余待存储数据的存储方式与上述待存储数据1的存储方式相同,此处就不在赘述。
[0107]
在本申请实施例中,通过步骤s21至步骤s23,先将待存储文件切分为至少一个待存储数据,然后确定各个待存储数据对应的存储设备集合,最后将各个待存储数据分别存储至对应的存储设备集合中的各个存储设备中,从而实现数据的分布式主备存储,提升系统的可靠性以及容灾能力。
[0108]
基于前述的实施例,本申请实施例再提供一种数据存储方法,应用于数据存储设
备,ceph crush主要特点是以对象标识符(object_id)、当前集群拓扑结构(cluster_map)、osd权重(weight)和相应的副本规则(crush_rule)作为算法输入,便可以通过计算得到对象所在的磁盘位置,在此过程中无需查表,从而达到去中心化的目的。
[0109]
如图5所示,对象(object)通过输入相应的object_id能够计算出所在的pg,然后通过crush算法,便能够得到此该object应该存放的osd集合。在图5中,pg1所对应的osd集合为[1,6],此时,osd1和osd6均处于正常工作状态,该工作工作状态可以为up、acting状态。假设经过一段时间之后,osd6出现了硬盘接口松动的故障,导致数据存储设备无法读取osd6中的信息,在预设的5秒或者10秒之后,数据存储设备的监测设备便会将osd6的状态标记为out状态。进一步地,pg1中缺少一个ods,使得pc1中的object处于缺少对象数量的状态,也即,object处于undersize状态。
[0110]
与此同时,osd6的状态变化也引起cluster_map发生变化,那么,数据存储设备的监测设备便会调用crush算法,以crush算法的计算结果为ods10为例,数据存储设备便会将ods10加入到pg1中,从而使得pg1对应的osd集合改变为[1,10]。在ods10加入pg1之后,osd10开始执行object recovery或者backfill操作,使得osd1会将osd10缺少的objects主动推送给osd10,帮助osd10完成数据恢复。此后,集群恢复正常状态,用户能够向集群中写入了大量数据。
[0111]
如果osd6硬盘接口松动的异常被认为重新整理好,那么数据存储设备的监测设备便能够监测到了osd6恢复正常连接,便将osd6在cluster_map中的状态标记为in状态。由于cluster_map发生变化,数据存储设备的监测设备会再次调用crush算法,基于最新版本crush的算法规则,由于cluster_map重新回到原来osd6未发生故障的状态,那么根据算法,会将pg1对应的osd集合重新修正为osd[1,6],将处于正常状态且数据无丢失的osd10剔除出pg1。但是,由于osd6处于out状态时pg1写入了大量的数据,那么,在osd6重新加入到pg1后,需要首先执行recovery或者backfill操作,这无疑会消耗系统的资源,从而影响用户的正常读写,增加系统开销,降低系统可靠性。
[0112]
现有crush算法只是将cluster_map作为主要参数,如图6所示,cluster_map是一个树状结构,叶子节点为osd,树的其他节点统称为bucket。只要这棵树和weight没有发生变化,crush计算出的映射关系就是固定的。
[0113]
基于上述问题,本申请实施例在算法的输入参数中添加一个变量pg_info,该pg_info变量能够用以描述当前pg的状态,crush算法会参考该pg_info变量的值来决定是否重置pg与osd的映射关系。如图7所示,该方法可通过以下步骤s701至步骤s706来实现:
[0114]
步骤s701,启动确定最新osd集合。
[0115]
步骤s702,获取变量pg_info;
[0116]
步骤s703,判断pg_info是否表征pg的状态为正常状态。
[0117]
这里,如果变量pg_info表征pg的状态为正常状态,则执行步骤s704;否则执行步骤705。
[0118]
步骤s704,将pg的当前osd集合确定为最新的osd集合。
[0119]
步骤s705,调用crush算法,获得最新的osd集合。
[0120]
步骤s706,结束确定最新osd集合流程。
[0121]
通过步骤s701至步骤s706,先通过变量pg_info确定pg的状态,如果当前pg处于正
常状态,则将当前的osd集合确定为最新osd集合,并不重新利用crush算法计算osd集合;而当pg没有处于正常状态时,则调用crush算法计算osd集合,并将计算出的osd集合作为最新的osd集合,一方面,能够在pg处于正常状态时不进行osd集合的重新计算,从而节约系统的资源,确保用户的正常读写,降低系统开销,增强系统可靠性。另一方面,当pg没有处于正常状态时,则及时更新pg对应的osd集合,使得pg处于正常状态,以确保对象能够正常进行分布式存储。
[0122]
基于前述的实施例,本申请实施例提供一种数据存储装置,该装置包括的各模块、以及各模块包括的各单元,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(cpu,central processing unit)、微处理器(mpu,microprocessor unit)、数字信号处理器(dsp,digital signal processing)或现场可编程门阵列(fpga,field programmable gate array)等。
[0123]
本申请实施例再提供一种数据存储装置,图8为本申请实施例提供的数据存储装置的组成结构示意图,如图8所示,所述数据存储装置800包括:
[0124]
移除模块801,用于当确定当前的存储设备集合中存在第一故障设备时,从所述存储设备集合中移除所述第一故障设备;
[0125]
确定模块802,用于确定替补存储设备,并将所述替补存储设备加入所述存储设备集合,以利用所述替补存储设备存储数据,并生成当前存储设备集合;
[0126]
获取模块803,用于当确定所述第一故障设备可用时,获取所述当前存储设备集合的状态信息;
[0127]
保持模块804,用于当所述状态信息表征所述当前存储设备集合中的存储设备均可用时,保持所述当前存储设备集合不变。
[0128]
在一些实施例中,所述数据存储装置800还包括:
[0129]
加入模块,用于将所述第一故障设备重新加入所述当前存储设备集合,以重新利用所述第一故障设备存储数据,并生成新的存储设备集合;
[0130]
所述移除模块801,还用于当所述状态信息表征所述当前存储设备集合中的存储设备存在第二故障设备时,从所述当前存储设备集合中移除所述第二故障设备。
[0131]
在一些实施例中,所述数据存储装置800还包括:
[0132]
写入模块,用于将所述第一副本恢复数据写入所述第一故障设备;
[0133]
所述确定模块802,还用于确定所述新的存储设备集合中的第三存储设备,所述第三存储设备不同于所述第一故障设备;
[0134]
所述获取模块803,还用于获取所述第三存储设备的当前存储数据;
[0135]
所述确定模块802,还用于基于所述第三存储设备的当前存储数据,确定所述第一故障设备中所需的第一副本恢复数据;
[0136]
在一些实施例中,所述数据存储装置800还包括:
[0137]
接收模块,用于接收数据读取指令;
[0138]
响应模块,用于响应于所述数据读取指令,从所述存储设备集合中各个存储设备中读取数据;
[0139]
所述确定模块802,还用于当预设时长内存在读取失败的存储设备时,将所述存储设备确定为第一故障设备。
[0140]
在一些实施例中,所述数据存储装置800还包括:
[0141]
存储模块,用于将所述各个待存储数据存储至对应的存储设备集合的各个存储设备中;
[0142]
所述获取模块803,还用于获取待存储文件,并基于所述待存储文件确定至少一个待存储数据;
[0143]
所述确定模块802,还用于确定各个待存储数据对应的存储设备集合;
[0144]
在一些实施例中,所述确定模块802包括:
[0145]
第一获取单元,用于获取所述存储设备集合之外的可用存储设备集合;
[0146]
第二获取单元,用于获取所述可用存储设备集合中各个可用存储设备的属性信息和负载信息;
[0147]
第一确定单元,用于基于所述各个可用存储设备的属性信息和负载信息,从所述可用存储设备集合中确定所述替补存储设备。
[0148]
在一些实施例中,所述确定模块802还包括:
[0149]
第二确定单元,用于从所述当前存储设备集合中确定所述替补存储设备之外的第四存储设备;
[0150]
第三获取单元,用于获取所述第四存储设备的当前存储数据;
[0151]
第三确定单元,用于基于所述第四存储设备的当前存储数据,确定所述替补存储设备中所需的第二副本恢复数据;
[0152]
写入单元,用于将所述第二副本恢复数据写入所述替补存储设备。
[0153]
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的数据存储方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read only memory)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
[0154]
相应地,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现上述实施例中提供的数据存储方法中的步骤。
[0155]
本申请实施例提供一种数据存储设备,图9为本申请实施例提供的数据存储设备的组成结构示意图,如图9所示,所述数据存储设备900包括:一个处理器901、至少一个通信总线902、用户接口903、至少一个外部通信接口904和存储器905。其中,通信总线902配置为实现这些组件之间的连接通信。其中,用户接口903可以包括显示屏,外部通信接口904可以包括标准的有线接口和无线接口。其中,所述处理器901配置为执行存储器中存储的数据存储方法的程序,以实现以上述实施例提供的数据存储方法中的步骤。
[0156]
以上数据存储设备和存储介质实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请电子设备和存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
[0157]
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
[0158]
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
[0159]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0160]
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
[0161]
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以基于实际的需要选择其中的部分或全部单元来实现本申请实施例方案的目的。
[0162]
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0163]
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(rom,read only memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0164]
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台ac执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、磁碟或者光盘等各种可以存储程序代码的介质。
[0165]
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在
本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。