具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种分布式系统中数据副本的恢复方法、装置和系统。以下分别进行详细说明。
实施例一、
本实施例将从MDS的角度进行描述。
一种分布式系统中数据副本的恢复方法,包括:检测到数据所在的第一DS不可访问时,确定在预置的时间内第一DS是否恢复正常,若是,则将数据副本恢复到第一DS上,若否,则分配新的DS,即第二DS,将数据副本全拷贝到第二DS上,并更新自身的数据分布信息。需说明的是,为了描述方便,在本发明实施例中,假设原DS为第一DS,新分配的DS为第二DS。如图1所示,具体流程可以如下:
101、检测到数据所在的第一DS不可访问时,比如网络故障或第一DS故障等情况所导致的第一DS不可访问时,确定在预置的时间内第一DS是否恢复正常;若是,则执行步骤102;若否,则执行步骤103;
其中,预置的时间可以通过设定定时器来进行预置,例如,在检测到第一DS不可访问时则立即启动定时器,如果在时间到达之前,如果第一DS可以恢复正常,则执行步骤102,否则,如果在时间到达之后,第一DS还不可访问,则执行步骤103;
102、将数据副本恢复到第一DS上;
具体可以从数据分布信息中指示出的正常DS上将数据副本恢复到第一DS上;例如,可以通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本恢复到第一DS上;其中,本发明实施例所说的正常的DS指的是可以访问且可以提供正常和正确的业务服务的DS。
或者,也可以根据数据分布信息中指示出的正常DS的日志将数据副本恢复到第一DS上;例如,可以通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本恢复到第一DS上;当然,实现时需要一个前提,即:每一个DS都需要在本地记录数据操作的日志。
需说明的是,虽然这里所说的恢复也是一种拷贝操作,但是该拷贝操作有别于步骤103中所说的全拷贝,这里的拷贝只是一种更新,比如,假设在第一DS不可访问直至恢复正常的该段时间内,元数据服务器上有新的数据写入,则在第一DS恢复正常后,只需将该新写入的数据副本写入第一DS即可。
103、分配新的DS,即第二DS,将数据副本全拷贝到第二DS上,并更新自身的(MDS)数据分布信息。
例如,可以从数据分布信息中指示出的正常DS上将数据副本全拷贝到第二DS上,即通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本全拷贝至第二DS。
另外,需说明的是,若检测到数据异常但数据所在的第一DS尚可访问时,则可以采用如下方法:
方法一:分配第二DS,将数据副本全拷贝到第二DS上,并更新自身的(MDS)数据分布信息;其中,将数据副本全拷贝到第二DS上的具体实施可参见步骤103;
或者,
方法二:判断第一DS上是否存在空闲空间,若是,则将第一DS上的数据副本全拷贝到该空闲空间上,并更新自身的(MDS)数据分布信息,若否,则分配新的DS,即第二DS,然后将数据副本全拷贝到第二DS上,并更新自身的(MDS)数据分布信息;其中,将数据副本全拷贝到第二DS上的具体实施可参见步骤103。
由上可知,本发明实施例采用在检测到数据所在的第一DS不可访问时,不立即启动全拷贝以恢复数据副本,而是等待一段预置的时间,如果在该预置的时间内,第一DS恢复了正常,则直接将数据副本恢复到第一DS上,否则,如果第一DS不能恢复正常,才分配新的DS,即第二DS,然后启动全拷贝以将数据副本全拷贝到第二DS上,这样,可以避免某些短时间内可恢复的偶然故障因素所引起的全拷贝对系统性能所造成的不必要影响,从而提高了分布式系统的可靠性,例如,在网络闪断或者DS掉电重启等情况下,由于该故障可以在短时间内恢复正常,所以系统并不会因此而启动全拷贝以恢复数据副本,而是在系统恢复正常后,直接在本地的恢复数据副本。
实施例二、
根据实施例所描述的方法,下面将举例作详细说明。
导致系统内数据不可用的情况有多种,主要分为数据自身问题导致不可用的情况和非数据自身问题导致不可用的情况;在前一种情况下,数据所在设备,即数据所在的第一DS仍可访问,而在后一种情况下,数据所在设备,即数据所在的第一DS不可访问。以下将分别进行说明。
(1)数据自身问题导致不可用,此时数据所在的第一DS仍可访问。
当系统检测到数据所在的数据服务器仍可访问时,可以采用两种方案以进行数据副本的恢复。
方法一,如下:
系统分配新的DS,即第二DS,并且立即将数据副本拷贝恢复到该第二DS上,并且在MDS上更新数据的分布信息。
例如,MDS可以从数据分布信息中指示出的正常DS上将数据副本全拷贝到第二DS上,即通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本全拷贝至第二DS。
或者,也可以采用方法二,如下:
系统判断第一DS上是否存在空闲空间,若是,则将第一DS上的数据副本全拷贝到该空闲空间上,并更新MDS上的数据分布信息,若否,则分配新的DS,即第二DS,然后将数据副本全拷贝到第二DS上,并更新MDS上的数据分布信息;
例如,MDS可以从数据分布信息中指示出的正常DS上将数据副本全拷贝到第二DS上,即通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本全拷贝至第二DS。
(2)非数据自身问题导致不可用,此时数据所在的第一DS不可访问。
当系统检测到数据所在的数据服务器不可访问时,可采取两种方案以进行数据副本的恢复。
方法一,如下:
系统分配新的DS,即第二DS,然后立即将数据副本全拷贝到第二DS上,并在MDS上更新的数据分布信息;
例如,MDS可以从数据分布信息中指示出的正常DS上将数据副本全拷贝到第二DS上,即通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本全拷贝至第二DS。
或者,可以采用方法二,如下:
设定定时器,等待无法访问(即退出服务)的第一DS恢复正常,若在定时器超时之前第一DS恢复正常,数据副本从正常的DS拷贝恢复到该第一DS;否则,若在定时器超时时第一DS还没有恢复正常,则系统分配新的DS,即第二DS,将数据副本全拷贝到第二DS上,并更新自身的(MDS)数据分布信息。
例如,MDS可以在检测到第一DS无法访问时,启动定时器,若在定时器超时之前第一DS恢复正常,则MDS可以通过查找自身的(MDS)数据分布信息,以获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本恢复到第一DS上;否则,若在定时器超时之前第一DS不能恢复正常,则MDS分配第二DS,并通过查找自身的(MDS)数据分布信息,以获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,将该选择的DS中保存的数据副本全拷贝至第二DS。
由上可知,本发明实施例采用在检测到数据所在的第一DS不可访问时,不立即启动全拷贝以恢复数据副本,而是等待一段预置的时间,如果在该预置的时间内,第一DS恢复了正常,则直接将数据副本恢复到第一DS上,否则,如果第一DS不能恢复正常,才分配新的DS,即第二DS,然后启动全拷贝以将数据副本全拷贝到第二DS上,这样,可以避免某些短时间内可恢复的偶然故障因素所引起的全拷贝对系统性能所造成的不必要影响,从而提高了分布式系统的可靠性。其中,数据副本的恢复还可以通过多种方式来实现,可供用户根据自身的策略需求灵活选择。
实施例三、
与实施例二不同的是,本实施例需要利用日志来配合完成数据副本的恢复操作,因此,该实施例的实施前提是:每一个DS都需要在本地记录数据操作日志。以下将举例作详细说明。
导致系统内数据不可用的情况有多种,主要分为数据自身问题导致不可用的情况和非数据自身问题导致不可用的情况;在前一种情况下,数据所在设备,即数据所在的第一DS仍可访问,而在后一种情况下,数据所在设备,即数据所在的第一DS不可访问。以下将分别进行说明。
(1)数据自身问题导致不可用,此时数据所在的第一DS仍可访问。
当系统检测到数据所在的数据服务器仍可访问时,可以采用两种方案以进行数据副本的恢复。
方法一,如下:
系统分配新的DS,即第二DS,并且立即将数据副本拷贝恢复到该第二DS上,并且在MDS上更新数据的分布信息。
例如,MDS可以从数据分布信息中指示出的正常DS上将数据副本全拷贝到第二DS上,即通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本全拷贝至第二DS。
或者,也刻意采用方法二,如下:
系统判断第一DS上是否存在空闲空间,若是,则将第一DS上的数据副本全拷贝到该空闲空间上,并更新MDS上的数据分布信息,若否,则分配新的DS,即第二DS,然后将数据副本全拷贝到第二DS上,并更新MDS上的数据分布信息;
例如,MDS可以从数据分布信息中指示出的正常DS上将数据副本全拷贝到第二DS上,即通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本全拷贝至第二DS。
(2)非数据自身问题导致不可用,此时数据所在的第一DS不可访问。
当系统检测到数据副本所在的数据服务器不可访问时,可采取如下方案以进行数据副本的恢复。
设定定时器,等待无法访问(即退出服务)的第一DS恢复正常,若在定时器超时之前第一DS恢复正常,数据副本从正常的DS拷贝恢复到该第一DS;否则,若在定时器超时时第一DS还没有恢复正常,则系统分配新的DS,即第二DS,将数据副本全拷贝到第二DS上,并更新自身的(MDS)数据分布信息。
例如,MDS可以在检测到第一DS无法访问时,启动定时器,若在定时器超时之前第一DS恢复正常,则MDS可以通过查找自身的(MDS)数据分布信息,以获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并根据该选择的DS的日志将该选择的DS中保存的数据副本恢复到第一DS上;否则,若在定时器超时之前第一DS不能恢复正常,则MDS分配第二DS,并通过查找自身的(MDS)数据分布信息,以获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,将该选择的DS中保存的数据副本全拷贝至第二DS。
元数据服务器设置定时器等待退出服务的数据服务器恢复正常,若在定时器超时前数据服务器恢复正常,系统将根据数据布局信息中正常的数据服务器的日志将数据恢复到故障数据服务器;
若定时器超时,系统分配新的数据服务器,并且从正常的数据服务器直接拷贝恢复到该数据服务器,在元数据服务器上更新数据的分布信息。
由上可知,本发明实施例采用在检测到数据所在的第一DS不可访问时,不立即启动全拷贝以恢复数据副本,而是等待一段预置的时间,如果在该预置的时间内,第一DS恢复了正常,则直接将数据副本恢复到第一DS上,否则,如果第一DS不能恢复正常,才分配新的DS,即第二DS,然后启动全拷贝以将数据副本全拷贝到第二DS上,这样,可以避免某些短时间内可恢复的偶然故障因素所引起的全拷贝对系统性能所造成的不必要影响,从而提高了分布式系统的可靠性,而且,由于采用了日志来配合完成数据副本的恢复操作,因此相对于实施例二所提供的技术方案而言,本实施例所提供的方案还可以减少恢复数据的数量以及减少恢复数据副本的操作。
实施例四、
本实施例将从MDS的角度进行描述。
基于同一个构思,本发明实施例还提供另一种分布式系统中数据副本的恢复方法,包括:检测到数据所在的第一DS不可访问时,分配第二DS,并更新自身的(MDS)数据分布信息;在第二DS上分配一个与第一数据单元相同属性的第二数据单元,当客户端在正常DS上写入新的数据并更新数据位图(bitmap)时,将所述新的数据写入第二数据单元并更新第二数据单元的数据位图;确定在预置的时间内第一DS是否恢复正常,若是,则根据第二数据单元的数据位图将新的数据,即增量数据推送恢复到第一数据单元上;若否,则根据第二数据单元的数据位图从数据分布信息中指示出的正常DS上获取剩余的数据,并将该获取到的剩余的数据恢复到第二数据单元上。
如图2所示,具体流程可以如下:
201、检测到数据所在的第一DS不可访问时,比如网络故障或第一DS故障等情况所导致的第一DS不可访问时,分配分配一个新的DS,即第二DS,并更新自身的(MDS)数据分布信息;
202、在第二DS上分配一个与第一数据单元相同属性的第二数据单元,其中,第一数据单元为第一DS的正常数据单元;
需说明的是,为了描述方便,在本发明实施例中,将正常数据单元称为第一数据单元,将在第二DS上分配的新的数据单元称为第二数据单元。所谓正常数据单元,指的是可以满足业务需求,且能保证数据一致性的数据单元。
203、当客户端在正常DS上写入新的数据并更新数据位图时,将这些新的数据写入第二数据单元,并更新第二数据单元的数据位图;
204、确定在预置的时间内第一DS是否恢复正常,若是,则执行步骤205;若否,则执行步骤206;
其中,预置的时间可以通过设定定时器来进行预置,例如,在检测到第一DS不可访问时则立即启动定时器,如果在时间到达之前,如果第一DS可以恢复正常,则执行步骤205,否则,如果在时间到达之后,第一DS还不可访问,则执行步骤206;
205、根据第二数据单元的数据位图将新的数据,即增量数据推送(PUSH)恢复到第一数据单元上;
206、根据第二数据单元的数据位图从数据分布信息中指示出的正常DS上获取剩余的数据,并将该获取到的剩余的数据恢复到第二数据单元上,例如,可以通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,从该选择的DS中获取剩余的数据,将该获取到的剩余的数据恢复到第二数据单元上。
其中,本发明实施例中所说的新的数据(即增量数据)指的是在检测到第一DS不可访问时到第一DS恢复正常的这段时间内,客户端所更新的数据,即客户端写入第二数据单元的数据;而剩余的数据指的是在检测到第一DS不可访问之前,客户端写入其他正常DS的数据。
另外,需说明的是,若检测到数据异常但数据所在的第一DS尚可访问时,则可以采用如下方法:
方法一:分配第二DS,将数据副本全拷贝到第二DS上,并更新自身的(MDS)数据分布信息;其中,将数据副本全拷贝到第二DS上的具体实施可参见步骤103;
或者,
方法二:判断第一DS上是否存在空闲空间,若是,则将第一DS上的数据副本全拷贝到该空闲空间上,并更新自身的(MDS)数据分布信息,若否,则分配新的DS,即第二DS,然后将数据副本全拷贝到第二DS上,并更新自身的(MDS)数据分布信息;其中,将数据副本全拷贝到第二DS上的具体实施可参见步骤103。
由上可知,本发明实施例采用在检测到数据所在的第一DS不可访问时,不立即启动全拷贝以恢复数据副本,而是分配一个新的DS,即第二DS,并在第二DS上分配新的数据单元,以供客户端写入新的数据,若在预置的时间内第一DS可以恢复正常,则根据第二数据单元的数据位图将新的数据(即增量数据)PUSH恢复到第一数据单元上,否则,根据第二数据单元的数据位图从正常DS上获取剩余的数据并恢复到第二数据单元上,这样,可以避免某些短时间内可恢复的偶然故障因素所引起的全拷贝对系统性能所造成的不必要影响,从而提高了分布式系统的可靠性,例如,在网络闪断或者DS掉电重启等情况下,由于该故障可以在短时间内恢复正常,所以系统并不会因此而启动全拷贝以恢复数据副本,而是在系统恢复正常后,直接在本地的恢复数据副本,即PUSH增量数据。
实施例五、
根据实施例四所描述的方法,下面将举例作详细说明。
首先,每一份数据都需要设置相应的一份数据位图,这份数据位图与数据一起保存在DS上,数据位图中每一位代表一定大小的数据块,例如,常规可以采用系统页面的4K大小,即是说系统将以这个数据块为单位以访问时拷贝(COA,Copy on Access)的方式在数据副本之间进行同步更新。
导致系统内数据不可用的情况有多种,主要分为数据自身问题导致不可用的情况和非数据自身问题导致不可用的情况;在前一种情况下,数据所在设备,即数据所在的第一DS仍可访问,而在后一种情况下,数据所在设备,即数据所在的第一DS不可访问。以下将分别进行说明。
(1)数据自身问题导致不可用,此时数据所在的第一DS仍可访问。
当系统检测到数据所在的数据服务器仍可访问时,可以采用两种方案以进行数据副本的恢复。
方法一,如下:
系统分配新的DS,即第二DS,并且立即将数据副本拷贝恢复到该第二DS上,并且在MDS上更新数据的分布信息。
例如,MDS可以从数据分布信息中指示出的正常DS上将数据副本全拷贝到第二DS上,即通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本全拷贝至第二DS。
或者,也刻意采用方法二,如下:
系统判断第一DS上是否存在空闲空间,若是,则将第一DS上的数据副本全拷贝到该空闲空间上,并更新MDS上的数据分布信息,若否,则分配新的DS,即第二DS,然后将数据副本全拷贝到第二DS上,并更新MDS上的数据分布信息;
例如,MDS可以从数据分布信息中指示出的正常DS上将数据副本全拷贝到第二DS上,即通过查找自身的(MDS)数据分布信息,从而获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,并将该选择的DS中保存的数据副本全拷贝至第二DS。
(2)非数据自身问题导致不可用,此时数据所在的第一DS不可访问。当系统检测到数据所在的DS不可访问时,可采取以下方案以进行数据副本的恢复。
步骤1、MDS分配一个新的DS(即第二DS),比如DS-N,并更新自身的(MDS)数据分布信息;
步骤2、MDS在DS-N上分配一个与正常数据单元相同属性的对象M;其中,这里所说的正常数据单元可以是第一DS的正常数据单元;
步骤3、MDS设置定时器等待退出服务的第一DS恢复正常;此时,存在步骤5和步骤6两种情况;
步骤4、如果在等待的这段时间内,客户端需要写入数据,则客户端修改或追加的数据在写入到正常DS上并且更新位图时,也需同时写入到DS-N上的对象M并更新位图;
步骤5、若在定时器超时前第一DS恢复正常,DS-N根据对象M的数据位图将新的数据PUSH恢复到第一DS的对象;
步骤6、若定时器超时,第一DS没有恢复正常,DS-N将根据对象M的数据位图从数据分布信息中的正常DS上获取剩余的数据恢复到本地对象M。例如:MDS通过查找自身的(MDS)数据分布信息,以获知保存有该数据的数据副本的其他正常的DS,然后从这些正常的DS中任意选择一个,从该选择的DS中获取剩余的数据,将获取到的剩余的数据保存的数据恢复到本地对象M上。
需说明的是,在这样的系统中,所有的数据副本都可以对外提供访问,此时数据副本之间通过COA的方式进行增量数据的同步,直至所有数据副本重新实现数据一致。
由上可知,本发明实施例采用在检测到数据所在的第一DS不可访问时,不立即启动全拷贝以恢复数据副本,而是分配一个新的DS,即第二DS,并在第二DS上分配新的数据单元,以供客户端写入新的数据,若在预置的时间内第一DS可以恢复正常,则根据第二数据单元的数据位图将新的数据(即增量数据)PUSH恢复到第一数据单元上,否则,根据第二数据单元的数据位图从正常DS上获取剩余的数据并恢复到第二数据单元上,这样,可以避免某些短时间内可恢复的偶然故障因素所引起的全拷贝对系统性能所造成的不必要影响,从而提高了分布式系统的可靠性。
实施例六、
为了更好地实施实施一至三所提供的方法,本发明实施例还相应地提供一种元数据服务器MDS,如图3所示,该MDS包括诊断单元301、恢复单元302、分配单元303和异地全拷贝单元304;
诊断单元301,用于检测到数据所在的第一DS不可访问时,确定在预置的时间内第一DS是否恢复正常;
恢复单元302,用于当诊断单元301确定在预置的时间内第一DS恢复正常时,将数据副本恢复到第一DS上;
分配单元303,用于当诊断单元301确定在预置的时间内第一DS没有恢复正常时,分配第二DS;
异地全拷贝单元304,用于当诊断单元301确定在预置的时间内第一DS没有恢复正常时,将数据副本全拷贝到分配单元分配303到的第二DS上,并更新自身的(MDS)数据分布信息。
其中,预置的时间可以通过设定定时器来进行预置,例如,在检测到第一DS不可访问时则立即启动定时器,等待第一DS恢复正常。
其中,所述分配单元303,还用于在诊断单元301检测到数据异常但数据所在的第一DS尚可访问时,分配第二DS;
所述异地全拷贝单元304,还用于在诊断单元301检测到数据异常但数据所在的第一DS尚可访问时,将数据副本全拷贝到所述分配单元分配的第二DS上,并更新自身的(MDS)数据分布信息。
该MDS还可以包括判断单元305和本地全拷贝单元306;
判断单元305,用于在诊断单元301检测到数据异常但数据所在的第一DS尚可访问时,判断第一DS上是否存在空闲空间;
本地全拷贝单元306,用于在判断单元305确定存在空闲空间时,将第一DS上的数据副本全拷贝到所述空闲空间,并更新自身的(MDS)数据分布信息;
所述分配单元303,还用于在判断单元305确定不存在空闲空间时,分配第二DS;
所述异地全拷贝单元304,还用于在判断单元305确定不存在空闲空间时,将数据副本全拷贝到分配单元分配的第二DS上,并更新自身的(MDS)数据分布信息。
以上各个单元的具体实施可参见实施例一至三,在此不再赘述。
由上可知,本发明实施例采用在检测到数据所在的第一DS不可访问时,不立即启动全拷贝以恢复数据副本,而是等待一段预置的时间,如果在该预置的时间内,第一DS恢复了正常,则直接将数据副本恢复到第一DS上,否则,如果第一DS不能恢复正常,才分配新的DS,即第二DS,然后启动全拷贝以将数据副本全拷贝到第二DS上,这样,可以避免某些短时间内可恢复的偶然故障因素所引起的全拷贝对系统性能所造成的不必要影响,从而提高了分布式系统的可靠性,例如,在网络闪断或者DS掉电重启等情况下,由于该故障可以在短时间内恢复正常,所以系统并不会因此而启动全拷贝以恢复数据副本,而是在系统恢复正常后,直接在本地的恢复数据副本。
实施例七、
为了更好地实施实施例四和五所提供的方法,本发明实施例还相应地提供一种元数据服务器MDS,如图4所示,该MDS包括服务器分配单元401、对象分配单元402、写入单元403和处理单元404;
服务器分配单元401,用于当检测到数据所在的第一DS不可访问时,分配第二DS,并更新自身的(MDS)数据分布信息;
对象分配单元402,用于在服务器分配单元401分配的第二DS上分配一个与第一数据单元相同属性的第二数据单元,所述第一数据单元为第一DS的正常数据单元;
写入单元403,用于当客户端在正常DS上写入新的数据并更新数据位图时,将所述新的数据写入对象分配单元402分配的第二数据单元并更新第二数据单元的数据位图;
处理单元404,用于确定在预置的时间内第一DS是否恢复正常,若是,则根据对象分配单元402分配的第二数据单元的数据位图将新的数据推送恢复到第一数据单元上;若否,则根据对象分配单元402分配的第二数据单元的数据位图从数据分布信息中指示出的正常DS上获取剩余的数据,并将该获取到的剩余的数据恢复到第二数据单元上;其中,预置的时间可以通过设定定时器来进行预置,例如,在检测到第一DS不可访问时则立即启动定时器,等待第一DS恢复正常。
该MDS还可以包括异地全拷贝单元;
所述服务器分配单元401,还用于在检测到数据异常但数据所在的第一DS尚可访问时,分配第二DS;
异地全拷贝单元,还用于在检测到数据异常但数据所在的第一DS尚可访问时,将数据副本全拷贝到服务器分配单元401分配的第二DS上,并更新自身的(MDS)数据分布信息。
该MDS还可以包括判断单元和本地全拷贝单元;
判断单元,用于在检测到数据异常但数据所在的第一DS尚可访问时,判断第一DS上是否存在空闲空间;
本地全拷贝单元,用于在判断单元确定存在空闲空间时,将第一DS上的数据副本全拷贝到所述空闲空间,并更新自身的(MDS)数据分布信息;
所述服务器分配单元,还用于在判断单元确定不存在空闲空间时,分配第二DS;
所述异地全拷贝单元,还用于在判断单元确定不存在空闲空间时,将数据副本全拷贝到分配单元分配的第二DS上,并更新自身的(MDS)数据分布信息。
以上各个单元的具体实施可参见实施例一至三,在此不再赘述。
由上可知,本发明实施例采用在检测到数据所在的第一DS不可访问时,不立即启动全拷贝以恢复数据副本,而是分配一个新的DS,即第二DS,并在第二DS上分配新的数据单元,以供客户端写入新的数据,若在预置的时间内第一DS可以恢复正常,则根据第二数据单元的数据位图将新的数据(即增量数据)PUSH恢复到第一数据单元上,否则,根据第二数据单元的数据位图从正常DS上获取剩余的数据并恢复到第二数据单元上,这样,可以避免某些短时间内可恢复的偶然故障因素所引起的全拷贝对系统性能所造成的不必要影响,从而提高了分布式系统的可靠性,例如,在网络闪断或者DS掉电重启等情况下,由于该故障可以在短时间内恢复正常,所以系统并不会因此而启动全拷贝以恢复数据副本,而是在系统恢复正常后,直接在本地的恢复数据副本,即PUSH增量数据。
本发明实施例还相应地提供一种通信系统,包括了本发明实施例提供的任一种MDS,具体可参见前面的实施例,在此不再赘述。
另外,需说明的是,本发明实施例中的系统均指分布式系统。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
以上对本发明实施例所提供的分布式系统中数据副本的恢复方法、装置和系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。