CN106484565B - 多数据中心间的数据同步方法及相关设备 - Google Patents
多数据中心间的数据同步方法及相关设备 Download PDFInfo
- Publication number
- CN106484565B CN106484565B CN201610839665.0A CN201610839665A CN106484565B CN 106484565 B CN106484565 B CN 106484565B CN 201610839665 A CN201610839665 A CN 201610839665A CN 106484565 B CN106484565 B CN 106484565B
- Authority
- CN
- China
- Prior art keywords
- log
- cluster
- description
- node
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1464—Management of the backup or restore process for networked environments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种多数据中心间的数据同步方法,包括:获取任意一个集群内任意一个节点的日志的状态,并在所述日志处于完成状态时,获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,进而确定每一条描述的最终状态及其在每一个集群内的当前状态;根据所述最终状态及当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并触发对应的集群执行所述数据同步操作。另,本发明实施例还提供一种多数据中心间的数据同步装置及一种分布式存储系统。所述数据同步方法可以实现多个数据中心之间同时进行数据同步,有效缩短多个数据中心之间数据不同步的时间窗口。
Description
技术领域
本发明涉及数据存储技术领域,尤其涉及一种多数据中心间的数据同步方法及相关设备。
背景技术
为保证数据中心中数据的可靠性,在对火灾、地震等自然灾害发生时,保证数据不丢失,或尽可能减少损失,多个数据中心间可互为容灾与备份的关系。数据会在多个数据中心间进行复制,一般采用同步复制的方式,但在数据中心出现故障时,为保证上层业务的连续性,在一个数据中心故障时,仍然能正常提供服务,此时数据的复制由同步转为异步,而数据在多个数据中心间进行异步复制时,如何保证数据的一致性是关系到数据同步可靠性的首要问题。
数据中心的数据在做复制时,以集群为单位建立复制关系,多个集群的数据的一致性策略采用的是最终一致性,即只要求多个数据中心间的数据在一定时间窗口后,保证一致即可。多数据中心的数据同步一般采用基于日志回放的方式,即对每项修改类的操作,在主数据中心与备数据中心分别记录日志,进而通过主备数据中心之间的日志同步来实现数据同步。
例如,在以主为准(Primary Based)的数据同步方案中,要求数据中心有主备之分,且必须保证主数据中心的集群上的日志是所有集群中最全的。为保证该条件,在主数据中心出现故障时,通过“切主”来继续提供服务,或者在做数据同步时,先根据集群数据恢复主数据中心的数据,使主数据中心上的数据最完整,各个备数据中心再分别向主数据中心做数据同步。或者,通过NRW机制判断数据写入的成功或失败,如果主数据中心存在写入失败的操作,则在对所有数据中心进行数据同步之前,需要先读取所有备数据中心的日志来恢复主数据中心上的数据,保证主数据中心上的日志最全,进而由各备数据中心分别向主数据中心进行数据同步。
然而,在上述同步方式中,主数据中心在数据恢复结束后,备数据中心先合并日志再向主数据中心做数据同步赶,即数据同步分为了三个过程,增大了数据中心之间数据不一致的时间窗口及实现的复杂度。同时,主数据中心做数据恢复时,需要和其它所有备交互,且该动作只能在主数据中心上完成,增大了主数据中心的负担。
发明内容
本发明实施例提供一种多数据中心间的数据同步方法及相关设备,实现各数据中心之间同时进行数据同步,在各数据中心之间分散数据同步的处理压力,并缩短多个数据中心之间数据不同步的时间窗口。
本发明实施例第一方面提供一种多数据中心间的数据同步方法,包括:
获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
若所述日志处于完成状态,则触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发对应的集群执行所述数据同步操作。
由于任意一个节点在其日志处于完成状态时,均可发起所述日志读取请求,因此无需限制由备集群向主集群发起数据同步,从而可以适用于无主备区分的分布式存储系统中。同时,通过所述节点同时向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,从而实现各数据中心之间同时进行数据同步,因而可以在各数据中心之间分散数据同步的处理压力。此外,通过获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识来确定每一条描述的最终状态及其在每一个集群内的当前状态,进而确定每一个集群针对所述描述需要进行的数据同步操作,无需读取日志的具体内容,因而可以极大地减少日志读取量,降低系统资源消耗,提升反馈速度,缩短多个数据中心之间数据不同步的时间窗口。
结合第一方面,在第一方面第一种可能的实现方式中,所述触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,包括:
触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;其中,所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求;
触发所述节点向Follower日志所在的集群分别发起日志读取请求;其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。
通过在向Leader日志所在的集群发起日志读取请求时,标记所述Leader日志的操作状态,从而可以防止所述Leader日志所在的集群同时响应多个节点的日志读取请求,以防止多个节点同时对该日志发起同步操作,造成不必要的资源浪费。
结合第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,所述触发所述节点向Leader日志所在的集群发起日志读取请求之后,所述方法还包括:
触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
结合第一方面第一种可能的实现方式,在第一方面第三种可能的实现方式中,所述触发所述节点向Follower日志所在的集群分别发起日志读取请求之后,所述方法还包括:
触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
所述发起所述日志读取请求的节点在向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求之后,只需触发对应的集群读取自身集群上的日志,并提取出日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点即可,无需反馈日志的具体内容,因而可以极大地降低反馈回路上的数据量,节约系统资源。
结合第一方面及第一方面第一种可能的实现方式至第一方面第三种可能的实现方式中的任意一种可能的实现方式,在第一方面第四种可能的实现方式中,所述根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态,包括:
根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
根据每一个所述集群的最大序列标识及所有集群中最大的序列标识,即可确定每一个所述集群内缺失的描述数量,进而根据所述处于写失败状态的描述的序列标识即可确定每一条描述在所述集群内的当前状态,进而根据每一条描述在所有集群内的当前状态确定最终状态,整个过程无需获取日志的具体内容,仅需根据处于写失败状态的描述的序列标识及各集群的最大序列标识,即可判断出每一个集群内的所有描述的当前状态及最终状态,因此可以有效降低系统资源消耗。
结合第一方面第四种可能的实现方式,在第一方面第五种可能的实现方式中,所述根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,包括:
若所述描述的最终状态为操作成功,则确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
若所述描述的最终状态为操作失败,则确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
结合第一方面第四种可能的实现方式,在第一方面第六种可能的实现方式中,所述触发所述对应的集群对所述描述执行所述数据同步操作,包括:
若所述描述的最终状态为操作成功,则触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
若所述描述的最终状态为操作失败,则触发所述对应的集群将所述描述的对象数据回滚。
所述发起日志读取请求的节点在根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作之后,可以同步将每一个集群需要进行的数据同步操作反馈给对应的集群,进而触发每一个集群同步执行对应的数据同步操作,从而实现所有集群之间同步进行数据同步操作,可以在保证所有集群之间的数据保持一致的同时,有效缩短数据同步所需要的时间,即可以减少不同集群之间数据不一致的时间窗口,有利于提升整个分布式数据存储系统的可靠性。
本发明实施例第二方面提供一种多数据中心间的数据同步装置,包括:
状态监测单元,用于获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
请求发起单元,用于在所述日志处于完成状态时,触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
标识获取单元,用于获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
状态确定单元,用于根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
数据同步单元,用于根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发对应的集群执行所述数据同步操作。
所述数据同步单元在根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作之后,可以同步将每一个集群需要进行的数据同步操作反馈给对应的集群,进而触发每一个集群同步执行对应的数据同步操作,从而实现所有集群之间同步进行数据同步操作,可以在保证所有集群之间的数据保持一致的同时,有效缩短数据同步所需要的时间,即可以减少不同集群之间数据不一致的时间窗口,有利于提升整个分布式数据存储系统的可靠性。
结合第二方面,在第二方面第一种可能的实现方式中,所述请求发起单元,具体用于:
触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;其中,所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求;
触发所述节点向Follower日志所在的集群分别发起日志读取请求;其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。
结合第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,所述装置还包括:
日志读取单元,用于触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
标识提取单元,用于提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
结合第二方面第二种可能的实现方式,在第二方面第三种可能的实现方式中,所述日志读取单元,还用于触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
所述标识提取单元,还用于提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
结合第二方面及第二方面第一种可能的实现方式至第二方面第三种可能的实现方式中的任意一种可能的实现方式,在第二方面第四种可能的实现方式中,所述状态确定单元,包括:
当前状态确定子单元,用于根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
最终状态确定子单元,用于根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
根据每一个所述集群的最大序列标识及所有集群中最大的序列标识,即可确定每一个所述集群内缺失的描述数量,进而根据所述处于写失败状态的描述的序列标识即可确定每一条描述在所述集群内的当前状态,进而根据每一条描述在所有集群内的当前状态确定最终状态,整个过程无需获取日志的具体内容,仅需根据处于写失败状态的描述的序列标识及各集群的最大序列标识,即可判断出每一个集群内的所有描述的当前状态及最终状态,因此可以有效降低系统资源消耗。
结合第二方面第四种可能的实现方式,在第二方面第五种可能的实现方式中,所述数据同步单元,包括:
操作确定子单元,用于在所述描述的最终状态为操作成功时,确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
所述操作确定子单元,还用于在所述描述的最终状态为操作失败时,确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
结合第二方面第四种可能的实现方式,在第二方面第六种可能的实现方式中,所述数据同步单元,包括:
操作触发子单元,用于在所述描述的最终状态为操作成功时,触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
所述操作触发子单元,还用于在所述描述的最终状态为操作失败时,触发所述对应的集群将所述描述的对象数据回滚。
本发明实施例第三方面提供一种分布式存储系统,包括多个互为备份关系的数据中心,每一个所述数据中心包括至少一个集群,每一个所述集群包括多个用于存储数据的节点,所述节点包括处理器和存储器,所述处理器与所述存储器电连接,所述存储器用于存储数据及可执行程序代码,所述处理器用于调用所述可执行程序代码,并执行如下操作:
获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
若所述日志处于完成状态,则触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发对应的集群执行所述数据同步操作。
由于任意一个节点在其日志处于完成状态时,均可发起所述日志读取请求,因此无需限制由备集群向主集群发起数据同步,从而可以适用于无主备区分的分布式存储系统中。同时,通过所述节点同时向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,从而实现各数据中心之间同时进行数据同步,因而可以在各数据中心之间分散数据同步的处理压力。此外,通过获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识来确定每一条描述的最终状态及其在每一个集群内的当前状态,进而确定每一个集群针对所述描述需要进行的数据同步操作,无需读取日志的具体内容,因而可以极大地减少日志读取量,降低系统资源消耗,提升反馈速度,缩短多个数据中心之间数据不同步的时间窗口。
结合第三方面,在第三方面第一种可能的实现方式中,所述触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,包括:
触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;其中,所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求;
触发所述节点向Follower日志所在的集群分别发起日志读取请求;其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。
结合第三方面第一种可能的实现方式,在第三方面第二种可能的实现方式中,所述触发所述节点向Leader日志所在的集群发起日志读取请求之后,所述操作还包括:
触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
结合第三方面第一种可能的实现方式,在第三方面第三种可能的实现方式中,所述触发所述节点向Follower日志所在的集群分别发起日志读取请求之后,所述操作还包括:
触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
结合第三方面及第一方面第三种可能的实现方式至第三方面第三种可能的实现方式中的任意一种可能的实现方式,在第三方面第四种可能的实现方式中,所述根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态,包括:
根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
根据每一个所述集群的最大序列标识及所有集群中最大的序列标识,即可确定每一个所述集群内缺失的描述数量,进而根据所述处于写失败状态的描述的序列标识即可确定每一条描述在所述集群内的当前状态,进而根据每一条描述在所有集群内的当前状态确定最终状态,整个过程无需获取日志的具体内容,仅需根据处于写失败状态的描述的序列标识及各集群的最大序列标识,即可判断出每一个集群内的所有描述的当前状态及最终状态,因此可以有效降低系统资源消耗。
结合第三方面第四种可能的实现方式,在第三方面第五种可能的实现方式中,所述根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,包括:
若所述描述的最终状态为操作成功,则确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
若所述描述的最终状态为操作失败,则确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
结合第三方面第四种可能的实现方式,在第三方面第六种可能的实现方式中,所述触发所述对应的集群对所述描述执行所述数据同步操作,包括:
若所述描述的最终状态为操作成功,则触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
若所述描述的最终状态为操作失败,则触发所述对应的集群将所述描述的对象数据回滚。
所述发起日志读取请求的节点在根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作之后,可以同步将每一个集群需要进行的数据同步操作反馈给对应的集群,进而触发每一个集群同步执行对应的数据同步操作,从而实现所有集群之间同步进行数据同步操作,可以在保证所有集群之间的数据保持一致的同时,有效缩短数据同步所需要的时间,即可以减少不同集群之间数据不一致的时间窗口,有利于提升整个分布式数据存储系统的可靠性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术中以及本发明实施例描述中所需要使用的附图作简单地介绍。
图1是本发明实施例提供的分布式存储系统的第一结构示意图;
图2是本发明实施例提供的数据同步方法的第一流程示意图;
图3是本发明实施例提供的数据同步方法的第二流程示意图;
图4是本发明实施例提供的数据同步装置的第一结构示意图;
图5是本发明实施例提供的数据同步装置的第二结构示意图;
图6是本发明实施例提供的分布式存储系统的第二结构示意图。
具体实施方式
下面将结合附图,对本发明的实施例进行描述。
请参阅图1,在本发明一个实施例中,提供一种分布式存储系统100,包括多个互为备份关系的数据中心10,每一个所述数据中心10包括至少一个集群11,每一个所述集群11包括多个用于存储数据的节点111。其中,每一个所述集群11通过LVS(Linux VirtualServer,Linux虚拟服务器)管理所述多个节点111,并统一对外提供一个IP地址,用于与外部客户端进行数据通信。每一个所述集群11内的节点111之间共享存储,当所述集群11收到外部客户端发送的数据读写请求时,由LVS采用随机算法路由到该集群11内的其中一个节点111。
可以理解,所述多个互为备份关系的数据中心10中,可以包括一个主数据中心和多个备数据中心。正常情况下,所述多个数据中心10之间的数据采用同步复制的方式。若所述多个互为备份关系的数据中心10中其中一个数据中心出现故障,则可以通过其他的数据中心继续提供服务。此时,由于有一个数据中心出现故障,数据无法实现同步复制,导致所述多个数据中心10之间的数据同步变为异步复制。
具体地,所述多个数据中心10在数据同步时,以集群11为单位建立复制关系,多个集群11之间数据同步的一致性策略为最终一致性,只要求多个集群11的数据在一定时间窗口后保证一致即可。在本实施例中,所述多个数据中心10之间的数据同步采用基于日志回放的方式。针对每项修改类的操作,在每一个所述数据中心10上分别记录日志,在一个数据中心10的日志中,对于每一个操作通过一条描述(entry)来记录,每一条entry具有一个序列标识(seqid),用于标识该entry在该日志中的位置。可以理解,所述日志即为若干条entry的一个集合。
在本实施例中,称接收外部业务请求的节点上的日志为Leader日志,接收复制请求节点上的日志为Follower日志。例如,主数据中心的一个节点为接收外部业务请求的节点,则该节点上的日志为Leader日志,该Leader日志在写完成后会被发送到备数据中心,且在发送到备数据中心时,会被分散存储到备数据中心内各集群的所有节点。其中,分散到备数据中心的日志被称为Follower日志。可以理解,所述接收外部业务请求的节点可以是所述多个数据中心10中的任意一个集群内的任意一个节点,相应地,该节点上的日志为Leader日志,该Leader日志在写完成后被分散到其他集群中,则分散到其他集群中的日志为Follower日志。也就是说,多数据中心的各集群之间可以不用分主集群和备集群,只需在日志部署时,将第一个接收到外部业务请求的节点上的日志标记为Leader日志,并将该Leader日志被分散到其他集群中的所有节点上时,标记为Follower日志即可。
在本实施例中,一个日志在各数据中心之间的分布形式如图1所示,其中,假设集群Cluster1为主集群,集群Cluster2和集群Cluster3为备集群。当外部客户端Client向集群Cluster1发起数据读写请求时,集群Cluster1通过LVS将该请求路由至其中一个节点,例如节点node3,则在该节点node3上的日志为Leader日志,标记为Cluster1_node3_log1。当该Leader日志写完成后,会被分散到集群Cluster2和集群Cluster3的每个节点上,形成对应的Follower日志,例如,当所述日志被分散到集群Cluster2的各个节点上时,可以分别标记为Cluster1_node3_log1_1,Cluster1_node3_log1_2和Cluster1_node3_log1_3。可以理解,Leader日志与Follower日志通过标记的日志名即可获取相互之间对应的复制关系,例如,日志名Cluster1_node3_log1_2是日志名为Cluster1_node3_log1的Leader日志被分散到其他集群的节点node2上的Follower日志。
现有的基于日志回放的数据同步方法中,需要区分主集群与备集群,且需要保证主集群上的日志是所有集群中最全的。从而在主集群出现故障时,需要通过“切主”来继续提供服务,或者在做数据同步时,先根据集群数据恢复主数据中心的数据,使主数据中心上的数据最完整,各个备数据中心再分别向主数据中心做数据同步。主数据中心在数据恢复结束后,备数据中心先合并日志再向主数据中心做数据同步赶,即数据同步分为了三个过程,增大了数据中心之间数据不一致的时间窗口及实现的复杂度。同时,主数据中心做数据恢复时,需要和其它所有备交互,且该动作只能在主数据中心上完成,增大了主数据中心的负担。
请参阅图2,在本发明实施例中,提供一种多数据中心间的数据同步方法,其可以应用于如图1所示的分布式存储系统100中,以实现所述分布式存储系统100中各数据中心之间同时进行数据同步,在各数据中心之间分散数据同步的处理压力,并缩短多个数据中心之间数据不同步的时间窗口。
所述多数据中心间的数据同步方法至少包括如下步骤:
步骤201:获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
步骤202:若所述日志处于完成状态,则触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
步骤203:获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
步骤204:根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
步骤205:根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发所述对应的集群执行所述数据同步操作。
其中,所述日志处于完成状态即表示在所述节点上已完成了对应的数据读写操作,并完成了对应日志的写操作。在本实施例中,当所述日志处于写完成状态时,被标记为finish状态。可以理解,所述日志可以为Leader日志,也可以为Follower日志。在Follower日志中,一个集群内只有一个节点上的Follower日志会被标记finish状态。
具体地,在每一个所述节点上,可以包括一个数据同步组件(或称作追赶组件catchup,如图1所示),用于维护该节点上的日志与数据中心的其他集群的日志之间的一致性。通过该数据同步组件对其所在的节点上的日志进行扫描分析,当该节点上的日志处于finish状态时,则针对该日志发起集群分布式同步请求。其中,被标记为finish状态的日志所在的节点即为数据同步(或数据追赶catchup)的发起节点。
由于每一个节点上均包括一个所述数据同步组件,因此,可以使得数据同步的发起动作可以由任意一个集群的任意一个节点发起,从而无需限制由备集群向主集群发起数据同步,从而可以适用于无主备区分的分布式存储系统中。
请参阅图3,在一种实施方式中,所述触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,包括:
步骤301:首先触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;
步骤302:然后触发所述节点向Follower日志所在的集群分别发起日志读取请求。
其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求。例如,当所述节点向Leader日志所在的集群发起日志读取请求后,可将Leader日志的状态设置为正在做catchup的状态,这样在该将Leader日志处于正在做catchup的状态时,所述Leader日志所在的集群可以暂停相应其他节点发起的日志读取请求,以防止多个节点同时对该日志发起catchup,造成不必要的资源浪费。
在所述触发所述节点向Leader日志所在的集群发起日志读取请求之后,所述方法还包括:
步骤303:触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
步骤304:提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
其中,Leader日志在整个集群中只有一个,且由于集群内各节点之间共享存储,故该日志所在的集群中任意一个节点上都可以读取。当所述Leader日志所在的集群接收到所述日志读取请求后,通过LVS路由到该集群下的任意一个节点,进而在该节点内直接读取所述Leader日志,并提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。由于只需要将所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识反馈给所述发起所述日志读取请求的节点,而无需反馈Leader日志的具体内容,从而可以极大地减少日志读取量,降低系统资源消耗,提升反馈速度。
在所述触发所述节点向Follower日志所在的集群分别发起日志读取请求之后,所述方法还包括:
步骤305:触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
步骤306:提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
其中,由于Follower日志被分散到集群的每一个节点上,因此当Follower日志所在的集群接收到所述日志读取请求之后,需要读取位于集群的所有节点上的分段日志,进而从中提取处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。同样地,由于只需要将所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识反馈给所述发起所述日志读取请求的节点,而无需反馈Follower日志的具体内容,从而可以极大地减少日志读取量,降低系统资源消耗,提升反馈速度。
在一种实施方式中,所述根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态,包括:
根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
具体地,所述发起日志读取请求的节点在接收到所有集群的日志中处于写失败状态的描述(entry)的序列标识(seqid)及每一个集群的日志中最大的序列标识之后,根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,即可确定每一条描述在所述集群内的当前状态。例如,假设集群Cluster1的日志(Leader日志)中seqid为1、3、6、7的entry为写失败状态(fail),集群Cluster1的日志中最大seqid为9,集群Cluster2的日志(Follower1日志)中最大seqid为10,集群Cluster3的日志(Follower2日志)中最大seqid为8。根据上述信息,可以确定Leader日志中缺失一条entry(seqid为10),且Leader日志中seqid为2、4、5、8、9的entry为写成功状态(success)。
在确定每一条描述在所述集群内的当前状态之后,根据每一条描述在所有集群内的当前状态,结合NRW机制,即可确定每一条描述的最终状态。具体地,假设NRW=322,即表示Leader日志、Follower1日志与Follower2日志中,需要同时有两个日志处于写成功状态,才能使每一条描述的最终状态为写成功状态。在本实施例中,每一条描述在所有集群内的当前状态及最终状态如表1所示。
表1每一条描述在所有集群内的当前状态及最终状态
从表1中可以看出,通过获取所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,并结合NRW机制,即可确定每一条描述的最终状态及其在每一个集群内的当前状态,进而根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,例如,数据读取或者数据回滚,从而保证所有集群内的数据一致的状态。可以理解,所述NRW机制并不限定于NRW=322,还可以是NRW=311等。
其中,所述根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,包括:
若所述描述的最终状态为操作成功,则确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
若所述描述的最终状态为操作失败,则确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
例如,在表1所示的描述中,seqid为2的描述在Leader日志中的状态为success,在Follower1日志中的状态为fail,在Follower2日志中的状态为success,根据NRW=322,该seqid为1的描述的最终状态为操作成功,则确定Follower1日志所在的集群Cluster2需要进行的数据同步操作为读取数据,集群Cluster2可以从集群Cluster1或集群Cluster3中读取seqid为2的描述的操作所对应的数据,以保证所有集群上数据的一致性。
相应地,所述触发所述对应的集群对所述描述执行所述数据同步操作,包括:
若所述描述的最终状态为操作成功,则触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
若所述描述的最终状态为操作失败,则触发所述对应的集群将所述描述的对象数据回滚。
例如,在表1所示的描述中,seqid为1的描述在Leader日志中的状态为fail,在Follower1日志中的状态为success,在Follower2日志中的状态为fail,根据NRW=322,该seqid为1的描述的最终状态为操作失败,则确定Follower1日志所在的集群Cluster2需要进行的数据同步操作为回滚数据,即seqid为1的描述对应的操作的数据回滚,例如,若seqid为1的描述对应的操作为写入数据,则所述数据回滚即为将集群Cluster2上对应的数据删除,以保证所有集群上数据的一致性。
所述多数据中心间的数据同步方法通过在多数据中心的任意一个集群内任意一个节点的日志处于完成状态时,触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,无需获取详细的日志内容,从而可以极大地降低网络上传输的数据量,节约系统资源。进一步地,在获取到所述序列标识之后,所述发起日志读取请求的节点获取到的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态,并根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发所述对应的集群对所述描述执行所述数据同步操作。由于每一个节点均可以作为发起所述日志读取请求的节点,从而不会受到主备集群的关系的限制,可以适用于集群之间无主备关系的场景;同时,由于所有集群同时进行数据同步,有效分散了数据同步的处理压力,且有利于提升数据同步的速度,减少集群间数据不同步的时间窗口,提升分布式存储系统的可靠性。
请参阅图4,在本发明一个实施例中,提供一种多数据中心间的数据同步装置400,包括:
状态监测单元410,用于获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
请求发起单元420,用于在所述日志处于完成状态时,触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
标识获取单元430,用于获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
状态确定单元440,用于根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
数据同步单元450,用于根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发所述对应的集群对所述描述执行所述数据同步操作。
其中,所述请求发起单元420,具体用于:
触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;其中,所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求;
触发所述节点向Follower日志所在的集群分别发起日志读取请求;其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。
请参阅图5,在一种实施方式中,所述装置400还包括:
日志读取单元460,用于触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
标识提取单元470,用于提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
在一种实施方式中,所述日志读取单元460,还用于触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
所述标识提取单元470,还用于提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
在一种实施方式中,所述状态确定单元440,包括:
当前状态确定子单元441,用于根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
最终状态确定子单元442,用于根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
在一种实施方式中,所述数据同步单元450,包括:
操作确定子单元451,用于在所述描述的最终状态为操作成功时,确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
所述操作确定子单元451,还用于在所述描述的最终状态为操作失败时,确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
在一种实施方式中,所述数据同步单元450,还包括:
操作触发子单元452,用于在所述描述的最终状态为操作成功时,触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
所述操作触发子单元452,还用于在所述描述的最终状态为操作失败时,触发所述对应的集群将所述描述的对象数据回滚。
可以理解,所述多数据中心间的数据同步装置400的各组成单元的功能及其具体实现还可以参照图2至图3所示方法实施例中的相关描述,此处不再赘述。
请参阅图6,在本发明一个实施例中,提供一种分布式存储系统600,包括多个互为备份关系的数据中心60,每一个所述数据中心60包括至少一个集群61,每一个所述集群61包括多个用于存储数据的节点611,所述节点611包括处理器6111和存储器6112,所述处理器6111与所述存储器6112电连接,所述存储器6112用于存储数据及可执行程序代码,所述处理器6111用于调用所述可执行程序代码,并执行如下操作:
获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
若所述日志处于完成状态,则触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发所述对应的集群对所述描述执行所述数据同步操作。
其中,所述触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,包括:
触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;其中,所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求;
触发所述节点向Follower日志所在的集群分别发起日志读取请求;其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。
其中,所述触发所述节点向Leader日志所在的集群发起日志读取请求之后,所述操作还包括:
触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
其中,所述触发所述节点向Follower日志所在的集群分别发起日志读取请求之后,所述操作还包括:
触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
其中,所述根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态,包括:
根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
其中,所述根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,包括:
若所述描述的最终状态为操作成功,则确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
若所述描述的最终状态为操作失败,则确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
其中,所述触发所述对应的集群对所述描述执行所述数据同步操作,包括:
若所述描述的最终状态为操作成功,则触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
若所述描述的最终状态为操作失败,则触发所述对应的集群将所述描述的对象数据回滚。
可以理解,所述处理器6111执行的各操作步骤的具体实现还可以参照图2至图3所示方法实施例中的相关描述,此处不再赘述。
可以理解,在本申请所提供的几个实施例中,所揭露的系统、方法和装置,可以通过其它的方式实现。例如,以上所描述的装置的实施例仅仅是示意性的,所述单元的划分,仅仅为一种逻辑功能划分,具体实施时可以有另外的划分方式。例如,多个单元可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。在一种实施方式中,所述的装置以可执行的程序模块的形式存储于存储器中,并由处理器调用和执行,从而通过所述处理器控制所述快速充电系统中的各模块执行对应的操作,以实现对串联电池组的快速充电。
可以理解,本发明实施例所述的方法中的步骤可以根据实际需要进行顺序调整、合并和删减。相应地,本发明实施例所述的装置中的单元也可以根据实际需要进行合并、划分和删减。
以上所揭露的仅为本发明的优选实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (22)
1.一种多数据中心间的数据同步方法,其特征在于,包括:
获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
若所述日志处于完成状态,则触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发对应的集群执行所述数据同步操作。
2.如权利要求1所述的方法,其特征在于,所述触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,包括:
触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;其中,所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求;
触发所述节点向Follower日志所在的集群分别发起日志读取请求;其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。
3.如权利要求2所述的方法,其特征在于,所述触发所述节点向Leader日志所在的集群发起日志读取请求之后,所述方法还包括:
触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
4.如权利要求2所述的方法,其特征在于,所述触发所述节点向Follower日志所在的集群分别发起日志读取请求之后,所述方法还包括:
触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
5.如权利要求1-4任意一项所述的方法,其特征在于,所述根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态,包括:
根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
6.如权利要求5所述的方法,其特征在于,所述根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,包括:
若所述描述的最终状态为操作成功,则确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
若所述描述的最终状态为操作失败,则确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
7.如权利要求5所述的方法,其特征在于,所述触发所述对应的集群对所述描述执行所述数据同步操作,包括:
若所述描述的最终状态为操作成功,则触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
若所述描述的最终状态为操作失败,则触发所述对应的集群将所述描述的对象数据回滚。
8.一种多数据中心间的数据同步装置,其特征在于,包括:
状态监测单元,用于获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
请求发起单元,用于在所述日志处于完成状态时,触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
标识获取单元,用于获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
状态确定单元,用于根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
数据同步单元,用于根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发对应的集群执行所述数据同步操作。
9.如权利要求8所述的装置,其特征在于,所述请求发起单元,具体用于:
触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;其中,所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求;
触发所述节点向Follower日志所在的集群分别发起日志读取请求;其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。
10.如权利要求9所述的装置,其特征在于,所述装置还包括:
日志读取单元,用于触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
标识提取单元,用于提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
11.如权利要求10所述的装置,其特征在于,
所述日志读取单元,还用于触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
所述标识提取单元,还用于提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
12.如权利要求8-11任意一项所述的装置,其特征在于,所述状态确定单元,包括:
当前状态确定子单元,用于根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
最终状态确定子单元,用于根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
13.如权利要求12所述的装置,其特征在于,所述数据同步单元,包括:
操作确定子单元,用于在所述描述的最终状态为操作成功时,确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
所述操作确定子单元,还用于在所述描述的最终状态为操作失败时,确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
14.如权利要求12所述的装置,其特征在于,所述数据同步单元,包括:
操作触发子单元,用于在所述描述的最终状态为操作成功时,触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
所述操作触发子单元,还用于在所述描述的最终状态为操作失败时,触发所述对应的集群将所述描述的对象数据回滚。
15.一种分布式存储系统,其特征在于,包括多个互为备份关系的数据中心,每一个所述数据中心包括至少一个集群,每一个所述集群包括多个用于存储数据的节点,所述节点包括处理器和存储器,所述处理器与所述存储器电连接,所述存储器用于存储数据及可执行程序代码,所述处理器用于调用所述可执行程序代码,并执行如下操作:
获取多数据中心的任意一个集群内任意一个节点的日志的状态,并判断所述日志是否处于完成状态;其中,所述日志包括多条描述,每一条描述包括一个序列标识,用于标记所述描述在所述日志中的位置;
若所述日志处于完成状态,则触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求;
获取所述多数据中心内每一个集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识;
根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态;
根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,并将所述数据同步操作反馈给对应的集群,以触发对应的集群执行所述数据同步操作。
16.如权利要求15所述的分布式存储系统,其特征在于,所述触发所述节点向所述多数据中心内与所述节点所在的集群处于复制关系中的其他集群发起日志读取请求,包括:
触发所述节点向Leader日志所在的集群发起日志读取请求,并标记所述Leader日志的操作状态;其中,所述Leader日志的操作状态用于防止所述Leader日志所在的集群同时响应多个节点的日志读取请求;
触发所述节点向Follower日志所在的集群分别发起日志读取请求;其中,所述Leader日志为第一个接收到数据操作请求的节点的日志;所述Follower日志为所述Leader日志被复制到其他集群时,分散到其他集群的每个节点上的日志。
17.如权利要求16所述的分布式存储系统,其特征在于,所述触发所述节点向Leader日志所在的集群发起日志读取请求之后,所述操作还包括:
触发所述Leader日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述节点上的Leader日志;
提取所述Leader日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
18.如权利要求16所述的分布式存储系统,其特征在于,所述触发所述节点向Follower日志所在的集群分别发起日志读取请求之后,所述操作还包括:
触发所述Follower日志所在的集群内的任意一个节点接收所述日志读取请求,并读取所述集群内的所有节点上的Follower日志;
提取所述Follower日志中处于写失败状态的描述的序列标识及最大的序列标识,并反馈给发起所述日志读取请求的节点。
19.如权利要求15-18任意一项所述的分布式存储系统,其特征在于,所述根据所述多数据中心内所有集群的日志中处于写失败状态的描述的序列标识及每一个集群的日志中最大的序列标识,确定每一条描述的最终状态及其在每一个集群内的当前状态,包括:
根据每一个所述集群的日志中处于写失败状态的描述的序列标识、每一个所述集群的最大序列标识及所有集群中最大的序列标识,确定每一条描述在所述集群内的当前状态;
根据每一条描述在所有集群内的当前状态,结合NRW机制,确定每一条描述的最终状态。
20.如权利要求19所述的分布式存储系统,其特征在于,所述根据所述每一条描述的最终状态及其在每一个集群内的当前状态,确定每一个集群针对所述描述需要进行的数据同步操作,包括:
若所述描述的最终状态为操作成功,则确定所述描述的当前状态为操作失败的集群需要进行的数据同步操作为向当前状态为操作成功的集群读取数据;
若所述描述的最终状态为操作失败,则确定所述描述的当前状态为操作成功的集群需要进行的数据同步操作为回滚数据。
21.如权利要求19所述的分布式存储系统,其特征在于,所述触发所述对应的集群对所述描述执行所述数据同步操作,包括:
若所述描述的最终状态为操作成功,则触发所述对应的集群向当前状态为操作成功的集群读取所述描述的对象数据;
若所述描述的最终状态为操作失败,则触发所述对应的集群将所述描述的对象数据回滚。
22.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行,以实现权利要求1至7任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610839665.0A CN106484565B (zh) | 2016-09-22 | 2016-09-22 | 多数据中心间的数据同步方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610839665.0A CN106484565B (zh) | 2016-09-22 | 2016-09-22 | 多数据中心间的数据同步方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106484565A CN106484565A (zh) | 2017-03-08 |
CN106484565B true CN106484565B (zh) | 2019-06-28 |
Family
ID=58267560
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610839665.0A Active CN106484565B (zh) | 2016-09-22 | 2016-09-22 | 多数据中心间的数据同步方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106484565B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107844405B (zh) * | 2017-10-12 | 2021-11-19 | 华为技术有限公司 | 日志处理方法及装置、服务器 |
CN110209726B (zh) * | 2018-02-12 | 2023-10-20 | 金篆信科有限责任公司 | 分布式数据库集群系统、数据同步方法及存储介质 |
CN110377577B (zh) | 2018-04-11 | 2022-03-04 | 北京嘀嘀无限科技发展有限公司 | 数据同步方法、装置、系统和计算机可读存储介质 |
CN109635039B (zh) * | 2018-11-23 | 2021-08-24 | 金色熊猫有限公司 | 多数据中心数据同步方法及系统 |
CN109614271B (zh) * | 2018-12-14 | 2023-06-13 | 深圳前海微众银行股份有限公司 | 多个集群数据一致性的控制方法、装置、设备及存储介质 |
CN112861188A (zh) * | 2021-02-01 | 2021-05-28 | 青岛易来智能科技股份有限公司 | 用于多集群的数据汇集系统和方法 |
CN113489792B (zh) * | 2021-07-07 | 2023-02-03 | 上交所技术有限责任公司 | 一种在跨数据中心集群共识算法中减少数据中心间网络传输次数的方法 |
CN114661818B (zh) * | 2022-03-17 | 2023-03-31 | 杭州欧若数网科技有限公司 | 图数据库中集群间数据实时同步的方法、系统和介质 |
CN114780293A (zh) * | 2022-04-26 | 2022-07-22 | 北京科杰科技有限公司 | 基于hadoop的异地双活容灾方法、装置、设备和可读存储介质 |
CN114579671A (zh) * | 2022-05-09 | 2022-06-03 | 高伟达软件股份有限公司 | 集群间数据同步方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6894975B1 (en) * | 2000-01-15 | 2005-05-17 | Andrzej Partyka | Synchronization and access of the nodes in a communications network |
CN101364217A (zh) * | 2007-08-08 | 2009-02-11 | 华为技术有限公司 | 数据库中数据维护方法、设备及其系统 |
CN101395602A (zh) * | 2005-12-29 | 2009-03-25 | 亚马逊科技公司 | 用于分布式文件存储和索引服务的方法和装置 |
CN104378234A (zh) * | 2014-11-19 | 2015-02-25 | 北京数迅科技有限公司 | 跨数据中心的数据传输处理方法及系统 |
-
2016
- 2016-09-22 CN CN201610839665.0A patent/CN106484565B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6894975B1 (en) * | 2000-01-15 | 2005-05-17 | Andrzej Partyka | Synchronization and access of the nodes in a communications network |
CN101395602A (zh) * | 2005-12-29 | 2009-03-25 | 亚马逊科技公司 | 用于分布式文件存储和索引服务的方法和装置 |
CN101364217A (zh) * | 2007-08-08 | 2009-02-11 | 华为技术有限公司 | 数据库中数据维护方法、设备及其系统 |
CN104378234A (zh) * | 2014-11-19 | 2015-02-25 | 北京数迅科技有限公司 | 跨数据中心的数据传输处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106484565A (zh) | 2017-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106484565B (zh) | 多数据中心间的数据同步方法及相关设备 | |
CN106341454B (zh) | 跨机房多活分布式数据库管理系统和方法 | |
US11360854B2 (en) | Storage cluster configuration change method, storage cluster, and computer system | |
WO2019154394A1 (zh) | 分布式数据库集群系统、数据同步方法及存储介质 | |
CN106062717B (zh) | 一种分布式存储复制系统和方法 | |
EP3127018B1 (en) | Geographically-distributed file system using coordinated namespace replication | |
CN107832138B (zh) | 一种扁平化的高可用namenode模型的实现方法 | |
CN108958984B (zh) | 基于ceph的双活同步在线热备方法 | |
CN107771321A (zh) | 数据中心中的恢复 | |
CN105069160A (zh) | 一种基于自主可控数据库的高可用性方法及构架 | |
CN106339278A (zh) | 一种网络文件系统的数据备份及恢复方法 | |
CN108762982B (zh) | 一种数据库恢复方法、装置及系统 | |
CN110351313B (zh) | 数据缓存方法、装置、设备及存储介质 | |
CN111176888B (zh) | 云存储的容灾方法、装置及系统 | |
US8527454B2 (en) | Data replication using a shared resource | |
CN107168970A (zh) | 一种分布式文件系统hdfs的管理方法、装置及系统 | |
CN106325768B (zh) | 一种双机存储系统及方法 | |
US20230004465A1 (en) | Distributed database system and data disaster backup drilling method | |
CN108600284A (zh) | 一种基于Ceph的虚拟机高可用实现方法及系统 | |
CN114363350A (zh) | 一种服务治理系统及方法 | |
CN107357800A (zh) | 一种数据库高可用零丢失解决方法 | |
CN105323271B (zh) | 一种云计算系统以及云计算系统的处理方法和装置 | |
CN106776151A (zh) | Samba集群tdb数据库记录备份方法、装置及系统 | |
CN110096237A (zh) | 副本处理方法及节点、存储系统、服务器、可读介质 | |
Anderson et al. | Local recovery for high availability in strongly consistent cloud services |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220907 Address after: 611731 No. 1899, Xiyuan Avenue, high tech Zone (West District), Chengdu, Sichuan Patentee after: Chengdu Huawei Technologies Co.,Ltd. Address before: 611731 Qingshui River District, Chengdu hi tech Zone, Sichuan, China Patentee before: HUAWEI DIGITAL TECHNOLOGIES (CHENG DU) Co.,Ltd. |
|
TR01 | Transfer of patent right |