分布式集群文件系统的缓存同步方法和设备的制作方法

文档序号:6520230阅读:624来源:国知局
分布式集群文件系统的缓存同步方法和设备的制作方法
【专利摘要】本发明实施例提供一种分布式集群文件系统的缓存同步方法和设备,通过为目标文件定义一个全局缓存表,全局缓存表中包含有各节点对目标文件的修改记录,当第一节点对目标文件进行写访问时,根据写锁中包含对目标文件进行过最新修改的第二节点的信息获取到最新全局缓存表,根据最新全局缓存表中第二节点对目标文件的最新修改记录获取到第二节点对目标文件的修改数据,当两个节点同时交互写目标文件的不同数据时各自缓存中的数据都是有效的,后续的读可以直接从缓存中获取,当两个节点交互写相同数据时,需要从另一个节点获取修改数据,数据在网络间的传递比一次写盘和读盘效率高很多,所以集群文件系统性相较现有方式有较大提升。
【专利说明】分布式集群文件系统的缓存同步方法和设备
【技术领域】
[0001]本发明实施例涉及数据通讯技术,尤其涉及一种分布式集群文件系统的缓存同步方法和设备。
【背景技术】
[0002]分布式集群文件系统能够解决海量数据存储的问题,在集群中,多台设备联合起来对外提供服务,用多个节点(服务器)来代替一个节点完成任务,既提高了处理能力,还能够保证高可靠性。对称分布式的集群文件系统具有全局统一的命名空间,存储空间对于各个节点都是可见并且相同的,元数据和数据可以分布到集群的任何节点上,当然,从任意节点也可以访问到系统中存储的所有数据。
[0003]当前的存储系统都至少分为2级存储:存储物理介质和从主存中开辟出的缓存。为了提升分布式集群文件系统的访问性能,在各个节点会有数据的高速缓存,当客户端读访问某部分数据时,接收此请求的节点首先查询数据是否存储在本节点的高速缓存中,若是,直接返回,若否,向磁盘发送I/O请求,将数据从磁盘读取到缓存中并暂时保存起来,以备下次访问时不需要从磁盘读取,从缓存中直接读取,以提升读性能。同样,当客户端写访问某部分数据时,接收此请求的节点先将数据写入缓存,而不是直接写盘,当节点中或者整个系统的缓存中积累了一定量的写数据时再一起将数据写入磁盘,以提升写性能。当系统中多个节点交互对同一文件进行读写访问时,如何高效地保证数据的一致性是系统需要重点解决的问题。
[0004]现有技术中,对于分布式集群文件系统来说,为了保证数据的一致性必须要用到分布式锁,访问数据之前,首先需要申请此数据对应的分布式锁。分布式锁有读锁和写锁,读锁可以并发,写锁为独占,即多个节点可以并发读同一部分数据,但若某个节点正在修改此部分数据,其他节点必须等到修改完成之后才能访问,访问到的数据包括最新修改的数据。以下将通过一个具体例子来说明,图1为现有技术中文件的读写流程示意图,如图1所示,节点I首先修改了文件I的第0数据块,由于之前没有任何节点来申请过文件I对应的写锁,锁处于初始化状态,锁管理装置直接授权给节点1,节点I获得写锁之后,修改第0数据块,修改后的数据保存在缓存中。之后节点2对文件I写访问,需要修改文件I的第4数据块,分布式锁发现节点I申请过写锁,于是向节点I回收文件I的写锁,节点I接收到写锁回收的命令之后,首先将文件I的缓存数据下盘,由于节点2申请的是写锁,意味着节点2要修改文件I的数据,所以节点I上与文件I相关的缓存数据可能不会是最新的了,需要将其无效,之后将锁权限交还给锁管理装置,锁管理装置将锁权限授权给节点2,节点2获得写锁之后修改相应的数据到缓存,修改之后节点I又来读访问文件I的第0数据块,与之前一样锁管理装置到节点2回收写锁,回收过程中将节点2的数据写盘,由于节点I申请的是读锁,读不会修改数据,所以节点2的缓存还是有效的,即不用无效相应的缓存,之后锁管理装置将读锁授权给节点1,节点I从缓存中找到相应的数据,但是发现此数据是无效的,说明此数据可能不是最新的,从磁盘读取。[0005]通过上述的例子可以看出,通过将最新数据写盘来保证各个节点访问到的数据的一致性,会存在如下诸多缺点:若集群中各节点交互对同一个文件进行读写操作,会造成此文件的数据频繁读盘写盘,缓存没有任何加速作用,反而增加系统的复杂度,而且频繁的读盘、写盘将造成系统的延迟增大,将极大地影响性能。

【发明内容】

[0006]本发明实施例提供一种分布式集群文件系统的缓存同步方法和设备,能够避免频繁的读盘、写盘将造成系统的延迟增大,提高系统性能。
[0007]本发明第一发明提供一种分布式集群文件系统的缓存同步方法,包括:
[0008]当客户端对第一节点上的目标文件进行写访问时,所述第一节点向锁管理装置申请所述目标文件对应的写锁,所述写锁中包括对所述目标文件进行过最新修改的第二节点的信息;
[0009]所述第一节点根据所述第二节点的信息获取所述目标文件对应的最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录;
[0010]所述第一节点根据所述第二节点对所述目标文件的最新修改记录对所述目标文件进行修改,将修改后的数据保存在所述第一节点的缓存中,并将所述第一节点对所述目标文件的修改记录更新到所述最新全局缓存表。
[0011]在本发明第一方面的第一种可能的实现方式中,所述第一节点根据所述第二节点对所述目标文件的最新修改记录对所述目标文件进行修改,包括:
[0012]所述第一节点根据所述第二节点对所述目标文件的最新修改记录确定是否获取所述第二节点对所述目标文件的修改数据;
[0013]若是,则所述第一节点获取所述第二节点对所述目标文件的修改数据,将获取到的所述目标文件的修改数据存储在所述第一节点的缓存中,使得所述第一节点和所述第二节点上存储的所述目标文件的数据保持一致,从所述第一节点的缓存中读取所述数据,对所述目标文件进行修改;
[0014]若否,则所述第一节点从所述第一节点的缓存中读取数据,对所述目标文件进行修改。
[0015]在本发明第一方面的第二种可能的实现方式中,所述目标文件包括至少两个数据块,所述第二节点对所述目标文件的最新修改记录中包括:所述第二节点对所述目标文件进行过最新修改的数据块的信息;
[0016]所述第一节点根据所述第二节点对所述目标文件的最新修改记录确定是否获取所述第二节点对所述目标文件的修改数据,包括:
[0017]所述第一节点根据所述第二节点对所述目标文件进行过最新修改的数据块的信息,确定所述第一节点对所述目标文件进行写访问的数据块与所述第二节点对所述目标文件进行过最新修改的数据块是否为同一个数据块;
[0018]若是,则所述第一节点获取所述第二节点对所述目标文件的修改数据。
[0019]在本发明第一方面的第三种可能的实现方式中,所述第一节点根据所述第二节点的信息获取最新全局缓存表,包括:
[0020]所述第一节点向所述第二节点发送全局缓存表同步请求消息;[0021]所述第一节点接收所述第二节点发送的全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录。
[0022]在本发明第一方面的第四种可能的实现方式中,所述第一节点根据所述第二节点对所述目标文件的最新修改记录获取所述第二节点对所述目标文件的修改数据,包括:
[0023]所述第一节点根据所述最新全局缓存表中所述第二节点对所述目标文件的最新修改记录,向所述第二节点发送数据同步请求消息;
[0024]所述第一节点接收所述第二节点发送的数据同步响应消息,所述数据同步响应消息中包含所述第二节点对所述目标文件的修改数据。
[0025]在本发明第一方面的第五种可能的实现方式中,所述第一节点对所述目标文件进行写操作,将修改后的数据保存在所述第一节点的缓存中,并将所述第一节点对所述目标文件的修改记录更新到所述最新全局缓存表之后,还包括:
[0026]当所述第一节点对所述目标文件进行读访问时,向所述锁管理装置申请所述目标文件对应的读锁,所述读锁中包含对所述目标文件进行过最新修改的所述第一节点的信息;
[0027]所述第一节点从所述第一节点的缓存中读取所述目标文件。
[0028]在本发明第一方面的第六种可能的实现方式中,所述第一节点所述目标文件进行写操作,将修改后的数据保存在所述第一节点的缓存中,并将所述第一节点对所述目标文件的修改记录更新到所述最新全局缓存表之后,还包括:
[0029]所述第一节点接收所述第二节点发送的全局缓存表同步请求消息,所述全局缓存表同步请求消息为所述第二节点需要对所述目标文件进行读访问或写访问时向所述第一节点发送的;
[0030]所述第一节点根据所述全局缓存表同步请求消息,向所述第二节点返回全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述更新后的最新全局缓存表。
[0031]在本发明第一方面的第七种可能的实现方式中,所述第一节点根据所述全局缓存表同步请求消息,向所述第二节点或所述第三节点返回全局缓存表同步响应消息之后,还包括:
[0032]所述第一节点接收所述第二节点发送的数据同步请求,所述数据同步请求消息为所述第二节点根据所述更新后的最新全局缓存表中所述第一节点对所述目标文件的修改记录发送的;
[0033]所述第一节点向所述第二节点发送数据同步响应,所述数据同步响应中包括所述第一节点对所述目标文件的修改数据,以使所述第二节点将所述第一节点对所述目标文件的修改数据保存在所述第二节点的缓存中,当所述第二节点对所述数据进行读访问或写访问时可以从所述第二节点的缓存中读取所述目标文件。
[0034]在本发明第一方面的第八种可能的实现方式中,所述第一节点向锁管理装置申请所述目标文件对应的写锁,包括:
[0035]所述第一节点向所述锁管理装置发送所述目标文件对应的写锁申请请求,以使所述锁管理装置向所述第二节点回收所述写锁;
[0036]所述第一节点接收所述锁管理装置发送的写锁授权响应。[0037]本发明第二方面提供一种分布式集群目标文件系统的缓存同步方法,包括:
[0038]锁管理装置接收所述第一节点发送的目标文件对应的写锁申请请求,所述写锁申请请求是客户端对所述目标文件进行写访问时,所述第一节点向所述锁管理装置发送的;
[0039]所述锁管理装置确定第二节点申请过所述目标文件对应的写锁,对所述目标文件进行过最新修改,则所述锁管理装置向所述第二节点发送所述目标文件对应的写锁回收命令,向所述第二节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第二节点回收所述目标文件对应的写锁时,并不对所述第二节点的缓存中的所述目标文件的数据写盘和无效;
[0040]所述锁管理装置向所述第一节点发送写锁授权响应,所述写锁中包括所述第二节点的信息。
[0041]在本发明第二方面的第一种可能的实现方式中,所述锁管理装置向所述第一节点发送写锁授权响应,所述写锁中包括所述第二节点的信息之后,还包括:
[0042]所述锁管理装置接收所述第一节点发送的所述目标文件对应的读锁申请请求;
[0043]所述锁管理装置确定所述第一节点申请过所述目标文件对应的写锁,对所述目标文件进行过最新修改,则所述锁管理装置向所述第一节点发送所述目标文件对应的写锁回收命令,向所述第一节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第一节点回收所述目标文件对应的写锁时,并不对所述第一节点的缓存中的所述目标文件的数据写盘和无效;
[0044]所述锁管理装置向所述第一节点发送读锁授权响应,所述读锁中包括所述第一节点的信息,以使所述第一节点从所述第一节点的缓存中读取所述目标文件。
[0045]在本发明第二方面的第二种可能的实现方式中,所述锁管理装置向所述第一节点发送写锁授权响应,所述写锁中包括所述第二节点的信息之后,还包括:
[0046]所述锁管理装置接收所述第二节点发送的所述目标文件对应的读锁或写锁申请请求;
[0047]所述锁管理装置确定所述第一节点申请过所述目标文件对应的写锁,对所述目标文件进行过最新修改,则所述锁管理装置向所述第一节点发送所述目标文件对应的写锁回收命令,向所述第一节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第一节点回收所述目标文件对应的写锁时,并不对所述第一节点的缓存中的所述目标文件的数据写盘和无效;
[0048]所述锁管理装置向所述第二节点发送读锁或写锁授权响应,所述读锁或写锁中包括所述第一节点的信息,以使所述第二节点根据所述第一节点的信息获取最新全局缓存表。
[0049]本发明第三方面提供一种分布式集群目标文件系统的缓存同步方法,包括:
[0050]所述第二节点接收所述第一节点发送的全局缓存表同步请求消息;
[0051]所述第二节点根据所述全局缓存表同步请求消息,向所述第一节点返回全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录。
[0052]在本发明第三方面的第一种可能的实现方式中,所述第二节点根据所述全局缓存表同步请求消息,向所述第一节点返回全局缓存表同步响应消息之后,还包括:[0053]所述第二节点接收所述第一节点发送的数据同步请求消息,所述数据同步请求消息为所述第一节点根据所述最新全局缓存表中所述第二节点对所述目标文件的最新修改记录发送的;
[0054]所述第二节点根据所述数据同步请求消息,向所述第一节点返回数据同步响应消息,所述数据同步响应消息中包含所述第二节点对所述目标文件的修改数据。
[0055]本发明第四方面提供一种节点,所述节点为第一节点,包括:
[0056]锁申请模块,用于当客户端对第一节点上的目标文件进行写访问时,向锁管理装置申请所述目标文件对应的写锁,所述写锁中包括对所述目标文件进行过最新修改的第二节点的信息;
[0057]缓存表获取模块,用于根据所述第二节点的信息获取所述目标文件对应的最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录;
[0058]文件修改模块,用于根据所述第二节点对所述目标文件的最新修改记录对所述目标文件进行修改,将修改后的数据保存在所述第一节点的缓存中,并将所述第一节点对所述目标文件的修改记录更新到所述最新全局缓存表。
[0059]在本发明第四方面的第一种可能的实现方式中,所述文件修改模块包括判断单元、数据获取单元和文件修改单元;
[0060]所述判断单元,用于根据所述第二节点对所述目标文件的最新修改记录确定是否获取所述第二节点对所述目标文件的修改数据;
[0061]若是,则所述获取单元获取所述第二节点对所述目标文件的修改数据,将获取到的所述目标文件的修改数据存储在所述第一节点的缓存中,使得所述第一节点和所述第二节点上存储的所述目标文件的数据保持一致,所述文件修改单元从所述第一节点的缓存中读取所述数据,对所述目标文件进行修改;
[0062]若否,则所述文件修改单元从所述第一节点的缓存中读取数据,对所述目标文件进行修改。
[0063]在本发明第四方面的第二种可能的实现方式中,所述目标文件包括至少两个数据块,所述第二节点对所述目标文件的最新修改记录中包括:所述第二节点对所述目标文件进行过最新修改的数据块的信息;
[0064]所述判断单元具体用于:
[0065]根据所述第二节点对所述目标文件进行过最新修改的数据块的信息,确定所述第一节点对所述目标文件进行写访问的数据块与所述第二节点对所述目标文件进行过最新修改的数据块是否为同一个数据块;
[0066]若是,则所述数据获取单元获取所述第二节点对所述目标文件的修改数据。
[0067]在本发明第四方面的第三种可能的实现方式中,所述缓存表获取模块具体用于:
[0068]向所述第二节点发送全局缓存表同步请求消息;
[0069]接收所述第二节点发送的全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录。
[0070]在本发明第四方面的第四种可能的实现方式中,所述数据获取单元具体用于:
[0071]根据所述最新全局缓存表中所述第二节点对所述目标文件的最新修改记录,向所述第二节点发送数据同步请求消息;
[0072]接收所述第二节点发送的数据同步响应消息,所述数据同步响应消息中包含所述第二节点对所述目标文件的修改数据。
[0073]在本发明第四方面的第五种可能的实现方式中,还包括:文件读取模块;
[0074]所述锁申请模块还用于:当所述第一节点对所述目标文件进行读访问时,向所述锁管理装置申请所述目标文件对应的读锁,所述读锁中包含对所述目标文件进行过最新修改的所述第一节点的信息;
[0075]所述文件读取模块,用于从所述第一节点的缓存中读取所述目标文件。
[0076]在本发明第四方面的第六种可能的实现方式中,还包括:
[0077]接收模块,用于接收所述第二节点发送的全局缓存表同步请求消息,所述全局缓存表同步请求消息为所述第二节点需要对所述目标文件进行读访问或写访问时向所述第一节点发送的;
[0078]发送模块,用于根据所述全局缓存表同步请求消息,向所述第二节点返回全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述更新后的最新全局缓存表。
[0079]在本发明第四方面的第七种可能的实现方式中,所述接收模块还用于:
[0080]接收所述第二节点发送的数据同步请求,所述数据同步请求消息为所述第二节点根据所述更新后的最新全局缓存表中所述第一节点对所述目标文件的修改记录发送的;
[0081]所述发送模块还用于:向所述第二节点发送数据同步响应,所述数据同步响应中包括所述第一节点对所述目标文件的修改数据,以使所述第二节点将所述第一节点对所述目标文件的修改数据保存在所述第二节点的缓存中,当所述第二节点对所述数据进行读访问或写访问时可以从所述第二节点的缓存中读取所述目标文件。
[0082]在本发明第四方面的第八种可能的实现方式中,所述锁申请模块具体用于:
[0083]向所述锁管理装置发送所述目标文件对应的写锁申请请求,以使所述锁管理装置向所述第二节点回收所述写锁;
[0084]接收所述锁管理装置发送的写锁授权响应。
[0085]本发明第五方面一种锁管理装置,包括:
[0086]接收模块,用于接收所述第一节点发送的目标文件对应的写锁申请请求,所述写锁申请请求是客户端对所述目标文件进行写访问时,所述第一节点向所述锁管理装置发送的;
[0087]确定模块,用于确定第二节点申请过所述目标文件对应的写锁,所述第二节点对所述目标文件进行过最新修改;
[0088]发送模块,用于向所述第二节点发送所述目标文件对应的写锁回收命令,向所述第二节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第二节点回收所述目标文件对应的写锁时,并不对所述第二节点的缓存中的所述目标文件的数据写盘和无效;
[0089]所述发送模块还用于:向所述第一节点发送写锁授权响应,所述写锁中包括所述第二节点的信息。
[0090]在本发明第五方面的第一种可能的实现方式中,所述接收模块还用于:
[0091]接收所述第一节点发送的所述目标文件对应的读锁申请请求;
[0092]所述确定模块还用于:确定所述第一节点申请过所述目标文件对应的写锁,所述第一节点对所述目标文件进行过最新修改;
[0093]所述发送模块还用于:向所述第一节点发送所述目标文件对应的写锁回收命令,向所述第一节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第一节点回收所述目标文件对应的写锁时,并不对所述第一节点的缓存中的所述目标文件的数据写盘和无效;
[0094]所述发送模块还用于:向所述第一节点发送读锁授权响应,所述读锁中包括所述第一节点的信息,以使所述第一节点从所述第一节点的缓存中读取所述目标文件。
[0095]在本发明第五方面的第二种可能的实现方式中,所述接收模块还用于:
[0096]接收所述第二节点发送的所述目标文件对应的读锁或写锁申请请求;
[0097]所述确定模块还用于:确定所述第一节点申请过所述目标文件对应的写锁,所述第一节点对所述目标文件进行过最新修改;
[0098]所述发送模块还用于:向所述第一节点发送所述目标文件对应的写锁回收命令,向所述第一节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第一节点回收所述目标文件对应的写锁时,并不对所述第一节点的缓存中的所述目标文件的数据写盘和无效;
[0099]所述发送模块还用于:向所述第二节点发送读锁或写锁授权响应,所述读锁或写锁中包括所述第一节点的信息,以使所述第二节点根据所述第一节点的信息获取最新全局缓存表。
[0100]本发明第六方面提供一种节点,所述节点为第二节点,包括:
[0101]接收模块,用于接收所述第一节点发送的全局缓存表同步请求消息;
[0102]发送模块,用于根据所述全局缓存表同步请求消息,向所述第一节点返回全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录。
[0103]在本发明第六方面的第一种可能的实现方式中,所述接收模块还用于:
[0104]接收所述第一节点发送的数据同步请求消息,所述数据同步请求消息为所述第一节点根据所述最新全局缓存表中所述第二节点对所述目标文件的最新修改记录发送的;
[0105]所述发送模块还用于:根据所述数据同步请求消息,向所述第一节点返回数据同步响应消息,所述数据同步响应消息中包含所述第二节点对所述目标文件的修改数据。
[0106]本发明实施例提供一种分布式集群文件系统的缓存同步方法和设备,通过为目标文件定义一个全局缓存表,全局缓存表中包含有各节点对目标文件的修改记录,当第一节点对目标文件进行写访问时,根据写锁中包含对目标文件进行过最新修改的第二节点的信息获取到最新全局缓存表,根据最新全局缓存表中第二节点对目标文件的最新修改记录获取到第二节点对目标文件的修改数据,当两个节点同时交互写目标文件的不同数据的情况下各自缓存中的数据都是有效的,后续的读可以直接从缓存中获取,当两个节点交互写相同数据的情况下,需要从另一个节点获取修改数据,数据在网络间的传递比一次写盘和读盘效率高很多,所以不管是交叉修改相同数据还是不同数据,集群文件系统性能相较现有方式都有较大提升。
【专利附图】

【附图说明】[0107]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0108]图1为现有技术中文件的读写流程示意图;
[0109]图2为分布式集群文件系统的物理架构示意图;
[0110]图3为本发明分布式集群文件系统的缓存同步方法实施例一的流程图;
[0111]图4为本发明分布式集群文件系统的缓存同步方法实施例二的流程图;
[0112]图5为本发明分布式集群文件系统的缓存同步方法实施例三的流程图;
[0113]图6为本发明分布式集群文件系统的缓存同步方法实施例四的流程图;
[0114]图7为本发明第一节点的结构示意图;
[0115]图8为本发明第一节点的实施例二的结构示意图;
[0116]图9为本发明锁管理装置的实施例一的结构示意图;
[0117]图10为本发明第二节点实施例一的结构示意图;
[0118]图11为本发明第一节点实施例三的结构示意图;
[0119]图12为本发明锁管理装置实施例二的结构示意图;
[0120]图13为本发明第二节点实施例二的结构示意图。
【具体实施方式】
[0121]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0122]在介绍本发明各实施例之前,先简单介绍一下分布式集群文件系统,图2为分布式集群文件系统的物理架构示意图,如图2所示,分布式集群文件系统有六个服务器,分别为节点1、节点2、节点3、存储节点1、存储节点2、存储节点3,节点1、节点2和节点3主要用来处理客户端发送的数据读请求和写请求等操作,存储节点1、存储节点2、存储节点3主要用来存储数据,节点1、节点2、节点3存储的数据都可以存储在存储节点1、存储节点2、存储节点3上,图2所示的本分布式集群文件系统的物理架构只是用来举例说明,实际的应用过程中,还可以有更多的节点,而且本发明各实施例提供的方法适用于所有的分布式集群文件系统,并不受分布式集群文件系统的硬件结构的影响。
[0123]分布式集群文件系统具有全局统一的命名空间,存储空间对于各个节点都是可见并且相同的,元数据和数据可以分布到集群中任何节点上,当然,从任意节点也可以访问到系统中存储的所有数据,以图2为例,存储节点1、存储节点2、存储节点3共同构成了存储空间,节点1、节点2、节点3都可以访问这三个存储节点上的所有数据。对于分布式集群文件系统来说,要保证数据的一致性必须要用到分布式锁,分布式锁以下简称锁,访问数据之前,节点首先需要向锁管理装置申请此数据对应的文件的锁,锁管理装置用于管理系统中所有文件的对应锁,负责为各节点分配锁,以及向各节点回收锁。每个文件都有一个读锁和写锁,实际上一个文件的读锁和写锁可以认为是一个锁,锁管理装置在向节点授权锁的时候,在锁中设置有级别,写锁的级别高于读锁的级别,如果节点申请的是写锁,则将锁的级别设置为写锁对应的级别,锁中还包括锁授权的对象,如果锁要授权给第一节点,则锁管理装置在锁中授权对象中写入第一节点的信息。其中,读锁可以并发,写锁为独占,即多个节点可以并发读同一部分数据,但若某个节点正在修改该部分数据,其他节点必须等到修改完成之后才能访问该部分数据。
[0124]图3为本发明分布式集群文件系统的缓存同步方法实施例一的流程图,如图3所示,本实施例提供的方法可以包括以下步骤:
[0125]步骤101、当客户端对第一节点上的目标文件进行写访问时,第一节点向锁管理装置申请目标文件对应的写锁。
[0126]当客户端对第一节点上的目标文件进行写访问时,第一节点首先向锁管理装置申请目标文件对应的写锁,本实施例中,锁管理装置在向第一节点授权该写锁时,在该写锁中包含对目标文件进行过最新修改的第二节点的信息。
[0127]其中,第一节点向锁管理装置申请目标文件对应的写锁,具体为:第一节点向锁管理装置发送目标文件对应的写锁申请请求,以使锁管理装置向第二节点回收该目标文件的写锁。锁管理装置接收第一节点发送的目标文件对应的写锁申请请求后,确定是否有其他节点申请过目标文件对应的写锁,锁管理装置发现第二节点申请过目标文件对应的写锁,第二节点对目标文件进行过最新修改,则锁管理装置向第二节点发送目标文件对应的写锁回收命令,第二节点在接收到锁管理装置发送的写锁回收命令后,准备锁归还,和现有技术不同的是,第二节点在进行锁归还时,并不将第二节点的缓存中的数据下盘和无效,第二节点缓存中的数据仍是有效的。第二节点将写锁归还给锁管理装置,锁管理装置向第一节点发送写锁授权响应,写锁中包括第二节点的信息,第一节点接收锁管理装置发送的写锁授权响应。
[0128]步骤102、第一节点根据第二节点的信息获取目标文件对应的最新全局缓存表。
[0129]首先,介绍一下全局缓存表,本发明各实施例通过在集群中为每个文件建立一个全局缓存表(Global Cache Table,简称GCT),即最新数据在集群中的缓存分布表,此表记录该文件在集群中的修改情况,随着读锁和写锁更新到各个节点上,当某一节点对文件进行了修改,则将该节点对文件的修改记录更新到全局缓存表中,后续当其他节点访问该文件时,首先获取该文件对应最新的全局缓存表,该最新全局缓存表保存在对文件进行过最新修改的节点上。本实施例中,目标文件指客户端当前要访问的文件,第一节点根据第二节点的信息地获取目标文件对应的最新全局缓存表,该全局缓存表中记录有第二节点对目标文件的最新修改记录,例如第二节点对目标文件中的哪个数据块进行过修改。
[0130]第一节点根据第二节点的信息获取最新全局缓存表,具体为:第一节点向第二节点发送全局缓存表同步请求消息,第二节点接收到第一节点发送的全局缓存表同步请求消息后,向第一节点返回全局表表同步请求响应,第一节点接收第二节点发送的全局缓存表同步响应消息,全局缓存表同步响应消息中包含最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录。
[0131]步骤103、第一节点根据第二节点对目标文件的最新修改记录对目标文件进行修改,将修改后的数据保存在第一节点的缓存中,并将第一节点对目标文件的修改记录更新到最新全局缓存表。[0132]第一节点获取到最新全局缓存表后,根据该最新全局缓存表中记录的第二节点对目标文件的最新修改记录对目标文件进行修改,具体为,第一节点根据第二节点对目标文件的最新修改记录确定是否获取第二节点对目标文件的修改数据,若是,即第一节点确定出需要获取第二节点对目标文件的修改数据,则第一节点获取第二节点对目标文件的修改数据,将获取到的目标文件的修改数据存储在第一节点的缓存中,使得第一节点和第二节点上存储的目标文件的数据保持一致,然后,第一节点从第一节点的缓存中读取数据,对目标文件进行修改。若否,即第一节点和第二节点的上存储的目标文件的数据一致,则第一节点直接从第一节点的缓存中读取数据,对目标文件进行修改。
[0133]一般情况下,目标文件包括至少两个数据块,第一节点和第二节点交替对目标文件进行修改时,可能是对目标文件中的同一数据块进行修改,也可能是对不同的数据块进行修改,如果是对同一数据块进行修改,当第二节点修改后,第一节点再次修改时,第一节点上此时保存的该同一数据块的数据不是最新的,最新的数据保存在第二节点上,这种情况下,第一节点需要从第二节点上获取第二节点对该同一数据块的修改数据,得到该同一数据块的最新修改数据;如果第一节点要修改的数据和第二节点要修改的数据不是同一个数据块,则不需要从第二节点处获取第二节点对目标文件的修改数据。
[0134]本实施例中,第二节点对目标文件的最新修改记录中可以包括:第二节点对目标文件进行过最新修改的数据块的信息。第一节点根据第二节点对目标文件的最新修改记录确定是否获取第二节点对目标文件的修改数据,具体为:第一节点根据第二节点对目标文件进行过最新修改的数据块的信息,确定第一节点对目标文件进行写访问的数据块与第二节点对目标文件进行过最新修改的数据块是否为同一个数据块;若是,即第一节点对目标文件进行写访问的数据块与第二节点对目标文件进行过最新修改的数据块是同一个数据块,则第一节点获取第二节点对目标文件的修改数据。如果第一节点对目标文件进行写访问的数据块与第二节点对目标文件进行过最新修改的数据块不是同一个数据块,则第一节点不需要获取第二节点对目标文件的修改数据,直接从第一节点的缓存中读取数据进行修改。通过该方法使得节点间的数据交互是根据需要来进行传递的,如果对不同的数据块进行写或读操作,节点间仅仅交互最新全局缓存表就可以了,避免了不必要的数据传输,占用的网络开销少。
[0135]本实施例中,第一节点根据第二节点对目标文件的最新修改记录获取第二节点对目标文件的修改数据,具体为:第一节点根据最新全局缓存表中第二节点对目标文件的最新修改记录,向第二节点发送数据同步请求消息,第二节点接收到数据同步请求消息后,向第一节点返回数据同步响应消息,第一节点接收第二节点发送的数据同步响应消息,数据同步响应消息中包含第二节点对目标文件的修改数据。这里,数据同步请求消息用于向第二节点获取第二节点对目标文件修改后的数据,一种方式中,第一节点可以只获取第二节点对目标文件修改的数据,如第二节点只修改了目标文件的第一数据块中的数据,则第一节点只获取第一数块对应修改后的数据即可,不需要获取目标文件的所有数据,这样可以减少第一节点和第二节点之间数据的传输。当然,也可以获取第二节点上存储的整个目标文件的数据,本发明并不以此为限。第一节点通过从第二节点上获取第二节点对第一数据块的修改数据,使得第一节点上的缓存中存储的目标文件的数据为最新的数据,从而使得第一节点和第二节点之间的数据能够同步,保证各节点上存储的该目标文件的数据都一致。
[0136]步骤104、第一节点对目标文件进行写操作,将修改后的数据保存在第一节点的缓存中,并将第一节点对目标文件的修改记录更新到最新全局缓存表。
[0137]当第一节点确定第一节点上保存的全局缓存表和目标文件的数据都为最新时,从第一节点的缓存中读取目标文件,对目标文件进行写操作,将修改后的数据保存在第一节点的缓存中,在对目标文件修改成功后,第一节点将第一节点对目标文件的修改记录更新到最新全局缓存表,由于写访问,会对目标文件的数据进行修改,所以各节点在对目标文件进行修改后,都要更新自身存储的全局缓存表。
[0138]本实施例提供的方法,通过为目标文件定义一个全局缓存表,全局缓存表中包含有各节点对目标文件的修改记录,第一节点对目标文件进行写访问时,根据写锁中包含对目标文件进行过最新修改的第二节点的信息获取到最新全局缓存表,根据最新全局缓存表中第二节点对目标文件的最新修改记录获取到第二节点对目标文件的修改数据,当两个节点同时交互写目标文件的不同数据的情况下各自缓存中的数据都是有效的,后续的读可以直接从缓存中获取,当两个节点交互写相同数据的情况下,需要从另一个节点获取修改数据,数据在网络间的传递比一次写盘和读盘效率高很多,所以不管是交叉修改相同数据还是不同数据,集群文件系统性能相较现有方式都有较大提升。
[0139]在实施例一的基础上,在本发明另一实施例中,步骤104之后,还可以包括以下步骤:当第一节点对目标文件进行读访问时,向锁管理装置申请目标文件对应的读锁,读锁中包含对目标文件进行过最新修改的第一节点的信息;第一节点从第一节点的缓存中读取目标文件。当第一节点对目标文件进行修改之后,若第一节点又申请对目标文件进行读访问,第一节点首先向锁管理装置申请目标文件对应的读锁,锁管理装置在接收到第一节点发送的读锁申请请求后,并不对第一节点上的缓存进行写盘,第一节点缓存中的数据仍是有效的,锁管理装置将读锁授权给第一节点,该读锁中包含对目标文件进行过最新修改的第一节点的信息,第一节点根据读锁发现自己是对目标文件进行过最新修改的节点,因此,第一节点的缓存中存储的目标文件的数据是有效的,第一节点从缓存中读取目标文件。
[0140]在实施例一的基础上,在本发明又一实施例中,步骤104之后,还可以包括以下步骤:第一节点接收第二节点发送的全局缓存表同步请求消息,该全局缓存表同步请求消息为第二节点需要对目标文件进行读访问或写访问时向第一节点发送的。具体的,在第一节点对目标文件进行修改之后,如果第二节点需要对目标文件进行读访问或写访问时,第二节点首先向锁管理装置申请目标文件对应的读锁或写锁,锁管理装置在接收到第二节点发送的读锁或写锁申请请求后,并不对第一节点上的缓存进行写盘,第一节点缓存中的数据仍是有效的,锁管理装置将读锁或写锁授权给第二节点,该读锁或写锁中包含对目标文件进行过最新修改的第一节点的信息,第二节点根据第一节点的信息向第一节点发送全局缓存表同步请求消息,第一节点接收到全局缓表同步请求消息后,向第二节点返回全局缓存表同步响应消息,全局缓存表同步响应消息中包含更新后的最新全局缓存表根据更新后的最新全局缓存表。
[0141]第二节点在获取到该更新后的最新全局缓存表后,将该更新后的最新全局缓存表作为最新的全局缓存表,根据最新全局缓存表中第一节点对目标文件的修改记录,确定第一节点对目标文件的修改数据是否与自己要访问的目标文件的数据相同,若相同,则说明第一节点上保存的数据是最新的,第二节点向第一节点发送数据同步请求,第一节点接收第二节点发送的数据同步请求,数据同步请求消息为第二节点根据更新后的最新全局缓存表中第一节点对目标文件的修改记录发送的。
[0142]第一节点向第二节点发送数据同步响应,数据同步响应中包括第一节点对目标文件的修改数据,以使第二节点将第一节点对目标文件的修改数据保存在第二节点的缓存中,当第二节点对数据进行读访问或写访问时可以从第二节点的缓存中读取目标文件。
[0143]图4为本发明分布式集群文件系统的缓存同步方法实施例二的流程图,如图4所示,本实施例提供的方法包括以下步骤:
[0144]步骤201、锁管理装置接收第一节点发送的目标文件对应的写锁申请请求,写锁申请请求是客户端对目标文件进行写访问时,第一节点向锁管理装置发送的。
[0145]当客户端对目标文件进行写访问时,第一节点首先向锁管理装置申请目标文件对应的与锁。
[0146]步骤202、锁管理装置确定第二节点申请过目标文件对应的写锁,对目标文件进行过最新修改,则锁管理装置向第二节点发送目标文件对应的写锁回收命令,向第二节点回收目标文件对应的写锁,锁管理装置在向第二节点回收目标文件对应的写锁时,并不对第二节点的缓存中的目标文件的数据写盘和无效。
[0147]锁管理装置在接收到第一节点发送的目标文件对应的写锁申请请求后,确定是否有其他节点申请过该目标文件对应的写锁,如果锁管理装置确定第二节点申请过目标文件对应的写锁,对目标文件进行过最新修改,则锁管理装置向第二节点回收该目标文件对应的写锁。和现有技术中不同,锁管理装置在向第二节点回收目标文件对应的写锁时,并不对第二节点的缓存中的目标文件的数据写盘和无效,因此,第二节点的缓存中存储的目标文件的数据仍是有效的,后续如果第二节点再次访问该目标文件中时,不需要从磁盘中读取,直接从缓存中读取目标文件中需要的数据即可。
[0148]步骤203、锁管理装置向第一节点发送写锁授权响应,写锁中包括第二节点的信
肩、O
[0149]锁管理装置从第二节点回收目标文件对应的写锁后,向第一节点发送写锁授权响应,将目标文件对应的写锁授权给第一节点,并在写锁中包括对目标文件进行过最新修改的第二节点的信息。第一节点在获得写锁后,发现第二节点对目标文件进行过写锁,则第一节点确定出自身缓存中保存的目标文件的数据不是最新的,因此,第一节点需要从第二节点处获取最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录。第一节点根据第二节点对目标文件的最新修改记录确定是否需要获取第二节点对目标文件的修改数据。
[0150]本实施例提供的方法,当第一节点向锁管理装置申请目标文件对应的写锁时,锁管理装置确定第二节点也申请过目标文件对应的写锁,锁管理装置在向第二节点回收目标文件对应的写锁时,并不对第二节点缓存中的数据进行写盘和无效,第二节点缓存中的数据仍是有效,从而使得第二节点再次对目标文件进行修改时,可以从第二节点的缓存中读取数据,即使第一节点和第二节点交替对目标文件进行修改,两个节点的缓存中的数据都是有效的,避免了频繁的读盘和写盘。
[0151]本实施例锁管理装置向第一节点发送写锁授权响应之后,如果第一节点需要对目标文件进行读访问,则本实施例提供的方法还可以包括以下步骤:锁管理装置接收第一节点发送的目标文件对应的读锁申请请求;锁管理装置确定第一节点申请过目标文件对应的写锁,对目标文件进行过最新修改,则锁管理装置向第一节点发送目标文件对应的写锁回收命令,向第一节点回收目标文件对应的写锁,锁管理装置在向第一节点回收目标文件对应的写锁时,并不对第一节点的缓存中的目标文件的数据写盘和无效,因此,第一节点缓存中的数据仍是有效的。锁管理装置向第一节点回收目标文件对应的写锁后,向第一节点发送读锁授权响应,读锁中包括第一节点的信息,以使第一节点从第一节点的缓存中读取目标文件。这里,由于锁管理装置在向第一节点回收目标文件对应的写锁时,并不对第一节点缓存中的数据写盘和无效,第一节点缓存中的数据仍是有效的,第一节点可以直接从缓存中读取数据,如果后续第二节点也需要读取目标文件的数据时,可以根据第一节点对目标文件的修改记录,获取第一节点对目标文件的修改数据,第一节点将自身对目标文件的修改数据发送给第二节点,使得两个节点的数据一致,从而避免了第二节点从磁盘中读取数据,由于数据在网络间的传递比一次写盘和读盘效率高很多,提高了资源的利用率。
[0152]本实施例锁管理装置向第一节点发送写锁授权响应之后,如果第二节点需要对目标文件进行读访问或写访问,则本实施例提供的方法还可以包括以下步骤:锁管理装置接收第二节点发送的目标文件对应的读锁或写锁申请请求,锁管理装置在接收到第二节点发送的目标文件对应的读锁或写锁申请请求后,确定是否有其他节点申请过该目标文件对应的写锁或读锁,锁管理装置确定第一节点申请过目标文件对应的写锁,对目标文件进行过最新修改,则锁管理装置向第一节点发送目标文件对应的写锁回收命令,向第一节点回收目标文件对应的写锁,锁管理装置在向第一节点回收目标文件对应的写锁时,并不对第一节点的缓存中的目标文件的数据写盘和无效,第一节点缓存中的数据仍是有效的,锁管理装置在向第一节点回收目标文件对应的写锁后,向第二节点发送读锁或写锁授权响应,读锁或写锁中包括第一节点的信息,以使第二节点根据第一节点的信息获取最新全局缓存表。第二节点得到读锁或写锁授权后,获知第一节点对目标文件进行过修改,则读锁或写锁中包括第一节点的信息,从第一节点中获取最新全局缓存表,该最新全局缓存表中记录有第一节点对目标文件的修改记录。并根据第一节点对目标文件的修改记录确定是否需要从第一节点处同步数据,具体地,第一节点确定第一节点对目标文件进行写访问的数据块与第二节点要访问的数据块是否为同一个数据块,举例来说,如果第二节点要访问目标文件中的第0数据块,第一节点对目标文件的第2数据块进行过修改,但是第一节点并没有对第0数据块修改过,第二节点上保存的目标文件的第0数据块的数据仍是最新的,则第二节点不需要获取第一节点对目标文件的修改数据,从第二节点的缓存中读取数据,如果缓存中没有,则从第二节点的磁盘中读取。如果第二节点要访问的是第2数据,则第二节点需要获取第一节点对目标文件的修改数据,使得两个节点上的数据同步。第二节点通过网络从第一节点上将数据传递过来,从而避免了第二节点从磁盘中读取数据,由于数据在网络间的传递比一次写盘和读盘效率高很多,提高了资源的利用率。
[0153]图5为本发明分布式集群文件系统的缓存同步方法实施例三的流程图,如图5所示,本实施例提供的方法包括以下步骤:
[0154]步骤301、第二节点接收第一节点发送的全局缓存表同步请求消息。
[0155]第一节点在接收到锁管理装置发送的写锁或读锁授权响应后,向第二节点发送全局缓存表同步请求消息,用于获取最新全局缓存表。
[0156]步骤302、第二节点根据全局缓存表同步请求消息,向第一节点返回全局缓存表同步响应消息,全局缓存表同步响应消息中包含最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录。
[0157]第二节点将最新全局缓存表发送给第一节点之后,最新全局缓存表中保存有第二节点对目标文件的最新修改记录,第一节点根据第二节点对目标文件的最新修改记录,确定是否需要获取第一节点对目标文件的修改数据,若需要,则第一节点向第二节点发送数据同步请求消息,第二节点接收第一节点发送的数据同步请求消息;第二节点根据数据同步请求消息,向第一节点返回数据同步响应消息,数据同步响应消息中包含第二节点对目标文件的修改数据。从而使得第一节点和第二节点上的数据同步。
[0158]图6为本发明分布式集群文件系统的缓存同步方法实施例四的流程图,本实施例将通过一个具体的例子对实施例一所示的方案进行详细的描述,如图6所示,本实施例提供的方法包括以下步骤:
[0159]步骤401、当第二节点要写文件I的第4数据块时,第二节点向锁管理装置发送文件I对应的写锁申请请求。
[0160]本实施例中,文件I为目标文件,文件I中包括六个数据块,第0数据块、第I数据块、第2数据块、第3数据块、第4数据块、第5数据块。第一节点和第二节点都没有对文件I进行写操作时,文件I对应的全局缓存表为空,在全局缓存表为空的时候进行读访问,先从节点的缓存中读取数据,如果节点的缓存有需要读取的数据就从缓存返回,若节点的缓存中没有要读取的数据,则从磁盘中读取。之后第二节点对文件I进行写访问,写文件I的第4数据块,第二节点首先向锁管理装置申请文件I对应的写锁。
[0161]步骤402、锁管理装置向第二节点返回文件I对应的写锁申请响应。
[0162]锁管理装置在接收到第二节点发送的写锁申请请求后,确定没有其他节点申请过文件I对应的写锁,则将文件I对应的写锁授权给第二节点。
[0163]步骤403、第二节点对文件I第4数据块进行修改,并更新文件I对应的全局缓存表。
[0164]第二节点持有文件I的写锁之后,对文件I的第4数据块修改,并将修改后的数据保存在缓存中,同时更新文件I对应的全局缓存表,在文件I对应的全局缓存表添加新的记录项,每个文件对应一个全局缓存表,全局缓存表中有多个记录项,每个记录项对应一个数据块,如果文件中有5个数据块,则为每个数据块建立一个记录项,当某一节点对某一数据块进行修改后,则更新全局缓存表中该数据块对应的记录项。在本步骤中,由于全局缓存表之前为空,需要添加新的记录项,该记录项为第4数据块对应的记录项,这里将第二节点对文件I的第4数据块的最新修改记录更新到第4数据块对应的记录项中。
[0165]步骤404、当第一节点要写文件I的第4数据块时,第一节点向锁管理装置申请文件I对应的写锁。
[0166]步骤405、锁管理装置向第二节点发送文件I对应的写锁回收请求。
[0167]步骤406、第二节点向锁管理装置返回文件I对应的写锁回收响应。
[0168]第二节点在接收到锁管理装置发送的文件I对应的写锁回收请求后,准备锁交还,在锁交还时,并不对第二节点缓存中的数据写盘和无效,第二节点缓存中的数据仍是有效的。步骤407、锁管理装置向第一节点返回文件I对应的写锁申请响应。
[0169]锁管理装置将文件I对应的写锁授权给第一节点,写锁中包含对文件I进行过最新修改的第二节点的信息。
[0170]步骤408、第一节点向第二节点发送全局缓存表同步请求消息。
[0171]第一节点向第二节点发送全局缓存表同步请求消息,用于向第二节点获取最新全局缓存表。
[0172]步骤409、第二节点向第一节点发送的全局缓存表同步响应消息。
[0173]全局缓存表同步响应消息中包含最新全局缓存表,最新全局缓存表中保存有第二节点对文件I的最新修改记录,即第二节点对文件I的第4数据块的修改记录。
[0174]步骤410、第一节点根据最新全局缓存表中第二节点对目标文件的最新修改记录,向第二节点发送第4数据块的数据同步请求消息。
[0175]第一节点接收第二节点发送的全局缓存表同步响应消息后,根据文件I的最新全局缓存表确定第二节点对文件I的第4数据块修改过,则第一节点向第二节点发送数据同步请求消息,用于获取第二节点对文件I的第4数据块的修改数据。
[0176]步骤411、第二节点向第一节点发送第4数据块的数据同步响应消息。
[0177]其中,第4数据块的数据同步响应消息中包含第二节点对目标文件的第4数据块的修改数据。
[0178]步骤412、第一节点修改第4数据块,将修改后的数据保存到第一节点的缓存中,更新文件I对应的全局缓存表。
[0179]第一节点接收到第二节点发送的第4数据块的修改数据后,将第4数据块的修改数据填入预先分配好的缓存中,完成两个节点的数据同步,之后进行真正的修改,将对第4数据块修改后的数据保存在缓存中。由于在第二节点对第4数据块修改时,已经在全局缓存表中添加了第4数据块的修改记录项,所以,这里第一节点对第4数据块修改完成之后更新全局缓存表的记录项即可,即更新为:文件I的第4数据块被第一节点修改。
[0180]步骤413、当第一节点要对文件I的第3数据块修改时,查询全局缓存表,确定没有其他节点对第3数据块修改过,对第3数据块进行修改。
[0181]如果第一节点再来修改文件I的第3数据块,查询全局缓存表,发现没有其他节点对第3数据块进行过修改,无需同步,直接修改即可,第3数据块在全局缓存表中没有相关的记录项,需要添加第3数据块的记录项,文件I的第3数据块被第一节点修改过。
[0182]步骤414、当第二节点要读文件I的第4数据块,向锁管理装置发送文件I对应的读锁申请请求。
[0183]如果后续第二节点要对文件I的第4数据块进行读访问,首先申请文件I对应的读锁,
[0184]步骤415、锁管理装置向第二节点返回文件I对应的读锁申请响应。
[0185]步骤416、第二节点向第一节点发送全局缓存表同步请求。
[0186]第二节点获得读锁之后,该读锁中包含对文件I的第4数据块进行过最新修改的第一节点的信息,第一节点之前申请过写锁,于是第一节点上的全局缓存表时最新的了。第二节点向第一节点发起全局缓存表同步请求。
[0187]步骤417、第一节点向第二节点返回全局缓存表同步响应。[0188]该全局缓存表同步响应中包含最新的全局缓存表,第二节点获取到最新的全局缓存表之后,确定第4数据块第一节点修改过,于是向第一节点发起数据同步请求。
[0189]步骤418、第二节点向第一节点发送第4数据块的数据同步请求。
[0190]步骤419、第一节点向第二节点返回第4数据块的数据同步响应。
[0191]该第4数据块的数据同步响应中包含第一节点对第4数据块的修改数据,第二节点获取第一节点对第4数据块的修改数据,使得两个节点上的数据同步,并将修改数据存储到第二节点的缓存。
[0192]步骤420、第二节点从第二节点的缓存中读取第4数据块的数据。
[0193]本实施例中,之后第一节点和第二节点还可能对文件I进行写或取,这里不再一一列举,例如第二节点还要读取第2数据块,在读取的时候发现第2数据块是被第二节点在修改过的,所以第二节点的缓存中肯定是最新的数据,从缓存中返回即可。若第二节点读取第5数据块的时候发现第5数据块没有被任何节点修改过,走正常读流程:若缓存中有,从缓存返回,若没有,从磁盘读取。
[0194]需要说明的是,本发明各实施例中,对于读访问是可以并发的,第二节点进行了写访问,其余节点均对其进行读访问,若其余节点访问到了第二节点修改的数据,均从第二节点请求相应的数据。
[0195]本实施例提供的方法,通过在集群中建立文件的全局缓存表,此表随着锁授权迁移到当前要对文件访问的节点上,访问的时候通过查询全局缓存表,以确定访问的数据是否被其他节点修改,并且确定是否需要同步数据,用较少的开销来实现“按需”同步数据,力口入GCT后,不用在每个节点都缓存文件的最新数据,只缓存需要用到的数据,将极大地减少缓存的消耗同时避免频繁读写盘,以达到提升集群文件系统性能。
[0196]本实施例提供的方法,能够避免集群节点间并发交替访问同一文件时频繁的写盘读盘造成的无缓存运行,同时本实施例提供的方法实现了一种“按需”交互数据的方案,节点间的数据交互是根据需要来进行传递的,在绝大部分情况下,节点间仅仅交互全局缓存表就可以了,避免了不必要的数据传输,占用的网络开销少,数据在网络间的传递比一次写盘一读盘效率高很多,同时交互写不同数据的情况下各自缓存都是有效的,后续的读可以直接从缓存中获取,所以不管是交叉修改相同数据还是不同数据,集群文件系统性能相较现有方式都有较大提升。
[0197]为了方便描述,本发明各实施例中仅以两个节点为例进行说明,但本发明可以应用到n个节点的集群中(n>=2),本发明对节点的个数并不做限制,当多个节点同时交替对目标文件进行读和写访问时,本发明各实施例提供的方案仍然适用。
[0198]图7为本发明第一节点的结构示意图,包括:锁申请模块51、缓存表获取模块52、文件修改模块53。
[0199]锁申请模块51,用于当客户端对第一节点上的目标文件进行写访问时,向锁管理装置申请目标文件对应的写锁,写锁中包括对目标文件进行过最新修改的第二节点的信息;
[0200]缓存表获取模块52,用于根据第二节点的信息获取目标文件对应的最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录;
[0201]文件修改模块53,用于根据第二节点对目标文件的最新修改记录对目标文件进行修改,将修改后的数据保存在第一节点的缓存中,并将第一节点对目标文件的修改记录更新到最新全局缓存表。
[0202]锁申请模块51具体用于:向锁管理装置发送目标文件对应的写锁申请请求,以使锁管理装置向第二节点回收写锁;接收锁管理装置发送的写锁授权响应。
[0203]文件修改模块53包括判断单元、数据获取单元和文件修改单元;判断单元,用于根据第二节点对目标文件的最新修改记录确定是否获取第二节点对目标文件的修改数据;若是,则获取单元获取第二节点对目标文件的修改数据,将获取到的目标文件的修改数据存储在第一节点的缓存中,使得第一节点和第二节点上存储的目标文件的数据保持一致,文件修改单元从第一节点的缓存中读取数据,对目标文件进行修改;若否,则文件修改单元从第一节点的缓存中读取数据,对目标文件进行修改。
[0204]本实施例中,目标文件包括至少两个数据块,第二节点对目标文件的最新修改记录中包括:第二节点对目标文件进行过最新修改的数据块的信息;判断单元具体用于:根据第二节点对目标文件进行过最新修改的数据块的信息,确定第一节点对目标文件进行写访问的数据块与第二节点对目标文件进行过最新修改的数据块是否为同一个数据块;若是,则数据获取单元获取第二节点对目标文件的修改数据。
[0205]缓存表获取模块52具体通过以下方式获取最新全局缓存表:向第二节点发送全局缓存表同步请求消息;接收第二节点发送的全局缓存表同步响应消息,全局缓存表同步响应消息中包含最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录。
[0206]数据获取单元具体用于通过以下方式获取修改数据:根据最新全局缓存表中第二节点对目标文件的最新修改记录,向第二节点发送数据同步请求消息;接收第二节点发送的数据同步响应消息,数据同步响应消息中包含第二节点对目标文件的修改数据。
[0207]本实施例提供的第一节点,可用于执行方法实施例一和实施例四的技术方案,具体实现方式和技术效果类似,这里不再赘述。
[0208]图8为本发明第一节点的实施例二的结构示意图,如图8所示,本实施例的第一节点在图7所示第一节点结构的基础上,进一步地还可以包括:文件读取模块54、接收模块55、发送模块56。
[0209]其中,锁申请模块51还用于:当第一节点对目标文件进行读访问时,向锁管理装置申请目标文件对应的读锁,读锁中包含对目标文件进行过最新修改的第一节点的信息;
[0210]文件读取模块54,用于从第一节点的缓存中读取目标文件。
[0211]在文件修改模块53对目标文件进行修改之后,如果接收模块55,接收到第二节点发送的全局缓存表同步请求消息,全局缓存表同步请求消息为第二节点需要对目标文件进行读访问或写访问时向第一节点发送的,则发送模块56,用于根据全局缓存表同步请求消息,向第二节点返回全局缓存表同步响应消息,全局缓存表同步响应消息中包含更新后的最新全局缓存表。
[0212]接收模块55还用于:接收第二节点发送的数据同步请求,数据同步请求消息为第二节点根据更新后的最新全局缓存表中第一节点对目标文件的修改记录发送的;发送模块56还用于:向第二节点发送数据同步响应,数据同步响应中包括第一节点对目标文件的修改数据,以使第二节点将第一节点对目标文件的修改数据保存在第二节点的缓存中,当第二节点对数据进行读访问或写访问时可以从第二节点的缓存中读取目标文件。
[0213]本实施例提供的第一节点,可用于执行方法实施例一和实施例四的技术方案,具体实现方式和技术效果类似,这里不再赘述。
[0214]图9为本发明锁管理装置的实施例一的结构示意图,本实施例的锁管理装置,包括:接收模块61、确定模块62、发送模块63。
[0215]其中,接收模块61,用于接收第一节点发送的目标文件对应的写锁申请请求,写锁申请请求是客户端对目标文件进行写访问时,第一节点向锁管理装置发送的;
[0216]确定模块62,用于确定第二节点申请过目标文件对应的写锁,第二节点对目标文件进行过最新修改;
[0217]发送模块63,用于向第二节点发送目标文件对应的写锁回收命令,向第二节点回收目标文件对应的写锁,锁管理装置在向第二节点回收目标文件对应的写锁时,并不对第二节点的缓存中的目标文件的数据写盘和无效;
[0218]发送模块63还用于:当锁管理装置在向第二节点回收到目标文件对应的写锁后,向第一节点发送写锁授权响应,写锁中包括第二节点的信息。
[0219]接收模块61还用于:接收第一节点发送的目标文件对应的读锁申请请求;确定模块62还用于:确定第一节点申请过目标文件对应的写锁,第一节点对目标文件进行过最新修改;发送模块63还用于:向第一节点发送目标文件对应的写锁回收命令,向第一节点回收目标文件对应的写锁,锁管理装置在向第一节点回收目标文件对应的写锁时,并不对第一节点的缓存中的目标文件的数据写盘和无效;发送模块63还用于:向第一节点发送读锁授权响应,读锁中包括第一节点的信息,以使第一节点从第一节点的缓存中读取目标文件。
[0220]本实施例中,接收模块61还用于:接收第二节点发送的目标文件对应的读锁或写锁申请请求;确定模块62还用于:确定第一节点申请过目标文件对应的写锁,第一节点对目标文件进行过最新修改;发送模块63还用于:向第一节点发送目标文件对应的写锁回收命令,向第一节点回收目标文件对应的写锁,锁管理装置在向第一节点回收目标文件对应的写锁时,并不对第一节点的缓存中的目标文件的数据写盘和无效;发送模块63还用于:向第二节点发送读锁或写锁授权响应,读锁或写锁中包括第一节点的信息,以使第二节点根据第一节点的信息获取最新全局缓存表。
[0221]本实施例提供的锁管理装置,可用于执行方法实施例二提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。
[0222]图10为本发明第二节点实施例一的结构示意图,本实施例提供的第二节点包括:接收模块71、发送模块72。
[0223]其中,接收模块71,用于接收第一节点发送的全局缓存表同步请求消息;
[0224]发送模块72,用于根据全局缓存表同步请求消息,向第一节点返回全局缓存表同步响应消息,全局缓存表同步响应消息中包含最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录。
[0225]接收模块71还用于:接收第一节点发送的数据同步请求消息,数据同步请求消息为第一节点根据最新全局缓存表中第二节点对目标文件的最新修改记录发送的;发送模块72还用于:根据数据同步请求消息,向第一节点返回数据同步响应消息,数据同步响应消息中包含第二节点对目标文件的修改数据。[0226]本实施例提供的第二节点,可用于执行方法实施例三提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。
[0227]图11为本发明第一节点实施例三的结构示意图,如图11所示,本实施例的第一节点800包括:处理器81、存储器82、发射器83和接收器84,存储器82、发射器83和接收器84和处理器81通过总线连接,存储器82存储执行指令,当第一节点800运行时,处理器81与存储器82之间通信,处理器81执行指令使得第一节点800执行本发明提供的分布式集群文件系统的缓存同步方法,处理器81具体用于执行以下操作:
[0228]当客户端对第一节点上的目标文件进行写访问时,向锁管理装置申请目标文件对应的写锁,写锁中包括对目标文件进行过最新修改的第二节点的信息;
[0229]根据第二节点的信息获取目标文件对应的最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录;
[0230]根据第二节点对目标文件的最新修改记录对目标文件进行修改,将修改后的数据保存在第一节点的缓存中,并将第一节点对目标文件的修改记录更新到最新全局缓存表。
[0231]处理器81向锁管理装置申请目标文件对应的写锁,具体为:处理器81通过发射器83向锁管理装置发送目标文件对应的写锁申请请求,以使锁管理装置向第二节点回收写锁,并通过接收器84接收锁管理装置发送的写锁授权响应。
[0232]处理器81根据第二节点对目标文件的最新修改记录对目标文件进行修改,具体为:根据第二节点对目标文件的最新修改记录确定是否获取第二节点对目标文件的修改数据;若是,则获取第二节点对目标文件的修改数据,将获取到的目标文件的修改数据存储在第一节点的缓存中,使得第一节点和第二节点上存储的目标文件的数据保持一致,从第一节点的缓存中读取数据,对目标文件进行修改;若否,则从第一节点的缓存中读取数据,对目标文件进行修改。
[0233]本发明一种可能的实现方式中,目标文件包括至少两个数据块,第二节点对目标文件的最新修改记录中包括:第二节点对目标文件进行过最新修改的数据块的信息;
[0234]处理器81根据第二节点对目标文件的最新修改记录确定是否获取第二节点对目标文件的修改数据,具体为:根据第二节点对目标文件进行过最新修改的数据块的信息,确定第一节点对目标文件进行写访问的数据块与第二节点对目标文件进行过最新修改的数据块是否为同一个数据块;若是,则获取第二节点对目标文件的修改数据。
[0235]第一节点根据第二节点的信息获取最新全局缓存表,具体为:
[0236]发射器83向第二节点发送全局缓存表同步请求消息,然后,接收器84接收第二节点发送的全局缓存表同步响应消息,全局缓存表同步响应消息中包含最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录。
[0237]处理器81根据第二节点对目标文件的最新修改记录获取第二节点对目标文件的修改数据,具体为:
[0238]处理器81根据最新全局缓存表中第二节点对目标文件的最新修改记录,通过发射器83向第二节点发送数据同步请求消息;然后,接收器84接收第二节点发送的数据同步响应消息,数据同步响应消息中包含第二节点对目标文件的修改数据。
[0239]本实施例中,当第一节点对目标文件进行写操作,将修改后的数据保存在第一节点的缓存中,并将第一节点对目标文件的修改记录更新到最新全局缓存表之后,处理器81还用于:当第一节点对目标文件进行读访问时,向锁管理装置申请目标文件对应的读锁,读锁中包含对目标文件进行过最新修改的第一节点的信息,在得到写锁授权后,从第一节点的缓存中读取目标文件。
[0240]本实施例中,第一节点目标文件进行写操作,将修改后的数据保存在第一节点的缓存中,并将第一节点对目标文件的修改记录更新到最新全局缓存表之后,处理器81还用于:
[0241]通过接收器84接收第二节点发送的全局缓存表同步请求消息,全局缓存表同步请求消息为第二节点需要对目标文件进行读访问或写访问时向第一节点发送的,然后,处理器81根据全局缓存表同步请求消息,通过发射器83向第二节点返回全局缓存表同步响应消息,全局缓存表同步响应消息中包含更新后的最新全局缓存表。
[0242]本实施例中,第一节点根据全局缓存表同步请求消息,向第二节点或第三节点返回全局缓存表同步响应消息之后,还包括:
[0243]接收器84接收第二节点发送的数据同步请求,数据同步请求消息为第二节点根据更新后的最新全局缓存表中第一节点对目标文件的修改记录发送的;发射器83向第二节点发送数据同步响应,数据同步响应中包括第一节点对目标文件的修改数据,以使第二节点将第一节点对目标文件的修改数据保存在第二节点的缓存中,当第二节点对数据进行读访问或写访问时可以从第二节点的缓存中读取目标文件。
[0244]本实施例提供的第一节点,可用于执行方法实施例一和实施例四提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。
[0245]图12为本发明锁管理装置实施例二的结构示意图,如图12所示,本实施例的锁管理装置900包括:处理器91、存储器92、发射器93和接收器94,存储器92、发射器93和接收器94和处理器91通过总线连接,存储器92存储执行指令,当锁管理装置900运行时,处理器91与存储器92之间通信,处理器91执行指令。
[0246]其中,接收器94,用于接收第一节点发送的目标文件对应的写锁申请请求,写锁申请请求是客户端对目标文件进行写访问时,第一节点向锁管理装置发送的;
[0247]处理器91,用于确定第二节点申请过目标文件对应的写锁,对目标文件进行过最新修改,则锁管理装置向第二节点发送目标文件对应的写锁回收命令,向第二节点回收目标文件对应的写锁,锁管理装置在向第二节点回收目标文件对应的写锁时,并不对第二节点的缓存中的目标文件的数据写盘和无效;
[0248]发射器93,用于向第一节点发送写锁授权响应,写锁中包括第二节点的信息。
[0249]发射器93向第一节点发送写锁授权响应之后,接收器94还用于接收第一节点发送的目标文件对应的读锁申请请求;处理器91还用于确定第一节点申请过目标文件对应的写锁,对目标文件进行过最新修改,则锁管理装置向第一节点发送目标文件对应的写锁回收命令,向第一节点回收目标文件对应的写锁,锁管理装置在向第一节点回收目标文件对应的写锁时,并不对第一节点的缓存中的目标文件的数据写盘和无效;发射器93锁管理装置向第一节点发送读锁授权响应,读锁中包括第一节点的信息,以使第一节点从第一节点的缓存中读取目标文件。
[0250]本实施例提供的锁管理装置,可用于执行方法实施例二提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。[0251]图13为本发明第二节点实施例二的结构示意图,如图13所示,本实施例的第二节点100包括:处理器11、存储器12、发射器13和接收器14,存储器12、发射器13和接收器14和处理器11通过总线连接,存储器12存储执行指令,当第二节点100运行时,处理器11与存储器12之间通信,处理器11执行指令。
[0252]本实施中,接收器14,用于接收第一节点发送的全局缓存表同步请求消息;
[0253]处理器11,用于根据全局缓存表同步请求消息,通过发射器13向第一节点返回全局缓存表同步响应消息,全局缓存表同步响应消息中包含最新全局缓存表,最新全局缓存表中保存有第二节点对目标文件的最新修改记录。
[0254]在发射器13向第一节点返回全局缓存表同步响应消息之后,接收器14还用于:接收第一节点发送的数据同步请求消息,数据同步请求消息为第一节点根据最新全局缓存表中第二节点对目标文件的最新修改记录发送的;处理器11根据第二节点根据数据同步请求消息,通过发射器13向第一节点返回数据同步响应消息,数据同步响应消息中包含第二节点对目标文件的修改数据。
[0255]本实施例提供的第二节点,可用于执行方法实施例三提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。
[0256]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0257]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【权利要求】
1.一种分布式集群文件系统的缓存同步方法,其特征在于,包括: 当客户端对第一节点上的目标文件进行写访问时,所述第一节点向锁管理装置申请所述目标文件对应的写锁,所述写锁中包括对所述目标文件进行过最新修改的第二节点的信息; 所述第一节点根据所述第二节点的信息获取所述目标文件对应的最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录; 所述第一节点根据所述第二节点对所述目标文件的最新修改记录对所述目标文件进行修改,将修改后的数据保存在所述第一节点的缓存中,并将所述第一节点对所述目标文件的修改记录更新到所述最新全局缓存表。
2.根据权利要求1所述的方法,其特征在于,所述第一节点根据所述第二节点对所述目标文件的最新修改记录对所述目标文件进行修改,包括: 所述第一节点根据所述第二节点对所述目标文件的最新修改记录确定是否获取所述第二节点对所述目标文件的修改数据; 若是,则所述第一节点获取所述第二节点对所述目标文件的修改数据,将获取到的所述目标文件的修改数据存储在所述第一节点的缓存中,使得所述第一节点和所述第二节点上存储的所述目标文件的数据保持一致,从所述第一节点的缓存中读取所述数据,对所述目标文件进行修改; 若否,则所述第一节点从所述第一节点的缓存中读取数据,对所述目标文件进行修改。
3.根据权利要求2所述的方法,其特征在于,所述目标文件包括至少两个数据块,所述第二节点对所述目标文件的最新修改记录中包括:所述第二节点对所述目标文件进行过最新修改的数据块的信息; 所述第一节点根据所述第二节点对所述目标文件的最新修改记录确定是否获取所述第二节点对所述目标文件的修改数据,包括: 所述第一节点根据所述第二节点对所述目标文件进行过最新修改的数据块的信息,确定所述第一节点对所述目标文件进行写访问的数据块与所述第二节点对所述目标文件进行过最新修改的数据块是否为同一个数据块; 若是,则所述第一节点获取所述第二节点对所述目标文件的修改数据。
4.根据权利要求1所述的方法,其特征在于,所述第一节点根据所述第二节点的信息获取最新全局缓存表,包括: 所述第一节点向所述第二节点发送全局缓存表同步请求消息; 所述第一节点接收所述第二节点发送的全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录。
5.根据权利要求3所述的方法,其特征在于,所述第一节点根据所述第二节点对所述目标文件的最新修改记录获取所述第二节点对所述目标文件的修改数据,包括: 所述第一节点根据所述最新全局缓存表中所述第二节点对所述目标文件的最新修改记录,向所述第二节点发送数据同步请求消息; 所述第一节点接收所述第二节点发送的数据同步响应消息,所述数据同步响应消息中包含所述第二节点对所述目标文件的修改数据。
6.根据权利要求1所述的方法,其特征在于,所述第一节点对所述目标文件进行写操作,将修改后的数据保存在所述第一节点的缓存中,并将所述第一节点对所述目标文件的修改记录更新到所述最新全局缓存表之后,还包括: 当所述第一节点对所述目标文件进行读访问时,向所述锁管理装置申请所述目标文件对应的读锁,所述读锁中包含对所述目标文件进行过最新修改的所述第一节点的信息; 所述第一节点从所述第一节点的缓存中读取所述目标文件。
7.根据权利要求1所述的方法,其特征在于,所述第一节点所述目标文件进行写操作,将修改后的数据保存在所述第一节点的缓存中,并将所述第一节点对所述目标文件的修改记录更新到所述最新全局缓存表之后,还包括: 所述第一节点接收所述第二节点发送的全局缓存表同步请求消息,所述全局缓存表同步请求消息为所述第二节点需要对所述目标文件进行读访问或写访问时向所述第一节点发送的; 所述第一节点根据所述全局缓存表同步请求消息,向所述第二节点返回全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述更新后的最新全局缓存表。
8.根据权利要求7所述的方法,其特征在于,所述第一节点根据所述全局缓存表同步请求消息,向所述第二节点或所述第三节点返回全局缓存表同步响应消息之后,还包括: 所述第一节点接收所述第二节点发送的数据同步请求,所述数据同步请求消息为所述第二节点根据所述更新后的最新全局缓存表中所述第一节点对所述目标文件的修改记录发送的; 所述第一节点向所述第二节点发送数据同步响应,所述数据同步响应中包括所述第一节点对所述目标文件的修改数据,以使所述第二节点将所述第一节点对所述目标文件的修改数据保存在所述第二节点的缓存中,`当所述第二节点对所述数据进行读访问或写访问时可以从所述第二节点的缓存中读取所述目标文件。
9.根据权利要求1所述的方法,其特征在于,所述第一节点向锁管理装置申请所述目标文件对应的与锁,包括: 所述第一节点向所述锁管理装置发送所述目标文件对应的写锁申请请求,以使所述锁管理装置向所述第二节点回收所述写锁; 所述第一节点接收所述锁管理装置发送的写锁授权响应。
10.一种分布式集群目标文件系统的缓存同步方法,其特征在于,包括: 锁管理装置接收所述第一节点发送的目标文件对应的写锁申请请求,所述写锁申请请求是客户端对所述目标文件进行写访问时,所述第一节点向所述锁管理装置发送的; 所述锁管理装置确定第二节点申请过所述目标文件对应的写锁,对所述目标文件进行过最新修改,则所述锁管理装置向所述第二节点发送所述目标文件对应的写锁回收命令,向所述第二节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第二节点回收所述目标文件对应的写锁时,并不对所述第二节点的缓存中的所述目标文件的数据写盘和无效; 所述锁管理装置向所述第一节点发送写锁授权响应,所述写锁中包括所述第二节点的信息。
11.根据权利要求10所述的方法,其特征在于,所述锁管理装置向所述第一节点发送写锁授权响应,所述写锁中包括所述第二节点的信息之后,还包括: 所述锁管理装置接收所述第一节点发送的所述目标文件对应的读锁申请请求; 所述锁管理装置确定所述第一节点申请过所述目标文件对应的写锁,对所述目标文件进行过最新修改,则所述锁管理装置向所述第一节点发送所述目标文件对应的写锁回收命令,向所述第一节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第一节点回收所述目标文件对应的写锁时,并不对所述第一节点的缓存中的所述目标文件的数据写盘和无效; 所述锁管理装置向所述第一节点发送读锁授权响应,所述读锁中包括所述第一节点的信息,以使所述第一节点从所述第一节点的缓存中读取所述目标文件。
12.根据权利要求10所述的方法,其特征在于,所述锁管理装置向所述第一节点发送写锁授权响应,所述写锁中包括所述第二节点的信息之后,还包括: 所述锁管理装置接收所述第二节点发送的所述目标文件对应的读锁或写锁申请请求; 所述锁管理装置确定所述第一节点申请过所述目标文件对应的写锁,对所述目标文件进行过最新修改,则所述锁管理装置向所述第一节点发送所述目标文件对应的写锁回收命令,向所述第一节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第一节点回收所述目标文件对应的写锁时,并不对所述第一节点的缓存中的所述目标文件的数据写盘和无效; 所述锁管理装置向所述第二节点发送读锁或写锁授权响应,所述读锁或写锁中包括所述第一节点的信息,以使所述第二节点根据所述第一节点的信息获取最新全局缓存表。`
13.—种分布式集群目标文件系统的缓存同步方法,其特征在于,包括: 所述第二节点接收所述第一节点发送的全局缓存表同步请求消息; 所述第二节点根据所述全局缓存表同步请求消息,向所述第一节点返回全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录。
14.根据权利要求13所述的方法,其特征在于,所述第二节点根据所述全局缓存表同步请求消息,向所述第一节点返回全局缓存表同步响应消息之后,还包括: 所述第二节点接收所述第一节点发送的数据同步请求消息,所述数据同步请求消息为所述第一节点根据所述最新全局缓存表中所述第二节点对所述目标文件的最新修改记录发送的; 所述第二节点根据所述数据同步请求消息,向所述第一节点返回数据同步响应消息,所述数据同步响应消息中包含所述第二节点对所述目标文件的修改数据。
15.一种节点,所述节点为第一节点,其特征在于,包括: 锁申请模块,用于当客户端对第一节点上的目标文件进行写访问时,向锁管理装置申请所述目标文件对应的写锁,所述写锁中包括对所述目标文件进行过最新修改的第二节点的信息; 缓存表获取模块,用于根据所述第二节点的信息获取所述目标文件对应的最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录; 文件修改模块,用于根据所述第二节点对所述目标文件的最新修改记录对所述目标文件进行修改,将修改后的数据保存在所述第一节点的缓存中,并将所述第一节点对所述目标文件的修改记录更新到所述最新全局缓存表。
16.根据权利要求15所述的节点,其特征在于,所述文件修改模块包括判断单元、数据获取单元和文件修改单元; 所述判断单元,用于根据所述第二节点对所述目标文件的最新修改记录确定是否获取所述第二节点对所述目标文件的修改数据; 若是,则所述获取单元获取所述第二节点对所述目标文件的修改数据,将获取到的所述目标文件的修改数据存储在所述第一节点的缓存中,使得所述第一节点和所述第二节点上存储的所述目标文件的数据保持一致,所述文件修改单元从所述第一节点的缓存中读取所述数据,对所述目标文件进行修改; 若否,则所述文件修改单元从所述第一节点的缓存中读取数据,对所述目标文件进行修改。
17.根据权利要求16所述的节点,其特征在于,所述目标文件包括至少两个数据块,所述第二节点对所述目标文件的最新修改记录中包括:所述第二节点对所述目标文件进行过最新修改的数据块的信息; 所述判断单元具体用于: 根据所述第二节点对所述目标文件进行过最新修改的数据块的信息,确定所述第一节点对所述目标文件进行写访问的数据块与所述第二节点对所述目标文件进行过最新修改的数据块是否为同一个数据块; 若是,则所述数据获取单元获取所述第二节点对所述目标文件的修改数据。
18.根据权利要求15所述的节点,其特征在于,所述缓存表获取模块具体用于: 向所述第二节点发送全局缓存表同步请求消息; 接收所述第二节点发送的全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录。
19.根据权利要求17所述的节点,其特征在于,所述数据获取单元具体用于: 根据所述最新全局缓存表中所述第二节点对所述目标文件的最新修改记录,向所述第二节点发送数据同步请求消息; 接收所述第二节点发送的数据同步响应消息,所述数据同步响应消息中包含所述第二节点对所述目标文件的修改数据。
20.根据权利要求15所述的节点,其特征在于,还包括:文件读取模块; 所述锁申请模块还用于:当所述第一节点对所述目标文件进行读访问时,向所述锁管理装置申请所述目标文件对应的读锁,所述读锁中包含对所述目标文件进行过最新修改的所述第一节点的信息; 所述文件读取模块,用于从所述第一节点的缓存中读取所述目标文件。
21.根据权利要求15所述的节点,其特征在于,还包括: 接收模块,用于接收所述第二节点发送的全局缓存表同步请求消息,所述全局缓存表同步请求消息为所述第二节点需要对所述目标文件进行读访问或写访问时向所述第一节点发送的;发送模块,用于根据所述全局缓存表同步请求消息,向所述第二节点返回全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述更新后的最新全局缓存表。
22.根据权利要求21所述的节点,其特征在于,所述接收模块还用于: 接收所述第二节点发送的数据同步请求,所述数据同步请求消息为所述第二节点根据所述更新后的最新全局缓存表中所述第一节点对所述目标文件的修改记录发送的; 所述发送模块还用于:向所述第二节点发送数据同步响应,所述数据同步响应中包括所述第一节点对所述目标文件的修改数据,以使所述第二节点将所述第一节点对所述目标文件的修改数据保存在所述第二节点的缓存中,当所述第二节点对所述数据进行读访问或写访问时可以从所述第二节点的缓存中读取所述目标文件。
23.根据权利要求15所述的节点,其特征在于,所述锁申请模块具体用于: 向所述锁管理装置发送所述目标文件对应的写锁申请请求,以使所述锁管理装置向所述第二节点回收所述写锁; 接收所述锁管理装置发送的写锁授权响应。
24.一种锁管理装置,其特征在于,包括: 接收模块,用于接收所述第一节点发送的目标文件对应的写锁申请请求,所述写锁申请请求是客户端对所述目标文件进行写访问时,所述第一节点向所述锁管理装置发送的;确定模块,用于确定第二节点申请过所述目标文件对应的写锁,所述第二节点对所述目标文件进行过最新修改; 发送模块,用于向所述第二节点发送所述目标文件对应的写锁回收命令,向所述第二节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第二节点回收所述目标文件对应的写锁时,并不对所述第二节点的缓存中的所述目标文件的数据写盘和无效; 所述发送模块还用于:向所述第一节点发送写锁授权响应,所述写锁中包括所述第二节点的信息。
25.根据权利要求24所述的锁管理装置,其特征在于,所述接收模块还用于: 接收所述第一节点发送的所述目标文件对应的读锁申请请求; 所述确定模块还用于:确定所述第一节点申请过所述目标文件对应的写锁,所述第一节点对所述目标文件进行过最新修改;所述发送模块还用于:向所述第一节点发送所述目标文件对应的写锁回收命令,向所述第一节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第一节点回收所述目标文件对应的写锁时,并不对所述第一节点的缓存中的所述目标文件的数据写盘和无效;所述发送模块还用于:向所述第一节点发送读锁授权响应,所述读锁中包括所述第一节点的信息,以使所述第一节点从所述第一节点的缓存中读取所述目标文件。
26.根据权利要求24所述的锁管理装置,其特征在于,所述接收模块还用于: 接收所述第二节点发送的所述目标文件对应的读锁或写锁申请请求; 所述确定模块还用于:确定所述第一节点申请过所述目标文件对应的写锁,所述第一节点对所述目标文件进行过最新修改; 所述发送模块还用于:向所述第一节点发送所述目标文件对应的写锁回收命令,向所述第一节点回收所述目标文件对应的写锁,所述锁管理装置在向所述第一节点回收所述目标文件对应的写锁时,并不对所述第一节点的缓存中的所述目标文件的数据写盘和无效;所述发送模块还用于:向所述第二节点发送读锁或写锁授权响应,所述读锁或写锁中包括所述第一节点的信息,以使所述第二节点根据所述第一节点的信息获取最新全局缓存表。
27.一种节点,所述节点为第二节点,其特征在于,包括: 接收模块,用于接收所述第一节点发送的全局缓存表同步请求消息; 发送模块,用于根据所述全局缓存表同步请求消息,向所述第一节点返回全局缓存表同步响应消息,所述全局缓存表同步响应消息中包含所述最新全局缓存表,所述最新全局缓存表中保存有所述第二节点对所述目标文件的最新修改记录。
28.根据权利要求27所述的节点,其特征在于,所述接收模块还用于: 接收所述第一节点发送的数据同步请求消息,所述数据同步请求消息为所述第一节点根据所述最新全局缓存表中所述第二节点对所述目标文件的最新修改记录发送的; 所述发送模块还用于:根据所述数据同步请求消息,向所述第一节点返回数据同步响应消息,所述数据同步响应消息中包含`所述第二节点对所述目标文件的修改数据。
【文档编号】G06F17/30GK103559319SQ201310596276
【公开日】2014年2月5日 申请日期:2013年11月21日 优先权日:2013年11月21日
【发明者】曾红丽 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1