CN110019510A - 一种进行增量同步的方法及装置 - Google Patents
一种进行增量同步的方法及装置 Download PDFInfo
- Publication number
- CN110019510A CN110019510A CN201710911283.9A CN201710911283A CN110019510A CN 110019510 A CN110019510 A CN 110019510A CN 201710911283 A CN201710911283 A CN 201710911283A CN 110019510 A CN110019510 A CN 110019510A
- Authority
- CN
- China
- Prior art keywords
- node
- operation note
- sent
- note
- synchronized
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Small-Scale Networks (AREA)
Abstract
本申请提供一种进行增量同步的方法及装置;所述进行增量同步的方法,包括:在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。本申请至少一个实施例能够提升数据库系统的稳定性。
Description
技术领域
本发明涉及数据库领域,尤其涉及一种进行增量同步的方法及装置。
背景技术
Redis是一个开源、支持网络、基于内存、键值对(Key-Value)存储数据库,使用ANSI C编写,也支持数据的持久化和丰富的数据结构。
Redis通常包括多个服务节点;一部分服务节点处于业务的激活状态(可以称之为主Redis节点),一部分服务节点处于业务的备用状态(可以称之为从Redis节点)。当主Redis节点出现故障时,系统激活从Redis节点自动接替主Redis节点提供服务,并将原来的主Redis节点降级成从Redis节点或者重新搭建一个从Redis节点。
为了使从Redis节点在需要时能接替主Redis节点提供服务,主、从Redis节点之间需要进行数据同步;Redis目前支持的主从Redis节点之间数据同步方式包括以下两种:
(1)全量同步(又可称为全量数据同步),包括以下过程:主
Redis节点在收到从Redis节点的全量同步请求后,会触发一次RDB持久化;
Redis的RDB持久化机制如下:
开始进行RDB持久化后,Redis会分叉(fork)一个子进程出来,子进程会复制Redis父进程的内存空间,此时相当于Redis拥有了一个在内存中的数据快照,子进程将复制的内存空间中对应的key-value对转储(dump)到持久化的数据文件中,该文件成为RDB文件,当该dump操作完成时,RDB持久化过程完成。
持久化完成后,主Redis节点会把磁盘上的RDB文件通过网络发送给从Redis节点,从Redis节点接收并存储该文件为磁盘上的一个临时文件,然后从Redis节点会加载该临时文件中的数据到内存中,加载完成后,会从主Redis节点读取增量数据,完成一次全量同步。整个流程对主Redis节点的磁盘、CPU、网络带宽都有非常大的消耗,且主Redis节点可能会消耗额外1倍的内存,可能导致主Redis节点被操作系统杀掉,数据库崩溃。
(2)增量同步(又可称为增量数据同步):Redis原生的增量同步机制,目的是为了解决偶尔的网络抖动导致主Redis节点和从Redis节点之间出现同步链路中断,恢复后主Redis无需把全量的数据重新同步给从Redis,只需把中断期间的增量数据(即增加的操作记录)同步给从Redis即可;从Redis节点会给主Redis节点发送自己的同步偏移信息(即目前已同步的最后一条数据在同步缓冲中的位置),主Redis节点收到这个同步偏移信息后,会计算从Redis节点缺失的操作记录,如果主Redis节点的同步缓冲(buffer)中有该缺失的数据,会直接发送这部分缺失数据给从Redis节点,完成增量同步。如果同步buffer不可用,Redis会降级使用全量同步方式。
Redis目前提供的全量同步方式,对Redis所在的服务器产生很大的开销,进而可能导致Redis数据库出现崩溃的情况。而现有的增量同步机制又依赖于主Redis节点的同步buffer,该buffer是主Redis节点上的一小段内存空间,如果主Redis节点写入流量高时,或者主从之间同步中断时间过久,都会导致同步buffer不可用,无法进行现有的这种增量同步,进而会降级为全量同步,而Redis在做跨机房容灾等大规模数据的同步时,如果出现主从Redis节点间的断网事件(比如主从机房间的断网事件),降级为全量同步会带来灾难性的后果,会导致主Redis节点(比如主机房)带宽占满,部分服务器出现内存溢出(Out OfMemory,OOM)。
发明内容
本申请提供一种进行增量同步的方法及装置,能够提升数据库系统的稳定性。
本申请采用如下技术方案。
一种进行增量同步的方法,包括:
在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
其中,所述增量同步可以是指所述主节点将全量同步后每次操作的操作记录发送给所述从节点,以使所述从节点和所述主节点保持同步;其中,所述全量同步是指所述主节点和所述从节点之间一次性同步全部数据。
其中,所述从节点发送的操作标识可以是当前待同步的操作记录的操作标识;
根据从节点发送的操作标识在所保存的操作记录中进行查找可以包括:
在所保存的操作记录中,查找操作标识与从节点所发送的操作标识匹配的操作记录,作为所述当前待同步的操作记录。
其中,操作标识可以是操作记录的顺序号。
其中,所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点可以包括:
所述主节点在所查找到的当前待同步的操作记录所在的日志文件中,从当前待同步的操作记录开始,读取操作记录发送给从节点;
当一个日志文件中的操作记录发送完后,所述主节点继续读取下一个日志文件中的操作记录发送给从节点,直到最后一个日志文件中的操作记录也发送完;
所述主节点将日志缓冲中的操作记录发送给从节点。
其中,所述主节点根据从节点发送的操作标识在所保存的操作记录中进行查找可以包括:
所述主节点生成后台线程,根据所述从节点发送的操作标识,查找当前待同步的操作记录所在的日志文件,以及当前待同步的操作记录在该日志文件中的偏移。
其中,所述主节点根据从节点发送的操作标识在所保存的操作记录中进行查找前还可以包括:
所述主节点根据从节点发送的同步偏移信息,判断是否能够基于同步缓冲继续进行增量同步,如果不能,则进行所述根据从节点发送的操作标识在所保存的操作记录中进行查找的操作。
其中,所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点后还可以包括:
所述主节点将同步偏移信息发送给所述从节点。
一种进行增量同步的方法,包括:
在增量同步中断又恢复连接后,从节点根据当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
所述从节点根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
其中,所述根据当前已同步的操作记录,向主节点发送操作标识可以包括:
向主节点发送当前待同步的操作记录的操作标识;其中,当前待同步的操作记录是从节点已收到的最后一条操作记录的下一条操作记录。
其中,所述的方法还可以包括:
在增量同步中断又恢复连接后,从节点向主节点发送所记录的同步偏移信息;
从节点根据主节点返回的操作记录,执行相应操作后还包括:从节点根据主节点发送的同步偏移信息,更新所记录的同步偏移信息。
一种进行增量同步的装置,包括:第一处理器和第一存储器;
所述第一存储器用于保存用于进行主节点增量同步的程序;所述用于进行主节点增量同步的程序在被所述第一处理器读取执行时,进行如下操作:
在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
其中,所述将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点可以包括:
在所查找到的当前待同步的操作记录所在的日志文件中,从当前待同步的操作记录开始,读取操作记录发送给从节点;
当一个日志文件中的操作记录发送完后,继续读取下一个日志文件中的操作记录发送给从节点,直到最后一个日志文件中的操作记录也发送完;
将日志缓冲中的操作记录发送给从节点。
其中,所述用于进行主节点增量同步的程序在被所述第一处理器读取执行时,还可以进行如下操作:
在根据从节点发送的操作标识在所保存的操作记录中进行查找前,根据从节点发送的同步偏移信息,判断是否能够基于同步缓冲继续进行增量同步,如果不能,则进行所述根据从节点发送的操作标识在所保存的操作记录中进行查找的操作;
将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点后,将同步偏移信息发送给从节点。
一种进行增量同步的装置,包括:第二处理器和第二存储器;
所述第二存储器用于保存用于进行从节点增量同步的程序;所述用于进行从节点增量同步的程序在被所述第二处理器读取执行时,进行如下操作:
在增量同步中断又恢复连接后,根据从节点当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
其中,所述用于进行从节点增量同步的程序在被所述第二处理器读取执行时,还可以进行如下操作:
在增量同步中断又恢复连接后,向主节点发送从节点所记录的同步偏移信息;
根据主节点返回的操作记录,执行相应操作后,根据主节点发送的同步偏移信息,更新从节点所记录的同步偏移信息。
一种进行增量同步的装置,包括:
查找模块,用于在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
发送模块,用于将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
一种进行增量同步的装置,包括:
发起模块,用于在增量同步中断又恢复连接后,根据从节点当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
同步模块,用于根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
本申请至少一个实施例中,在数据库主从节点之间出现同步中断时,能够基于磁盘上的日志进行增量同步,可以尽量避免退回到开销非常大的全量同步操作,提升了数据库系统的稳定性。
本申请实施例的一种实现方式中,可以由从节点发送当前待同步的操作记录的操作标识,主节点直接在日志中查找匹配的操作标识即可开始发送,提高了查找的效率。
本申请实施例的一种实现方式中,可以将顺序号作为操作标识,可以便于主节点或从节点确定当前待同步的操作记录的操作标识。
本申请实施例的一种实现方式中,通过生成后台线程执行查找操作,可以保证主线程的稳定。
本申请实施例的一种实现方式中,可以首先判断能否进行基于同步buffer的增量同步;如果根据操作标识进行了同步,则同步后可以更新同步偏移信息,这样能保证尽量先基于同步buffer进行同步,提高同步效率。
当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
图1是实施例一的进行增量同步的方法的流程图;
图2是实施例二的进行增量同步的方法的流程图;
图3是实施例三的进行增量同步的方法的流程图;
图4是实施例三的例子中主、从Redis节点之间进行增量同步的示意图;
图5是实施例六的进行增量同步的装置的示意图;
图6是实施例七的进行增量同步的装置的示意图。
具体实施方式
下面将结合附图及实施例对本申请的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本申请实施例以及实现方式中的不同特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在一种配置中,进行增量同步的计算设备可包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存(memory)。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。内存可能包括一个或多个模块。
计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
实施例一、一种进行增量同步的方法,如图1所示,包括步骤S110~S120:
S110、在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
S120、所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点;其中,当前待同步的操作记录是从节点已收到的最后一条操作记录的下一条操作记录。
本实施例可以但不限于使用在Redis的主从同步中;可以由主节点上的Redis主线程进行上述步骤S110和S120。
本实施例中,主节点和从节点可以是不同的数据库实例。
本实施例是针对增量同步过程中,主、从节点之间的连接中断又恢复的情况,提出的同步方案;在增量同步之前,主、从节点之间通常已经通过RDB或其它方式进行过全量同步;全量同步后可以只进行增量同步,其中,对于主节点,所述增量同步可以是指:主节点将全量同步后每次操作的操作记录发送给从节点,以使从节点和主节点保持同步;对于从节点,所述增量同步可以是指:从节点在和主节点进行过全量同步后,根据主节点所发送的全量同步后的每次操作的操作记录,进行和主节点同样的操作,从而和主节点保持同步。其中,全量同步可以是指所述主节点和所述从节点之间一次性同步全部数据。
本实施例中,在从节点发送操作标识前,从节点和主节点可以已经进行完一些“握手”操作,比如从节点发送PING命令,进行权限认证,告知主节点自己的监听的端口;主节点可以相应反馈PONG、OK、ACK。
本实施例中,从节点可以但不限于通过处理器同步指令发送操作标识。
本实施例中,操作标识是全局唯一的,即操作标识和操作记录是一一对应的,这也就意味着操作标识和每次的操作也可以一一对应。
本实施例中,可以在主节点生成或保存一条操作记录时,产生该条操作记录的操作标识。
本实施例中,主节点中每进行一次操作,都会相应保存操作记录,保存时也保存操作记录的操作标识。
本实施例中,主节点可以分一次或多次将操作记录返回给从节点。
本实施例中,从节点已收到的最后一条操作记录可以是指,在增量同步中断前,从节点所收到的最后一条操作记录。
一种实现方式中,从节点发送的操作标识可以是当前待同步的操作记录的操作标识;
主节点根据从节点发送的操作标识在所保存的操作记录中进行查找可以包括:
在所保存的操作记录中,查找操作标识与从节点所发送的操作标识匹配的操作记录,作为所述当前待同步的操作记录。
本实现方式中,相当于从节点告知主节点自己当前所期望同步的操作记录的操作标识是什么,主节点查找具有相同操作标识的操作记录,查找到的操作记录就是当前待同步的操作记录。
本实现方式中,操作记录的操作标识可以按照预定规则产生,或者各操作记录的操作标识具有固定的变化规律,这样从节点可以根据该预定规则或固定的变化规律,来确定当前待同步的操作记录的操作标识。
其它实现方式中,从节点发送的操作标识也可以是从节点已收到的最后一条操作记录的操作标识;该实现方式中,相当于从节点告知主节点自己已经同步到哪一条操作记录,主节点可以直接查找具有相同操作标识的操作记录,具有相同操作标识的操作记录的下一条操作记录就是当前待同步的操作记录;或者主节点也可以根据上述预定规则或固定的变化规律,由从节点发送的操作标识确定出当前待同步的操作记录的操作标识,然后查找操作标识与所确定的操作标识匹配的操作记录,来查找到当前待同步的操作记录。
一种实现方式中,操作标识可以是操作记录的顺序号。
本实现方式中,上述当前待同步的操作记录的操作标识可以等于:从节点已收到的最后一条操作记录的操作标识加1。
本实现方式中,顺序号可以是描述操作记录产生或保存的顺序的编号;比如第一条操作记录的顺序号为1,第二条操作记录的顺序号2;再比如第一条操作记录的顺序号为number,第二条操作记录的顺序号为number+1。
本实现方式中,顺序号可以但不限于采用十进制形式;也可以采用十六进制或其它形式。
其它实现方式中,也可以不用顺序号作为操作标识,比如可以每个操作记录的操作标识,是前一条操作记录的操作标识加x,这样上述当前待同步的操作记录的操作标识可以等于:从节点已收到的最后一条操作记录的操作标识加x。再比如操作记录的操作标识是按照预定规则生成的,比如将以顺序号为自变量的函数值作为操作标识,根据该预定规则,可以确定当前待同步的操作记录的操作标识。
一种实现方式中,主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点可以包括:
主节点在所查找到的当前待同步的操作记录所在的日志文件中,从当前待同步的操作记录开始,读取操作记录发送给从节点;
当一个日志文件中的操作记录发送完后,继续读取下一个日志文件中的操作记录发送给从节点,直到最后一个日志文件中的操作记录也发送完;
主节点将日志缓冲中的操作记录发送给从节点。
本实现方式中,主节点可以将操作记录按顺序保存在日志文件中,一个日志文件的大小是有限的,当一个日志文件保存满后,主节点可以保存到下一个日志文件中;为了避免过多的输入输出,主节点可以将要保存在日志文件中的操作记录先保存在日志缓冲中,然后定期将日志缓冲中的操作记录保存到磁盘的日志文件中。
本实现方式中,当应用在Redis系统中时,在基于只追加文件(Append Only File,AOF)的持久化中,Redis主线程会把执行的最新的操作不断追加写到日志文件中。
本实现方式中,主节点根据所述从节点发送的操作标识在所保存的操作记录中进行查找可以包括:
主节点生成后台线程,根据所述从节点发送的操作标识,查找当前待同步的操作记录所在的日志文件,以及当前待同步的操作记录在该日志文件中的偏移。
比如,当从节点发送的是当前待同步的操作记录的操作标识S时,后台线程可以根据从节点发送的操作标识S,查找到包含同样操作标识的日志文件,并查找到操作标识S在该日志文件中的偏移(即所在位置);主节点根据查找结果,从查找到的日志文件中,相应偏移位置的操作记录开始读取,并发送给从节点;一个日志文件读取完则读取下一个日志文件,直到读取到当前最后一个日志文件中的最后一条操作记录,然后再将日志缓冲中的操作记录也发送给从节点。
一种实现方式中,主节点根据所述从节点发送的操作标识在所保存的操作记录中进行查找前还可以包括:
主节点根据从节点发送的同步偏移信息,判断是否能够基于同步缓冲继续进行增量同步,如果不能,则进行所述根据从节点发送的操作标识在所保存的操作记录中进行查找的操作。
本实现方式中,当主节点根据所述同步偏移信息判断能够基于同步缓冲继续进行增量同步时,主节点可以从同步缓冲中读取操作记录返回给从节点。
本实现方式中,主节点可以优先考虑能否基于同步缓冲继续进行增量同步,即从节点发送的同步偏移信息对应的操作记录是否仍存在于同步缓冲中,如果仍存在则可以直接采用Redis原生的增量同步;如果不存在,则主节点再根据从节点发送的操作标识,读取操作记录返回给从节点。
其它实现方式中,从节点也可以只发送操作标识,主节点直接根据该操作标识返回操作记录,供从节点进行同步。
本实现方式中,主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点后还可以包括:将同步偏移信息发送给从节点。
这样可以保证在基于保存的操作记录进行增量同步后,从节点和主节点的同步偏移信息仍一致,这样后续从节点和主节点可以继续进行原生的增量同步。
实施例二、一种进行增量同步的方法,如图2所示,包括步骤S210~S220:
S210、在增量同步中断又恢复连接后,从节点根据当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
S220、所述从节点根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
本实施例可以但不限于使用在Redis的主从同步中;可以由从节点上的Redis主线程进行上述步骤S210和S220。
本实施例中,主节点和从节点可以是不同的数据库实例。
本实施例是针对增量同步过程中,主、从节点之间的连接中断又恢复的情况,提出的同步方案;在增量同步之前,主、从节点之间通常已经通过RDB进行过全量同步;全量同步后可以只进行增量同步;对于从节点,所述增量同步可以是指:从节点在和主节点进行过全量同步后,根据主节点所发送的全量同步后的每次操作的操作记录,进行和主节点同样的操作,从而和主节点保持同步。其中,全量同步可以是指所述主节点和所述从节点之间一次性同步全部数据。
本实施例中,操作标识是全局唯一的,即操作标识和操作记录是一一对应的,这也就意味着操作标识和每次的操作也可以一一对应。
本实施例中,可以在主节点生成或保存一条操作记录时,产生该条操作记录的操作标识。
本实施例中,主节点中每进行一次操作,都会相应保存操作记录,保存时也保存操作记录的操作标识。
本实施例中,主节点可以分一次或多次将操作记录返回给从节点。
一种实现方式中,从节点根据当前已同步的操作记录,向主节点发送操作标识可以包括:
向主节点发送当前待同步的操作记录的操作标识;其中,当前待同步的操作记录是从节点已收到的最后一条操作记录的下一条操作记录。
本实现方式中,相当于从节点告知主节点自己所期望同步的操作记录是哪一条,主节点可以将从当前待同步的操作记录开始,到主节点上最后一条操作记录为止的各条操作记录发送给从节点。
本实现方式中,操作记录的操作标识可以按照预定规则产生,或者各操作记录的操作标识具有固定的变化规律,这样从节点可以根据该预定规则或固定的变化规律,来确定当前待同步的操作记录的操作标识。
其它实现方式中,从节点根据当前已同步的操作记录,向主节点发送操作标识也可以包括:从节点将已收到的最后一条操作记录的操作标识发送给主节点。
该实现方式中,相当于从节点告知主节点自己已经同步到哪一条操作记录,主节点可以将从节点已收到的最后一条操作记录的下一条操作记录开始,到主节点上最后一条操作记录为止的各条操作记录发送给从节点。
该实现方式中,操作记录的操作标识可以按照预定规则产生,或者各操作记录的操作标识具有固定的变化规律,这样主节点可以根据该预定规则或固定的变化规律,来确定从节点已收到的最后一条操作记录的下一条操作记录的操作标识。
一种实现方式中,操作标识可以是操作记录的顺序号。
本实现方式中,上述当前待同步的操作记录的操作标识可以等于:从节点已收到的最后一条操作记录的操作标识加1。
本实现方式中,顺序号可以是描述操作记录产生或保存的顺序的编号;比如第一条操作记录的顺序号为1,第二条操作记录的顺序号2;再比如第一条操作记录的顺序号为number,第二条操作记录的顺序号为number+1。
本实现方式中,顺序号可以但不限于采用十进制形式;也可以采用十六进制或其它形式。
其它实现方式中,也可以不用顺序号作为操作标识,比如可以每个操作记录的操作标识,是前一条操作记录的操作标识加x,这样当前待同步的操作记录的操作标识可以等于:从节点已收到的最后一条操作记录的操作标识加x。再比如操作记录的操作标识是按照预定规则生成的,比如将以顺序号为自变量的函数值作为操作标识,根据该预定规则,可以确定当前待同步的操作记录的操作标识。
一种实现方式中,主节点返回的操作记录可以包括:主节点从日志文件中读取的操作记录,以及主节点从日志缓冲中读取的,还没有保存到日志文件中的操作记录。
本实现方式中,主节点可以将操作记录按顺序保存在日志文件中,一个日志文件的大小是有限的,当一个日志文件保存满后,主节点可以保存到下一个日志文件中;为了避免过多的输入输出,主节点可以将要保存在日志文件中的操作记录先保存在日志缓冲中,然后定期将日志缓冲中的操作记录保存到磁盘的日志文件中。
比如,当从节点发送的是当前待同步的操作记录的操作标识S时,主节点可以根据从节点发送的操作标识S,查找到包含同样操作标识的日志文件,并查找到操作标识S在该日志文件中的偏移(即所在位置);主节点根据查找结果,从查找到的日志文件中,相应偏移位置的操作记录开始读取,并发送给从节点;一个日志文件读取完则读取下一个日志文件,直到读取到当前最后一个日志文件中的最后一条操作记录,然后再将日志缓冲中的操作记录也发送给从节点。
一种实现方式中,上述方法还可以包括:
在增量同步中断又恢复连接后,从节点向主节点发送所记录的同步偏移信息;
当主节点根据同步偏移信息判断可以基于同步缓冲继续进行增量同步时,主节点返回的操作记录可以包括:主节点从同步缓冲中读取的操作记录。
本实现方式中,主节点可以优先考虑能否基于同步缓冲继续进行增量同步,即从节点发送的同步偏移信息之后的操作记录是否仍存在于同步缓冲中,如果仍存在则可以直接采用Redis原生的增量同步;如果不存在,则主节点再根据从节点发送的操作标识,读取操作记录返回给从节点。
其它实现方式中,从节点也可以只发送操作标识,主节点根据该操作标识返回操作记录,供从节点进行同步。
本实现方式中,从节点根据主节点返回的操作记录,执行相应操作后还可以包括:从节点根据主节点发送的同步偏移信息,更新所记录的同步偏移信息。
这样可以保证在基于保存的操作记录进行增量同步后,从节点和主节点的同步偏移信息仍一致,这样后续从节点和主节点可以继续进行原生的增量同步。
实施例三、一种进行增量同步的方法,如图3所示,包括步骤S310~S320:
S310、在增量同步中断又恢复连接后,从节点根据当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
S320、主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所保存的操作记录中包含操作标识;
S330、所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
S340、所述从节点根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录。
本例子中,S310、S340的实现细节可参见实施例二,S320、S330的实现细节可参见实施例一。
本实施例的一个例子的流程如图4所示;本例中的增量同步过程可称为AOFPSYNC。
图4中Slave代表从Redis节点,Master代表主Redis节点,图中描述了在主从同步中断恢复后,主Redis节点和从Redis节点的交互流程。简单起见,后文把主Redis节点称作Master,从Redis节点称作Slave。
本例中,假设Master和Slave在同步过程由于网络异常导致同步中断,当网络恢复后,Master和Slave会自动重连并进行增量同步,包括如下步骤301~311:
301、网络连接断开恢复后,Slave会自动重连Master,向Master发起连接。
302、Master接受(accept)后,创建Slave客户端(Client)结构。
303、Slave的同步状态机会由REDIS_REPL_CONNECT状态进入REDIS_REPL_CONNECTING状态,接着Slave会进行一些同步的“握手”操作,包括发送PING命令,进行权限(AUTH)认证,发送REPLCONF命令用于告知Master自己的监听的端口。
304、Master进行响应,比如相对于PING、AUTH、REPLCONF,相应反馈PONG、OK、ACK。
305、Slave开始尝试进行处理机同步(PSYNC)。Slave会发送PSYNC命令给Master;其中包括以下参数:Master的进程标识,比如<master_runnid>、Slave的同步偏移信息,比如<slave_repl_offset>、以及Slave当前待同步的操作记录的操作标识,比如<slave_next_opid>。
这里和Redis原本的同步相比,额外发送了Slave当前待同步的操作记录的操作标识,即Slave当前期望的next opid,这个opid和Master日志中的opid相对应,作为Master进行同步的基准。
其中,opid是操作记录的全局唯一标识,可以但不限于是操作记录的顺序号;也就是说,Master上的Redis进程运行中的每个操作都具有自己的opid,且各操作的opid是根据操作的发生顺序而依次排列的,比如第N+1次操作的opid=第N次操作的opid+1。
306、Master在接收到Slave发送过来的PSYNC命令后,会先判断是否可以进行基于同步buffer的增量同步;Master中维护一个名为repl-backlog的同步buffer,其中会保存一部分最近同步给Slave的操作记录;如果Slave所发送的slave_repl_offset之后的操作记录(也即是偏移slave_repl_offset+1开始的操作记录)仍然存在于同步buffer里面,那么认为能够进行基于同步buffer的增量同步,可以继续进行Redis原生的增量同步;如果不存在于同步buffer里面,则认为不能进行基于同步buffer的增量同步,尝试进行AOFPSYNC,回复Slave时携带AOF CONTINUE runnid;
Slave的同步状态机会由REDIS_REPL_CONNECTING状态进入REDIS_REPL_CONNECTED状态。
307、Master判断Slave发送的next opid是否在保存的opid范围内;Master在判断Slave发送的next opid在自己的opid范围内后创建后台线程来查找Slave发送的nextopid对应的日志文件名和日志偏移(即next opid在日志文件中的位置)。
其中,Master的opid范围是指,Master所保存的日志中所包含的所有opid;Master会在日志中记录各操作时,也记录各操作的opid;判断时,可以在日志中查找是否存在nextopid(即是否存在和next opid匹配的opid),如果存在则说明next opid在自己的opid范围内。
其中,后台线程可以创建后台任务(job)查找next opid。
使用后台线程的原因是,查找过程需要扫描所有的日志,并且要解析其中一个日志文件,当日志容量比较大时,耗时在数秒左右,如果在主线程中做,会导致Master挂死(hang)住。
其中,如果Master判断Slave发送的next opid不在自己保存的opid范围内,则也退回到全量同步。
308、后台线程在查找到结果(可以包含next opid的日志文件的名称和日志偏移)后,将结果同步给主线程,主线程会异步发送该结果,包括:创建发送日志所需要的context,为Slave注册可写事件,在每轮事件循环中异步地在查找到的日志文件中,从日志偏移处读取日志文件中的操作记录发送给Slave,当一个日志文件中的操作记录读取完毕后,会顺序的读取下一个日志文件中的操作记录,直到追上当前正在写进日志文件的操作记录。
比如图4中,日志文件有AOF 1~AOF n,查找到的日志文件假设为AOF 6,则本步骤是从AOF 6中日志偏移处开始读取发送操作记录,一直到AOF n中的操作记录也读取发送完为止。
309、Master在日志发送完成后,同步aof_buf给Slave。
由于Redis在将操作记录写入日志文件时,是先写入到内存中的一段缓冲中,本例中将这段缓冲称为aof_buf,然后通常再每秒一次将aof_buf中的操作记录写到磁盘上的日志文件里,这样做的目的尽量避免相对较慢的输入输出(Input Output,IO)操作所带来的主线程等待,毕竟Redis是单线程处理请求。所以,在读取完最新的日志文件后,需要将aof_buf(即还没写到日志文件中的操作记录)也同步给Slave,否则会出现数据不一致。
Master进入REDIS_REPL_ONLINE状态。
310、Master同步repl offset给Slave。
本例设计成能够继续保留原有的基于同步buffer的增量同步方式的方案,毕竟在网络偶然抖动场景下,这种同步方式是最快的。考虑到Redis在写入日志时对带过期时间的命令做了特殊处理,会把所有过期时间的命令转换为PEXPIREAT命令,以保证数据的精确性,这会导致日志中记录的命令的字节序列和实时同步给Slave的是不一样的,所以需要主动同步Master的复制偏移repl offset给Slave,保证下次同步中断,进行基于同步buffer的增量同步时,Slave发送过来的repl offset和Master的记录是一致的。
311、Slave反馈OK给Master。
当Slave接收到同步偏移后,正确的更新自己的同步偏移,一次AOF PSYNC结束。
本例中,Slave在接收到Master发送的操作记录(无论是日志文件中读取的,还是aof_buf中)后,会根据这些操作记录进行持久化,从而完成和Master的同步。
本例中,在增量同步中断又恢复后,即使出现了同步buffer不可用,也不会降级进行全量同步,而是进行基于Master本地磁盘日志的增量同步,进而可以避免主Redis节点上所产生的大量CPU、磁盘、网络带宽开销,并保证主Redis节点的可用性。
实施例四、一种进行增量同步的装置,包括:第一处理器和第一存储器;
所述第一存储器用于保存用于进行主节点增量同步的程序;所述用于进行主节点增量同步的程序在被所述第一处理器读取执行时,进行如下操作:
在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
一种实现方式中,所述从节点发送的操作标识可以是当前待同步的操作记录的操作标识;
根据从节点发送的操作标识在所保存的操作记录中进行查找可以包括:
在所保存的操作记录中,查找操作标识与从节点所发送的操作标识匹配的操作记录,作为所述当前待同步的操作记录。
一种实现方式中,操作标识可以但不限于是操作记录的顺序号。
一种实现方式中,所述将所查找到的从当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点可以包括:
在所查找到的当前待同步的操作记录所在的日志文件中,从当前待同步的操作记录开始,读取操作记录发送给从节点;
当一个日志文件中的操作记录发送完后,继续读取下一个日志文件中的操作记录发送给从节点,直到最后一个日志文件中的操作记录也发送完;
将日志缓冲中的操作记录发送给从节点。
本实现方式中,根据从节点发送的操作标识在所保存的操作记录中进行查找可以包括:
生成后台线程,根据所述从节点发送的操作标识,查找当前待同步的操作记录所在的日志文件,以及当前待同步的操作记录在该日志文件中的偏移。
一种实现方式中,所述用于进行主节点增量同步的程序在被所述第一处理器读取执行时,还进行如下操作:
在根据从节点发送的操作标识在所保存的操作记录中进行查找前,根据从节点发送的同步偏移信息,判断是否能够基于同步缓冲继续进行增量同步,如果不能,则进行所述根据从节点发送的操作标识在所保存的操作记录中进行查找的操作。
本实现方式中,将所查找到的从当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点后,还可以将同步偏移信息发送给从节点。
本实施例中,所述用于进行主节点增量同步的程序在被所述第一处理器读取执行时进行的操作,可以对应于实施例一的S110~S120,其它实现细节可参见实施例一。
实施例五、一种进行增量同步的装置,包括:第二处理器和第二存储器;
所述第二存储器用于保存用于进行从节点增量同步的程序;所述用于进行从节点增量同步的程序在被所述第二处理器读取执行时,进行如下操作:
在增量同步中断又恢复连接后,根据从节点当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
一种实现方式中,所述根据当前已同步的操作记录,向主节点发送操作标识包括:
向主节点发送当前待同步的操作记录的操作标识;其中,当前待同步的操作记录是从节点已收到的最后一条操作记录的下一条操作记录。
一种实现方式中,所述用于进行从节点增量同步的程序在被所述第二处理器读取执行时,还可以进行如下操作:
在增量同步中断又恢复连接后,向主节点发送从节点所记录的同步偏移信息;
根据主节点返回的操作记录,执行相应操作后,根据主节点发送的同步偏移信息,更新从节点所记录的同步偏移信息。
本实施例中,所述用于进行从节点增量同步的程序在被所述第二处理器读取执行时进行的操作,可以对应于实施例二的S210~S220,其它实现细节可参见实施例二。
实施例六、一种进行增量同步的装置,如图5所示,包括:
查找模块61,用于在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
发送模块62,用于将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
一种实现方式中,所述从节点发送的操作标识可以是当前待同步的操作记录的操作标识;
根据从节点发送的操作标识在所保存的操作记录中进行查找可以包括:
在所保存的操作记录中,查找操作标识与从节点所发送的操作标识匹配的操作记录,作为所述当前待同步的操作记录。
一种实现方式中,操作标识可以但不限于是操作记录的顺序号。
一种实现方式中,所述发送模块将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点包括:
所述发送模块在所查找到的当前待同步的操作记录所在的日志文件中,从当前待同步的操作记录开始,读取操作记录发送给从节点;当一个日志文件中的操作记录发送完后,继续读取下一个日志文件中的操作记录发送给从节点,直到最后一个日志文件中的操作记录也发送完;将日志缓冲中的操作记录发送给从节点。
本实现方式中,根据从节点发送的操作标识在所保存的操作记录中进行查找可以包括:
生成后台线程,根据所述从节点发送的操作标识,查找当前待同步的操作记录所在的日志文件,以及当前待同步的操作记录在该日志文件中的偏移。
一种实现方式中,所述的装置还可以包括:
判断模块,用于在所述查找模块根据从节点发送的操作标识在所保存的操作记录中进行查找前,根据从节点发送的同步偏移信息,判断是否能够基于同步缓冲继续进行增量同步,如果不能,则指示所述查找模块进行所述根据从节点发送的操作标识在所保存的操作记录中进行查找的操作。
本实现方式中,所述发送模块还可以用于在将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点后将同步偏移信息发送给所述从节点。
本实施例中,查找模块、发送模块进行的操作可以分别对应于实施例一的S110、S120,其它实现细节可参见实施例一。
实施例七、一种进行增量同步的装置,如图6所示,包括:
发起模块71,用于在增量同步中断又恢复连接后,根据从节点当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
同步模块72,用于根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
一种实现方式中,所述根据当前已同步的操作记录,向主节点发送操作标识可以包括:
向主节点发送当前待同步的操作记录的操作标识;其中,当前待同步的操作记录是从节点已收到的最后一条操作记录的下一条操作记录。
一种实现方式中,所述发起模块还可以用于在增量同步中断又恢复连接后,向主节点发送从节点所记录的同步偏移信息;
所述同步模块还可以用于在根据主节点返回的操作记录,执行相应操作后,根据主节点发送的同步偏移信息,更新从节点所记录的同步偏移信息。
本实施例中,发起模块、同步模块进行的操作可以分别对应于实施例二的S210、S220,其它实现细节可参见实施例二。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。
Claims (18)
1.一种进行增量同步的方法,包括:
在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
2.如权利要求1所述的方法,其特征在于:
所述增量同步是指所述主节点将全量同步后每次操作的操作记录发送给所述从节点,以使所述从节点和所述主节点保持同步;其中,所述全量同步是指所述主节点和所述从节点之间一次性同步全部数据。
3.如权利要求1所述的方法,其特征在于:所述从节点发送的操作标识是当前待同步的操作记录的操作标识;
根据从节点发送的操作标识在所保存的操作记录中进行查找包括:
在所保存的操作记录中,查找操作标识与从节点所发送的操作标识匹配的操作记录,作为所述当前待同步的操作记录。
4.如权利要求1所述的方法,其特征在于:
操作标识是操作记录的顺序号。
5.如权利要求1所述的方法,其特征在于,所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点包括:
所述主节点在所查找到的当前待同步的操作记录所在的日志文件中,从当前待同步的操作记录开始,读取操作记录发送给从节点;
当一个日志文件中的操作记录发送完后,所述主节点继续读取下一个日志文件中的操作记录发送给从节点,直到最后一个日志文件中的操作记录也发送完;
所述主节点将日志缓冲中的操作记录发送给从节点。
6.如权利要求5所述的方法,其特征在于,所述主节点根据从节点发送的操作标识在所保存的操作记录中进行查找包括:
所述主节点生成后台线程,根据所述从节点发送的操作标识,查找当前待同步的操作记录所在的日志文件,以及当前待同步的操作记录在该日志文件中的偏移。
7.如权利要求1所述的方法,其特征在于,所述主节点根据从节点发送的操作标识在所保存的操作记录中进行查找前还包括:
所述主节点根据从节点发送的同步偏移信息,判断是否能够基于同步缓冲继续进行增量同步,如果不能,则进行所述根据从节点发送的操作标识在所保存的操作记录中进行查找的操作。
8.如权利要求7所述的方法,其特征在于,所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点后还包括:
所述主节点将同步偏移信息发送给所述从节点。
9.一种进行增量同步的方法,包括:
在增量同步中断又恢复连接后,从节点根据当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
所述从节点根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
10.如权利要求9所述的方法,其特征在于,所述根据当前已同步的操作记录,向主节点发送操作标识包括:
向主节点发送当前待同步的操作记录的操作标识;其中,当前待同步的操作记录是从节点已收到的最后一条操作记录的下一条操作记录。
11.如权利要求9所述的方法,其特征在于,还包括:
在增量同步中断又恢复连接后,从节点向主节点发送所记录的同步偏移信息;
从节点根据主节点返回的操作记录,执行相应操作后还包括:从节点根据主节点发送的同步偏移信息,更新所记录的同步偏移信息。
12.一种进行增量同步的装置,包括:第一处理器和第一存储器;
其特征在于:
所述第一存储器用于保存用于进行主节点增量同步的程序;所述用于进行主节点增量同步的程序在被所述第一处理器读取执行时,进行如下操作:
在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
所述主节点将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
13.如权利要求12所述的装置,其特征在于,所述将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点包括:
在所查找到的当前待同步的操作记录所在的日志文件中,从当前待同步的操作记录开始,读取操作记录发送给从节点;
当一个日志文件中的操作记录发送完后,继续读取下一个日志文件中的操作记录发送给从节点,直到最后一个日志文件中的操作记录也发送完;
将日志缓冲中的操作记录发送给从节点。
14.如权利要求12所述的装置,其特征在于,所述用于进行主节点增量同步的程序在被所述第一处理器读取执行时,还进行如下操作:
在根据从节点发送的操作标识在所保存的操作记录中进行查找前,根据从节点发送的同步偏移信息,判断是否能够基于同步缓冲继续进行增量同步,如果不能,则进行所述根据从节点发送的操作标识在所保存的操作记录中进行查找的操作;
将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给从节点后,将同步偏移信息发送给从节点。
15.一种进行增量同步的装置,包括:第二处理器和第二存储器;
其特征在于:
所述第二存储器用于保存用于进行从节点增量同步的程序;所述用于进行从节点增量同步的程序在被所述第二处理器读取执行时,进行如下操作:
在增量同步中断又恢复连接后,根据从节点当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
16.如权利要求15所述的装置,其特征在于,所述用于进行从节点增量同步的程序在被所述第二处理器读取执行时,还进行如下操作:
在增量同步中断又恢复连接后,向主节点发送从节点所记录的同步偏移信息;
根据主节点返回的操作记录,执行相应操作后,根据主节点发送的同步偏移信息,更新从节点所记录的同步偏移信息。
17.一种进行增量同步的装置,其特征在于,包括:
查找模块,用于在增量同步中断又恢复连接后,主节点根据从节点发送的操作标识在所保存的操作记录中进行查找;其中,所述操作标识是操作记录的全局唯一标识;所保存的操作记录中包含操作标识;
发送模块,用于将从所查找到的当前待同步的操作记录开始,直到所保存的最后一条操作记录为止的各条操作记录发送给所述从节点;其中,所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
18.一种进行增量同步的装置,其特征在于,包括:
发起模块,用于在增量同步中断又恢复连接后,根据从节点当前已同步的操作记录,向主节点发送操作标识;其中,所述操作标识是操作记录的全局唯一标识;
同步模块,用于根据主节点返回的操作记录,执行相应操作;其中,主节点返回的操作记录包括从当前待同步的操作记录开始,直到主节点所保存的最后一条操作记录为止的各条操作记录;所述当前待同步的操作记录是所述从节点已收到的最后一条操作记录的下一条操作记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710911283.9A CN110019510A (zh) | 2017-09-29 | 2017-09-29 | 一种进行增量同步的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710911283.9A CN110019510A (zh) | 2017-09-29 | 2017-09-29 | 一种进行增量同步的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110019510A true CN110019510A (zh) | 2019-07-16 |
Family
ID=67186361
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710911283.9A Pending CN110019510A (zh) | 2017-09-29 | 2017-09-29 | 一种进行增量同步的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019510A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825758A (zh) * | 2019-10-31 | 2020-02-21 | 中国银联股份有限公司 | 一种交易处理的方法及装置 |
CN111680100A (zh) * | 2020-04-30 | 2020-09-18 | 聚好看科技股份有限公司 | redis数据同步方法及服务器 |
CN112925848A (zh) * | 2021-02-23 | 2021-06-08 | 马上消费金融股份有限公司 | 一种数据同步方法、装置、设备及可读存储介质 |
CN112966046A (zh) * | 2021-03-03 | 2021-06-15 | 北京金山云网络技术有限公司 | 数据同步方法和装置、电子设备和存储介质 |
CN113885780A (zh) * | 2021-02-10 | 2022-01-04 | 京东科技控股股份有限公司 | 数据同步方法、装置、电子设备、系统和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102098342A (zh) * | 2011-01-31 | 2011-06-15 | 华为技术有限公司 | 一种基于事务级的数据同步方法、装置及系统 |
CN106407214A (zh) * | 2015-08-02 | 2017-02-15 | 郑建锋 | 分布式存储方法与系统 |
CN106407356A (zh) * | 2016-09-07 | 2017-02-15 | 网易(杭州)网络有限公司 | 一种数据备份方法及装置 |
US20170154093A1 (en) * | 2015-11-27 | 2017-06-01 | Netapp Inc. | Non-disruptive baseline and resynchronization of a synchronous replication relationship |
-
2017
- 2017-09-29 CN CN201710911283.9A patent/CN110019510A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102098342A (zh) * | 2011-01-31 | 2011-06-15 | 华为技术有限公司 | 一种基于事务级的数据同步方法、装置及系统 |
CN106407214A (zh) * | 2015-08-02 | 2017-02-15 | 郑建锋 | 分布式存储方法与系统 |
US20170154093A1 (en) * | 2015-11-27 | 2017-06-01 | Netapp Inc. | Non-disruptive baseline and resynchronization of a synchronous replication relationship |
CN106407356A (zh) * | 2016-09-07 | 2017-02-15 | 网易(杭州)网络有限公司 | 一种数据备份方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825758A (zh) * | 2019-10-31 | 2020-02-21 | 中国银联股份有限公司 | 一种交易处理的方法及装置 |
WO2021082925A1 (zh) * | 2019-10-31 | 2021-05-06 | 中国银联股份有限公司 | 一种交易处理的方法及装置 |
CN111680100A (zh) * | 2020-04-30 | 2020-09-18 | 聚好看科技股份有限公司 | redis数据同步方法及服务器 |
CN111680100B (zh) * | 2020-04-30 | 2023-02-28 | 聚好看科技股份有限公司 | redis数据同步方法及服务器 |
CN113885780A (zh) * | 2021-02-10 | 2022-01-04 | 京东科技控股股份有限公司 | 数据同步方法、装置、电子设备、系统和存储介质 |
CN112925848A (zh) * | 2021-02-23 | 2021-06-08 | 马上消费金融股份有限公司 | 一种数据同步方法、装置、设备及可读存储介质 |
CN112925848B (zh) * | 2021-02-23 | 2024-02-06 | 马上消费金融股份有限公司 | 一种数据同步方法、装置、设备及可读存储介质 |
CN112966046A (zh) * | 2021-03-03 | 2021-06-15 | 北京金山云网络技术有限公司 | 数据同步方法和装置、电子设备和存储介质 |
CN112966046B (zh) * | 2021-03-03 | 2024-04-12 | 北京金山云网络技术有限公司 | 数据同步方法和装置、电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110019510A (zh) | 一种进行增量同步的方法及装置 | |
EP3754514B1 (en) | Distributed database cluster system, data synchronization method and storage medium | |
US7613740B2 (en) | Control of a data replication engine using attributes associated with a transaction | |
CN108170768B (zh) | 数据库同步方法、装置及可读介质 | |
JP2022095645A (ja) | 異種ターゲットに対して使用するために分散型データソースからの変更データをキャプチャするためのシステムおよび方法 | |
CN104951474B (zh) | 一种用于获取MySQL binlog增量日志的方法和装置 | |
US20060200533A1 (en) | High availability designated winner data replication | |
US7330859B2 (en) | Database backup system using data and user-defined routines replicators for maintaining a copy of database on a secondary server | |
US9251233B2 (en) | Merging an out of synchronization indicator and a change recording indicator in response to a failure in consistency group formation | |
CN110071821A (zh) | 备用节点的指定 | |
US20150263909A1 (en) | System and method for monitoring a large number of information processing devices in a communication network | |
CN108628717A (zh) | 一种数据库系统及监控方法 | |
WO2014059804A1 (zh) | 数据同步方法及系统 | |
CN113220795B (zh) | 基于分布式存储的数据处理方法、装置、设备以及介质 | |
CN107018185A (zh) | 云存储系统的同步方法和装置 | |
CN111597197B (zh) | 数据库之间的数据对账方法和装置、存储介质及电子设备 | |
CN109639773A (zh) | 一种动态构建的分布式数据集群控制系统及其方法 | |
EP3696658B1 (en) | Log management method, server and database system | |
CN113190620B (zh) | Redis集群之间数据的同步方法、装置、设备及存储介质 | |
CN107436904B (zh) | 数据获取方法、数据获取设备和计算机可读存储介质 | |
CN113297173B (zh) | 分布式数据库集群管理方法及装置、电子设备 | |
CN115220941A (zh) | 对数据管道采用数据沿袭捕获的回滚恢复 | |
CN113157701A (zh) | 一种oracle数据库的双活机制部署方法及装置 | |
CN110825758B (zh) | 一种交易处理的方法及装置 | |
CN112187889A (zh) | 一种数据同步方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40010837 Country of ref document: HK |