本技术涉及云计算,特别是指一种数据修复方法、装置、设备、存储介质及程序产品。
背景技术:
1、目前主流的分布式存储系统(distributed storage system,dss)架构如图1所示,包括:接口层、文件存储语义转换层、块存储语义层和存储底座层;其中,接口层用于对外提供标准的协议接口,如网络块设备(network block device,nbd)、互联网小型计算机系统接口(internet small computer system interface,iscsi)、网络文件系统(networkfile system,nfs)和用户空间文件系统(filesystemin userspace,fuse)等;文件存储语义转换层用于将文件系统的语义转换成块存储语义,即将对文件的操作转换成对数据块的操作;块存储语义层用于对数据块的操作;存储底座层用于负责数据持久化,该层包含两个重要组件:元数据集群和数据集群,分别负责元数据和数据的持久化。
2、目前已知的公开的数据节点的副本组织方式是复制集(copysets),概念类似于ceph分布式文件系统中的放置组(placement groups,pg),基于这种副本组织方式的数据节点往往结合预写日志(write ahead log,wal)或一致性协议(如paxos或raft,本质也是写wal)来保证多副本之间的一致性。
3、采用上述副本组织方式,如图2所示,副本分为主副本和从副本,主副本上的数据是最新的,也只有主副本能够对外提供服务。如果部分副本丢失,此时有两种处理方案:(1)数据节点内部计算出符合要求的新副本,并完成新副本上的数据重构;(2)数据节点通知元数据集群,由元数据集群计算出合适的新副本,通知数据节点完成副本补齐。新副本只需要根据原副本的wal即可恢复数据。然而,上述方案中的数据恢复需要依靠副本的wal,而wal的引入势必会造成数据节点服务设计的复杂度大幅提升。
技术实现思路
1、本技术实施例提供一种数据修复方法、装置、设备、存储介质及程序产品,解决了现有的数据修复方式导致数据服务设计的复杂度大的问题。
2、第一方面,为达到上述目的,本技术的实施例提供一种数据修复方法,应用于分布式存储系统的元数据集群的第一主节点设备,所述方法包括:
3、检测所述分布式存储系统的数据集群中存在的异常数据块;
4、在所述异常数据块的封装状态为解封状态的情况下,向运行在第一数据节点设备的第一数据服务发送封装请求,所述第一数据服务承载所述异常数据块的主副本;
5、在所述异常数据块的封装状态为密封状态的情况下,为所述异常数据块生成修复任务,所述修复任务包括为所述异常数据块选择的新副本;
6、根据所述修复任务,向运行在第二数据节点设备的第二数据服务发送修复请求,所述修复请求用于请求对所述异常数据块进行修复,所述第二数据服务承载所述新副本;
7、其中,所述第一数据节点设备和所述第二数据节点设备为所述数据集群中的数据节点设备。
8、可选地,所述异常数据块包括以下至少一项:
9、第三数据服务承载的数据块,所述第三数据服务为在第一预设时长内未向所述第一主节点设备上报心跳信息的数据服务;
10、在第二预设时长内未向所述第一主节点设备上报至少部分副本的数据块;
11、第二主节点设备未修复完成的数据块,所述第二主节点设备为所述元数据集群切换为所述第一主节点设备之前的主节点设备。
12、可选地,所述为所述异常数据块生成修复任务,包括:
13、在所述异常数据块为所述第二主节点设备未修复完成的数据块的情况下,从数据库中获取所述第二主节点设备为所述异常数据块选择的新副本;
14、检测所述第二主节点设备为所述异常数据块选择的新副本的合法性;
15、在所述第二主节点设备为所述异常数据块选择的新副本合法的情况下,根据所述第二主节点设备为所述异常数据块选择的新副本,生成所述修复任务。
16、可选地,所述为所述异常数据块生成修复任务,包括:
17、根据运行在各数据节点设备的各数据服务上报的心跳信息和数据块信息,获取与所述异常数据块相关的副本信息;
18、根据所述副本信息,确定所述修复任务的优先级;
19、根据所述心跳信息和/或所述数据块信息,为所述异常数据块选择新副本;其中,所述新副本的数量为一个或多个;
20、根据所述优先级和所述新副本,生成所述修复任务。
21、可选地,所述向运行在第一数据节点设备的第一数据服务发送封装请求之前,所述方法还包括:
22、在所述异常数据块属于追加写类型的数据条带的情况下,向承载所述异常数据块的各副本的数据服务发送第一请求,所述第一请求用于请求查询所述异常数据块的各副本当前写入的数据量,并请求将所述异常数据块的各副本设置为只读副本;
23、接收承载所述异常数据块的各副本的数据服务反馈的数据量;其中,所述封装请求还包括所述数据量。
24、可选地,所述异常数据块的标识信息包括版本号,所述向运行在第一数据节点设备的第一数据服务发送封装请求之前,所述方法还包括:
25、在所述异常数据块属于重写类型的数据条带的情况下,更新所述异常数据块的版本号;
26、根据运行在各数据节点设备的各数据服务上报的心跳信息和数据块信息,确定所述异常数据块的当前正常副本的数量;
27、所述向运行在第一数据节点设备的第一数据服务发送封装请求,包括:
28、在所述当前正常副本的数量小于所述异常数据块的副本总数的情况下,向所述第一数据服务发送所述封装请求,所述封装请求还包括所述异常数据块更新后的版本号。
29、可选地,所述方法还包括:
30、在所述当前正常副本的数量等于所述异常数据块的副本总数的情况下,向所述第一数据服务发送版本号设置请求,所述版本号设置请求用于将所述异常数据块的副本的版本号设置为更新后的所述版本号;
31、接收所述第一数据服务发送的第一响应,所述第一响应指示版本号设置成功或版本号设置失败;
32、在所述第一响应指示版本号设置成功的情况下,结束修复任务。
33、可选地,所述新副本满足以下条件:
34、所述第一数据服务功能正常;
35、所述第一数据服务的磁盘的剩余容量大于所述新副本所需的容量;
36、各个所述新副本不在同一个故障域内;
37、各个所述新副本与当前的正常副本不在同一个故障域内。
38、可选地,所述根据所述修复任务,向运行在第二数据节点设备的第二数据服务发送修复请求之后,所述方法还包括:
39、接收所述第二数据服务发送的第二响应,所述第二响应用于指示所述第二数据服务接收到所述修复请求;
40、将所述修复任务的修复状态更新为修复中;
41、在所述修复任务的修复状态为修复中的情况下,周期性的向所述第二数据服务发送第二请求,所述第二请求用于查询修复进度;
42、接收所述第二数据服务发送的第三响应,所述第三响应携带当前修复进度;
43、在所述第三响应指示修复完成的情况下,将所述修复任务的修复状态更新为修复完成。
44、可选地,所述异常数据块的标识信息包括版本号,所述方法还包括:
45、在所述第三响应指示修复完成,且所述异常数据块属于重写类型的数据条带的情况下,更新所述异常数据块的版本号。
46、可选地,所述方法还包括:
47、在所述修复任务的修复状态更新为修复中之后的第三预设时长内,接收到的所述第三响应携带的修复进度均指示修复未完成,且所述异常数据块属于重写类型的数据条带的情况下,向所述第二数据服务发送解封请求,所述解封请求包括所述异常数据块的当前的版本号;
48、接收所述第二数据服务反馈的第四响应,所述第四响应指示解封成功或解封失败;
49、在所述第四响应指示解封失败的情况下,重新执行为所述异常数据块生成修复任务的步骤。
50、可选地,所述方法还包括:
51、在所述修复任务的修复状态为修复完成,或者,所述修复任务在第三预设时长内未完成修复的情况下,删除所述修复任务,并删除数据库中的记录。
52、第二方面,为达到上述目的,本技术的实施例提供一种数据修复方法,应用于分布式存储系统的数据集群的第二数据节点设备,所述方法包括:
53、接收第一主节点设备发送的修复请求,所述修复请求用于请求对异常数据块进行修复,所述第一主节点设备为所述分布式存储系统的元数据集群当前的主节点设备;
54、根据所述修复请求,在运行在所述第二数据节点设备上的第二数据服务上创建所述异常数据块的新副本;
55、将所述异常数据块的副本中已封装的数据写入所述新副本。
56、可选地,接收第一主节点设备发送的修复请求,所述方法还包括:
57、向所述第一主节点设备发送第二响应,所述第二响应用于指示已接收到所述修复请求;
58、接收所述第一主节点设备发送的第二请求;
59、响应于所述第二请求,向所述第一主节点设备发送第三响应,所述第三响应携带所述异常数据块的当前修复进度。
60、可选地,所述方法还包括:
61、接收所述第一主节点设备发送的解封请求,所述解封请求包括所述异常数据块的当前的版本号;
62、向所述第一主节点设备发送第四响应,所述第四响应指示解封成功或解封失败。
63、第三方面,为达到上述目的,本技术的实施例提供一种数据修复方法,应用于分布式存储系统的数据集群的第一数据节点设备,所述方法包括:
64、接收第一主节点设备发送的封装请求,所述封装请求用于请求将异常数据块封装为密封状态,所述第一主节点设备为所述分布式存储系统的元数据集群当前的主节点设备;
65、根据所述封装请求,对所述异常数据块进行封装并将所述封装请求发送给承载所述异常数据块的从副本的第四数据服务;
66、接收所述第四数据服务反馈的封装结果;
67、根据对所述异常数据块的封装情况和接收到的所述封装结果,向所述第一主节点设备发送第五响应,所述第五响应指示封装成功或封装失败。
68、可选地,所述接收第一主节点设备发送的封装请求之前,所述方法还包括:
69、接收所述第一主节点设备发送的第一请求;
70、响应于所述第一请求,将所述异常数据块的副本设置为只读副本,并向所述第一主节点设备反馈所述异常数据块的副本当前写入的数据量;其中,所述封装请求还包括所述数据量。
71、可选地,所述封装请求还包括所述异常数据块更新后的版本号。
72、可选地,所述方法还包括:
73、接收所述第一主节点设备发送的版本号设置请求,所述版本号设置请求用于将所述异常数据块的副本的版本号设置为更新后的所述版本号;
74、响应于所述版本号设置请求,设置所述异常数据块的主副本的版本号,并将所述版本号设置请求发送给承载所述异常数据块的从副本的第四数据服务;
75、接收所述第四数据服务反馈的版本号设置结果;
76、根据对所述主副本的版本号的设置情况和接收到的所述版本号设置结果,向所述第一主节点设备发送第一响应,所述第一响应指示版本号设置成功或版本号设置失败。
77、第四方面,为达到上述目的,本技术的实施例提供一种数据修复装置,应用于分布式存储系统的元数据集群的第一主节点设备,所述装置包括:
78、检测模块,用于检测所述分布式存储系统的数据集群中存在的异常数据块;
79、第一发送模块,用于在所述异常数据块的封装状态为解封状态的情况下,向运行在第一数据节点设备的第一数据服务发送封装请求,所述第一数据服务承载所述异常数据块的主副本;
80、生成模块,用于在所述异常数据块的封装状态为密封状态的情况下,为所述异常数据块生成修复任务,所述修复任务包括为所述异常数据块选择的新副本;
81、第二发送模块,用于根据所述修复任务,向运行在第二数据节点设备的第二数据服务发送修复请求,所述修复请求用于请求对所述异常数据块进行修复,所述第二数据服务承载所述新副本;
82、其中,所述第一数据节点设备和所述第二数据节点设备为所述数据集群中的数据节点设备。
83、第五方面,为达到上述目的,本技术的实施例提供一种数据修复装置,应用于分布式存储系统的数据集群的第二数据节点设备,所述装置包括:
84、第一接收模块,用于接收第一主节点设备发送的修复请求,所述修复请求用于请求对异常数据块进行修复,所述第一主节点设备为所述分布式存储系统的元数据集群当前的主节点设备;
85、创建模块,用于根据所述修复请求,在运行在所述第二数据节点设备上的第二数据服务上创建所述异常数据块的新副本;
86、写入模块,用于将所述异常数据块的副本中已封装的数据写入所述新副本。
87、第六方面,为达到上述目的,本技术的实施例提供一种数据修复装置,应用于分布式存储系统的数据集群的第一数据节点设备,所述装置包括:
88、第一接收模块,用于接收第一主节点设备发送的封装请求,所述封装请求用于请求将异常数据块封装为密封状态,所述第一主节点设备为所述分布式存储系统的元数据集群当前的主节点设备;
89、第一处理模块,用于根据所述封装请求,对所述异常数据块进行封装并将所述封装请求发送给承载所述异常数据块的从副本的第四数据服务;
90、第二接收模块,用于接收所述第四数据服务反馈的封装结果;
91、第一发送模块,用于根据对所述异常数据块的封装情况和接收到的所述封装结果,向所述第一主节点设备发送第五响应,所述第五响应指示封装成功或封装失败。
92、第七方面,为达到上述目的,本技术的实施例提供一种通信设备,包括:收发机、处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序;所述处理器执行所述程序时实现如第一方面所述的数据修复方法,或者,实现如第二方面所述的数据修复方法,或者,实现如第三方面所述的数据修复方法。
93、第八方面,为达到上述目的,本技术的实施例提供一种可读存储介质,其上存储有程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的数据修复方法,或者,实现如第二方面所述的数据修复方法,或者,实现如第三方面所述的数据修复方法。
94、第九方面,为达到上述目的,本技术的实施例提供一种计算机程序产品,包括计算机指令,所述计算机指令被处理器执行时实现如第一方面所述的数据修复方法,或者,实现如第二方面所述的数据修复方法,或者,实现如第三方面所述的数据修复方法。
95、本技术的上述技术方案的有益效果如下:
96、本技术实施例的数据修复方法中,分布式存储系统的元数据集群的第一主节点设备首先检测所述分布式存储系统的数据集群中存在的异常数据块;其次,在所述异常数据块的封装状态为解封状态的情况下,向运行在数据集群的第一数据节点设备的第一数据服务发送封装请求,所述第一数据服务承载所述异常数据块的主副本;这样,能够将异常数据块封装为密封状态,避免后续对异常数据块进行数据修复的过程中客户端依然向异常数据块的副本写入数据造成数据不一致的情况,再次,在所述异常数据块的封装状态为密封状态的情况下,为所述异常数据块生成修复任务,所述修复任务包括为所述异常数据块选择的新副本;最后,根据所述修复任务,向运行在所述数据集群的第二数据节点设备的第二数据服务发送修复请求,所述修复请求用于请求对所述异常数据块进行修复,所述第二数据服务承载所述新副本;如此,实现了第二数据服务基于接收到的修复请求对所述异常数据块进行数据修复,而无需基于原副本的wal恢复数据,避免了由于wal的引入造成数据服务节点设计的复杂度增大的问题。
1.一种数据修复方法,其特征在于,应用于分布式存储系统的元数据集群的第一主节点设备,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述异常数据块包括以下至少一项:
3.根据权利要求2所述的方法,其特征在于,所述为所述异常数据块生成修复任务,包括:
4.根据权利要求1所述的方法,其特征在于,所述为所述异常数据块生成修复任务,包括:
5.根据权利要求1所述的方法,其特征在于,所述向运行在第一数据节点设备的第一数据服务发送封装请求之前,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,所述异常数据块的标识信息包括版本号,所述向运行在第一数据节点设备的第一数据服务发送封装请求之前,所述方法还包括:
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
8.根据权利要求1、3或4所述的方法,其特征在于,所述新副本满足以下条件:
9.根据权利要求1所述的方法,其特征在于,所述根据所述修复任务,向运行在第二数据节点设备的第二数据服务发送修复请求之后,所述方法还包括:
10.根据权利要求9所述的方法,其特征在于,所述异常数据块的标识信息包括版本号,所述方法还包括:
11.根据权利要求9所述的方法,其特征在于,所述方法还包括:
12.根据权利要求9所述的方法,其特征在于,所述方法还包括:
13.一种数据修复方法,其特征在于,应用于分布式存储系统的数据集群的第二数据节点设备,所述方法包括:
14.根据权利要求13所述的方法,其特征在于,接收第一主节点设备发送的修复请求,所述方法还包括:
15.根据权利要求14所述的方法,其特征在于,所述方法还包括:
16.一种数据修复方法,其特征在于,应用于分布式存储系统的数据集群的第一数据节点设备,所述方法包括:
17.根据权利要求16所述的方法,其特征在于,所述接收第一主节点设备发送的封装请求之前,所述方法还包括:
18.根据权利要求16所述的方法,其特征在于,所述封装请求还包括所述异常数据块更新后的版本号。
19.根据权利要求18所述的方法,其特征在于,所述方法还包括:
20.一种数据修复装置,其特征在于,应用于分布式存储系统的元数据集群的第一主节点设备,所述装置包括:
21.一种数据修复装置,其特征在于,应用于分布式存储系统的数据集群的第二数据节点设备,所述装置包括:
22.一种数据修复装置,其特征在于,应用于分布式存储系统的数据集群的第一数据节点设备,所述装置包括:
23.一种通信设备,包括:收发机、处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序;其特征在于,所述处理器执行所述程序时实现如权利要求1至12中任一项所述的数据修复方法,或者,实现如权利要求13至15中任一项所述的数据修复方法,或者,实现如权利要求16至19中任一项所述的数据修复方法。
24.一种可读存储介质,其上存储有程序或指令,其特征在于,所述程序或指令被处理器执行时实现如权利要求1至12中任一项所述的数据修复方法,或者,实现如权利要求13至15中任一项所述的数据修复方法,或者,实现如权利要求16至19中任一项所述的数据修复方法。
25.一种计算机程序产品,其特征在于,包括计算机指令,所述计算机指令被处理器执行时实现如权利要求1至12中任一项所述的数据修复方法,或者,实现如权利要求13至15中任一项所述的数据修复方法,或者,实现如权利要求16至19中任一项所述的数据修复方法。
