一种分布式存储系统中元数据容错恢复方法

文档序号:7891778阅读:229来源:国知局
专利名称:一种分布式存储系统中元数据容错恢复方法
技术领域
本发明涉及信息存储领域,具体涉及ー种分布式存储系统中元数据容错恢复方法。
背景技术
传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大規模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展,所以越来越多的企业开始使用分布式存储系统来存放所有数据。
然而,对于大多数分布式文件系统而言,通常将元数据与数据两者独立开来,分别存放在不同的服务器中,从而获得更高的系统扩展性和I/o并发性。元数据服务器记录数据逻辑名字与物理信息的映射关系,包含文件访问控制所需要的所有块数据,对文件进行访问时,先向元数据服器务请求查询对应的元数据,然后通过获得的元数据进行后续的与块服务器读写等I/o操作。受到服务器自身硬件技术的局限和技术人员的操作因素,元数据服务器无法做到100%的无故障发生。存储着海量数据资料的元数据服务器一旦发生故障,将直接导致整个分布式存储系统内存储的海量数据丢失,造成企业的严重数据灾难。数据可靠性面临着巨大的挑战,而此时ー种可靠有效的元数据容错恢复方案就显得尤为重要。通常传统的元数据容错恢复方案是将大部分元数据存放在元数据服务器或备份服务器的本地磁盘上,只有少部分元数据存放在元数据服务器的内存中以满足即时对元数据请求性能的需要和元数据可靠性的需要,这样带来的问题就是元数据服务器的性能会受到很大的影响,同时如果元数据服务器发生故障,对于内存上存放的这部分元数据由于无法及时写入磁盘而造成丢失,其后果也是比较严重的。然而,在日益增长的高性能商业存储领域中,对存储系统的性能和可靠性等要求较高,在现有分布式存储系统元数据容错恢复方案的基础上,提出一种可靠高效的元数据容错恢复方案就显得很必要了。

发明内容
本发明的目的是提供ー种分布式存储系统中元数据容错恢复方法。本发明的目的是按以下方式实现的,数据容错恢复步骤如下
元数据服务器会每隔一段时间将内存中的元数据写入到元数据文件中,如果发生掉电,那么从最后一次执行将内存中的元数据写入到文件操作到掉电时刻之间进行的元数据操作,会因为没有从内存写入到文件而丢失,所以采用changelog的机制,为元数据生成命名为changelog. *. dfs的文件,其中,*表示数字N,这些文件以log的方式将每次的元数据操作记录下来,这些文件可称为元数据改变日志文件,以下简称为日志文件,它们存储了过去的N小时的文件改变,N最大值的数值是由元数据服务器配置文件中的BACK_L0GS參数设置的,默认为50,即如果元数据服务进程已经运行了 50个小时,那么在数据路径下会有changelog. I. dfs changelog. 50. dfs 50个文件,数字越小,表示最近最新的日志文件;
当元数据服务器掉电重启后,在执行元数据服务器启动之前需要进行错误恢复,具体措施为需要将最近的ー个日志文件changelog. *. dfs并入主元数据文件metadata, dfs中;
changelog主要功能是如何将元数据操作以log的形式记录到日志文件中,在dfs元数据服务器进程中主要有三个函数changelog_init、changelog_rotate和changelog ;
changelog_init函数完成changelog机制的初始化工作,从配置文件中获取BACK_LOGS值来设置全局变量BackLogsNumber,该变量表示changelog. *. dfs的最多个数,另ー个全局变量fd=NULL,该变量是要操作的changelog. *. dfs的文件描述符;
changelog_rotate函数主要完成重命名changelog. * dfs文件,关闭fd描述符对应的文件;若BackLogsNumberX),则将所有的日志文件重命名,命名方法就是将 changelog. * dfs中*代表的数字N加I,新名中的N值最大为BackLogsNumber ;若BackLogsNumber<=0,则删除掉changelog. 0. dfs,表示不需要进行changelog ;向所有的备份服务器发送消息MAT0ML_METACHANGES_L0G通知它们需要重命名changelog_ml. * dfs,即备份服务器上的日志文件也需要重命名;
changelog函数完成的功能是向changelog. 0. dfs中添加log,从传入參数中取出version和log,并将log存放到printbuff数组中;以追加的方式打开changelog. 0. dfs文件,fd记录其文件描述符,将version和log写入到该文件中;向所有备份服务器发送MAT0ML_METACHANGES_L0G消息,将version和log作为数据包发送出去,通知它们需要各自修改 changelog_ml. 0. dfs ;
log信息可以有两部组成changid和log。第一列依次递增的数字是changeid,它是由dfs元数据服务器中ー个全局变量version来维护,姆次调用changelog都会自加I,而且该值也会被写入到元数据文件中,也就是该变量在文件系统诞生后会一直递增,在恢复操作时通过比对元数据文件中的version和日志文件中changeid来确定从哪一条log开始恢复;
当元数据服务器掉电吋,内存中元数据与元数据文件中的元数据可能并不是一致,因为之前进行了一些文件操作,每个文件操作成功后都有日志记录,这些文件操作导致了元数据的更新,但没有及时写入到元数据文件中,在使用恢复操作恢复元数据时,会先将最近的元数据文件加载到内存中,然后根据version值决定从哪条log开始恢复,每执行一条log其实就是将先前的文件操作再执行一次,当所有log执行完毕,将内存中元数据写入到元数据文件中,产生的新的元数据文件与掉电时刻内存中的元数据是保持一致的;
备份服务器的工作是定期从元数据服务器上下载元数据文件、日志文件、session文件和实时接收从元数据服务端发送的log日志并写入到日志文件中,当元数据服务器宕机后,从备份服务器上面找回元数据服务器宕机前的完整元数据文件。本发明的有益效果是大幅提高分布式文件系统中元数据服务的性能,通过本地和远程操作日志来保证元数据的可靠性,使得当元数据服务器发生意外故障时能及时方便的通过操作日志来恢复所有元数据信息。使分布式文件系统更适用于复杂的高性能商业存储领域,因而具有非常广_的发展前景。


图I是分布式文件系统的元数据备份操作日志示意 图2是分布式文件系统的元数据容错恢复示意 图3是元数据容错备份恢复关系示意图。
具体实施例方式參照说明书附图对本发明的方法作以下详细地说明。如附图所示,元数据服务器会每隔一段时间将内存中的元数据写入到元数据文件中,如果发生掉电,那么从最后一次执行将内存中的元数据写入到文件操作到掉电时刻之间进行的元数据操作,会因为没有从内存写入到文件而丢失。所以我们提出了ー种changelog的机制。我们会为元数据生成名为changelog. *. dfs (*表示数字N)的文件,这些文件以log的方式将每次的元数据操作记录下来。这些文件可称为元数据改变日志文件 (以下简称为日志文件),它们存储了过去的N小时的文件改变,N最大值的数值是由元数据服务器配置文件中的BACK_L0GS參数设置的,默认为50,即如果元数据服务进程已经运行了 50个小时,那么在数据路径下会有changelog. I. dfs change log. 50. dfs 50个文件,数字越小,表示最近最新的日志文件。当元数据服务器掉电重启后,在执行元数据服务器启动之前需要进行错误恢复。具体措施为需要将最近的一个日志文件changelog. *. dfs并入主元数据文件metadata,dfs中
changelog主要功能是如何将元数据操作以log的形式记录到日志文件中。在dfs元数据服务器进程中主要有三个函数changelog_init、changelog_rotate和changelog。changelog_init函数完成changelog机制的初始化工作。具体实现从配置文件中获取BACK_L0GS值来设置全局变量BackLogsNumber,该变量表不changelog. * dfs的最多个数。另ー个全局变量fd=NULL,该变量是要操作的changelog.*. dfs的文件描述符。changelog_rotate函数主要完成重命名changelog. * dfs文件。具体实现关闭fd描述符对应的文件;若BackLogsNumberX),则将所有的日志文件重命名,命名方法就是将changelog. * dfs中*代表的数字N加I,比如changelog. 5. dfs会重命名为changelog. 6. dfs。新名中的 N 值最大为 BackLogsNumber ;若 BackLogsNumber〈=0,则删除掉changelog. 0. dfs,表示不需要进行changelog ;向所有的备份服务器发送消息MAT0ML_METACHANGES_L0G通知它们需要重命名changelog_ml. *. dfs,即备份服务器上的日志文件也需要重命名。changelog函数完成的功能是向changelog. 0. dfs中添加log。具体实现为从传入參数中取出version和log,并将log存放到printbuff数组中;以追加的方式打开changelog. 0. dfs文件,fd记录其文件描述符,将version和log写入到该文件中;向所有备份服务器发送MAT0ML_METACHANGES_L0G消息,将version和log作为数据包发送出去,通知它们需要各自修改changelog_ml. 0. dfs。log信息可以有两部组成changid和log。第一列依次递增的数字是changeid,它是由dfs元数据服务器中ー个全局变量version来维护,姆次调用changelog都会自加1,而且该值也会被写入到元数据文件中,也就是该变量在文件系统诞生后会一直递增,在恢复操作时通过比对元数据文件中的version和日志文件中changeid来确定从哪一条log开始恢复。当元数据服务器掉电吋,内存中元数据与元数据文件中的元数据可能并不是一致,因为之前进行了一些文件操作(姆个文件操作成功后都有日志记录),这些文件操作导致了元数据的更新,但没有及时写入到元数据文件中。在使用恢复操作恢复元数据时,会先将最近的元数据文件加载到内存中,然后根据version值决定从哪条log开始恢复,每执行一条log其实就是将先前的文件操作再执行一次。当所有log执行完毕,将内存中元数据写入到元数据文件中,产生的新的元数据文件与掉电时刻内存中的元数据是保持一致的。备份服务器主要的工作是定期从元数据服务器上下载元数据文件、日志文件、session文件和实时接收从元数据服务端发送的log日志并写入到日志文件中。当元数据服务器宕机后,我们能从备份服务器上面找回元数据服务器宕机前的完整元数据文件。
实施例让元数据服务器存储了三种类型的元数据文件的名字空间和块的名字空间、从文件到块的映射、块的副本的位置。所有的元数据都放在内存中。前两种类型的元数据通过向操作日志登记修改而保持不变,操作日志存储在元数据服务器的本地磁盘并在几个远程机器上留有副本。使用日志使得我们可以很简单地、可靠地更新元数据服务器的状态,即使在元数据服务器崩溃的情况下也不会有不一致的问题。因为元数据存储在内存中,所以元数据服务器的操作很快,所有对元数据服务器的请求都会在极短的时间内得到响应,从而保证了元数据服务的性能需求。操作日志包含了对元数据所作的修改的历史记录。它作为逻辑时间线定义了并发操作的执行顺序。文件、块以及它们的版本号都由它们被创建时的逻辑时间而唯一地、永久地被标识。由于操作日志的重要性,我们必须要将操作日志可靠地保存起来,并且只有在元数据的改变固定下来之后才将变化呈现给用户。所以我们将操作日志复制到远程的机器上,并且只有在将相应的日志记录写到本地和远程的磁盘上之后才回答用户的请求。元数据服务器可以用操作日志来恢复它的文件系统的状态。为了将启动时间减至最小,日志就必须要比较小。每当日志的长度增长到超过一定的规模后,元数据服务器就要检查它的状态,它可以从本地磁盘装入最近的检查点来恢复状态。创建ー个检查点比较费时,元数据服务器的内部状态是以一种在创建一个检查点时并不耽误即将到来的修改操作的方式来组织的。元数据服务器切換到一个新的日志文件并在ー个单独的线程中创建检查点。这个新的检查点记录了切換前所有的修改。 名字空间的修改必须是原子性的,它们只能有元数据服务器处理名字空间锁保证了操作的原子性和正确性,而元数据服务器的操作日志在全局范围内定义了这些操作的顺序。除说明书所述的技术特征外,均为本专业技术人员的已知技术。
权利要求
1.一种分布式存储系统中元数据容错恢复方法,其特征在于恢复步骤如下 元数据服务器会每隔一段时间将内存中的元数据写入到元数据文件中,如果发生掉电,那么从最后一次执行将内存中的元数据写入到文件操作到掉电时刻之间进行的元数据操作,会因为没有从内存写入到文件而丢失,所以采用changelog的机制,为元数据生成命名为changelog. *. dfs的文件,其中,*表示数字N,这些文件以log的方式将每次的元数据操作记录下来,这些文件可称为元数据改变日志文件,以下简称为日志文件,它们存储了过去的N小时的文件改变,N最大值的数值是由元数据服务器配置文件中的BACK_L0GS参数设置的,默认为50,即如果元数据服务进程已经运行了 50个小时,那么在数据路径下会有changelog. I. dfs changelog. 50. dfs 50个文件,数字越小,表示最近最新的日志文件;当元数据服务器掉电重启后,在执行元数据服务器启动之前需要进行错误恢复,具体措施为需要将最近的一个日志文件changelog. *. dfs并入主元数据文件metadata, dfs中; changelog主要功能是如何将元数据操作以log的形式记录到日志文件中,在dfs元数据服务器进程中主要有三个函数changelog_init、changelog_rotate和changelog ; changelog_init函数完成changelog机制的初始化工作,从配置文件中获取BACK_LOGS值来设置全局变量BackLogsNumber,该变量表示changelog. *. dfs的最多个数,另一个全局变量fd=NULL,该变量是要操作的changelog. *. dfs的文件描述符; changelog_rotate函数主要完成重命名changelog. *. dfs文件,关闭fd描述符对应的文件;若BackLogsNumberX),则将所有的日志文件重命名,命名方法就是将changelog. *. dfs中*代表的数字N加I,新名中的N值最大为BackLogsNumber ;若BackLogsNumber<=0,则删除掉changelog. 0. dfs,表示不需要进行changelog ;向所有的备份服务器发送消息MAT0ML_METACHANGES_L0G通知它们需要重命名changelog_ml. *. dfs,即备份服务器上的日志文件也需要重命名; changelog函数完成的功能是向changelog. 0. dfs中添加log,从传入参数中取出version和log,并将log存放到printbuff数组中;以追加的方式打开changelog. 0. dfs文件,fd记录其文件描述符,将version和log写入到该文件中;向所有备份服务器发送MAT0ML_METACHANGES_L0G消息,将version和log作为数据包发送出去,通知它们需要各自修改 changelog_ml. 0. dfs ; log信息可以有两部组成changid和log。
2.第一列依次递增的数字是changeid,它是由dfs元数据服务器中一个全局变量version来维护,每次调用changelog都会自加I,而且该值也会被写入到元数据文件中,也就是该变量在文件系统诞生后会一直递增,在恢复操作时通过比对元数据文件中的version和日志文件中changeid来确定从哪一条log开始恢复; 当元数据服务器掉电时,内存中元数据与元数据文件中的元数据可能并不是一致,因为之前进行了一些文件操作,每个文件操作成功后都有日志记录,这些文件操作导致了元数据的更新,但没有及时写入到元数据文件中,在使用恢复操作恢复元数据时,会先将最近的元数据文件加载到内存中,然后根据version值决定从哪条log开始恢复,每执行一条log其实就是将先前的文件操作再执行一次,当所有log执行完毕,将内存中元数据写入到元数据文件中,产生的新的元数据文件与掉电时刻内存中的元数据是保持一致的;备份服务器的工作是定期从元数据服务器上下载元数据文件、日志文件、session文 件和实时接收从元数据服务端发送的log日志并写入到日志文件中,当元数据服务器宕机后,从备份服务器上面找回元数据服务器宕机前的完整元数据文件。
全文摘要
本发明提供一种分布式存储系统中元数据容错恢复方法,当元数据服务器掉电时,内存中元数据与元数据文件中的元数据可能并不是一致,因为之前进行了一些文件操作,每个文件操作成功后都有日志记录,这些文件操作导致了元数据的更新,但没有及时写入到元数据文件中,在使用恢复操作恢复元数据时,会先将最近的元数据文件加载到内存中,然后根据version值决定从哪条log开始恢复,每执行一条log其实就是将先前的文件操作再执行一次,当所有log执行完毕,将内存中元数据写入到元数据文件中,产生的新的元数据文件与掉电时刻内存中的元数据是保持一致的。
文档编号H04L29/08GK102662795SQ20121007286
公开日2012年9月12日 申请日期2012年3月20日 优先权日2012年3月20日
发明者崔赢, 张俊, 张明富, 张现忠, 颜秉珩 申请人:浪潮电子信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1