CN115033642A - 一种Redis集群的数据同步的方法和装置 - Google Patents
一种Redis集群的数据同步的方法和装置 Download PDFInfo
- Publication number
- CN115033642A CN115033642A CN202210585335.9A CN202210585335A CN115033642A CN 115033642 A CN115033642 A CN 115033642A CN 202210585335 A CN202210585335 A CN 202210585335A CN 115033642 A CN115033642 A CN 115033642A
- Authority
- CN
- China
- Prior art keywords
- redis
- qjm
- node
- data synchronization
- master node
- 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
- 238000000034 method Methods 0.000 title claims abstract description 76
- 230000004044 response Effects 0.000 claims abstract description 12
- 238000004590 computer program Methods 0.000 claims description 8
- 230000015654 memory Effects 0.000 claims description 8
- 230000002159 abnormal effect Effects 0.000 claims description 7
- 239000000872 buffer Substances 0.000 claims description 7
- 230000000977 initiatory effect Effects 0.000 claims description 7
- 230000003993 interaction Effects 0.000 claims description 4
- 238000012795 verification Methods 0.000 claims description 4
- 230000010076 replication Effects 0.000 abstract description 5
- 230000008569 process Effects 0.000 description 16
- 230000006870 function Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 3
- 101001006776 Homo sapiens Kinesin-like protein KIFC1 Proteins 0.000 description 2
- 102100027942 Kinesin-like protein KIFC1 Human genes 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 239000003999 initiator Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000005291 magnetic effect Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000003936 working memory Effects 0.000 description 1
Images
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
-
- 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/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的目的是提供一种Redis集群的数据同步的方法和装置。所述方法包括Redis主节点执行的以下步骤:响应于用户侧的写入请求,Redis主节点将该写入请求转换为相应的写入到QJM的写入操作;Redis主节点向QJM发起该写入操作;响应于QJM返回的写入成功的消息,Redis主节点向用户侧发送写入操作成功的消息。本申请实施例具有以下优点:通过在Redis集群中引入QJM,使得Redis主节点和Redis从节点的数据同步方式由原有的异步复制的方式变更为Redis主节点写QJM,Redis从节点读QJM,该数据同步方式能够保证Redis主从节点数据的一致性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种Redis集群的数据同步的方法和装置。
背景技术
Redis(REmote DIctionary Server)作为当前流行的键-值存储系统,支持string,hash,set,zset,list等数据结构。
基于现有技术的方案,Redis集群的数据同步方案是异步复制的方式,该方式无法保障Redis主节点异常的情况下Redis从节点的数据和Redis主节点保持一致。而对于许多行业,特别是金融行业,Redis不仅仅作为缓存,也被作为数据库来使用,需要持久化永久保留数据,部分数据和用户信息强相关,需要确保数据的强一致性。
发明内容
本发明的目的是提供一种Redis集群的数据同步的方法和装置。
根据本申请的实施例,提供了一种Redis集群的数据同步的方法,其中,所述方法应用于Redis集群的Redis主节点,所述方法包括:
响应于用户侧的写入请求,Redis主节点将该写入请求转换为相应的写入到QJM的写入操作;
Redis主节点向QJM发起该写入操作;
响应于QJM返回的写入成功的消息,Redis主节点向用户侧发送写入操作成功的消息。
根据本申请的实施例,提供了一种Redis集群的数据同步的方法,其中,所述方法应用于Redis集群的QJM,所述方法包括:
基于Redis主节点发起的写入操作,QJM在内部的各个日志节点之间进行数据同步。
根据本申请的实施例,提供了一种Redis集群的数据同步的方法,其中,所述方法应用于Redis从节点,所述方法包括:
Redis从节点从QJM异步读取数据,以进行数据同步。
根据本申请的实施例,提供了一种用于Redis集群数据同步的第一装置,其中,所述第一装置应用于Redis集群的Redis主节点,所述第一装置包括:
用于响应于用户侧的写入请求,将该写入请求转换为相应的写入到QJM的写入操作的装置;
用于向QJM发起该写入操作的装置;
用于响应于QJM返回的写入成功的消息,向用户侧发送写入操作成功的消息的装置。
根据本申请的实施例,提供了一种用于Redis集群数据同步的第二装置,其中,所述第二装置应用于Redis集群的QJM,所述第二装置包括:
用于基于Redis主节点发起的写入操作,在内部的各个日志节点之间进行数据同步的装置。
根据本申请的实施例,提供了一种用于Redis集群数据同步的第三装置,其中,所述第三装置应用于Redis集群的Redis从节点,所述第三装置包括:
用于从QJM异步读取数据,以进行数据同步的装置。
根据本申请的实施例,提供了一种用于Redis集群数据同步的系统,所述系统包括多个根据本实施例的Redis主节点、根据本实施例的Redis从节点、根据本实施例的QJM。
根据本申请的实施例,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现本申请实施例的方法。
根据本申请的实施例,提供了一种计算机可读的存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现本申请实施例的方法。
与现有技术相比,本申请实施例具有以下优点:通过在Redis集群中引入QJM,使得Redis主节点和Redis从节点的数据同步方式由原有的异步复制的方式变更为Redis主节点写QJM,Redis从节点读QJM,该数据同步方式能够保证Redis主从节点数据的一致性,即使Redis主节点出现故障并完全不可恢复,在发生主从切换后,其Redis从节点仍然能够获取到该Redis主节点故障之前的全量数据,从而与该Redis主节点数据保持一致,满足了Redis集群中对数据的强一致性的要求。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出了根据本申请实施例的一个示例性的系统的结构示意图;
图2示出了根据本申请实施例的Redis集群的数据同步的方法流程图;
图3示出了根据本申请实施例的Redis集群的数据同步的第一装置、第二装置和第三装置的结构示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在上下文中所称“计算机设备”,也称为“电脑”,是指可以通过运行预定程序或指令来执行数值计算和/或逻辑计算等预定处理过程的智能电子设备,其可以包括处理器与存储器,由处理器执行在存储器中预存的存续指令来执行预定处理过程,或是由ASIC、FPGA、DSP等硬件执行预定处理过程,或是由上述二者组合来实现。计算机设备包括但不限于服务器、个人电脑、笔记本电脑、平板电脑、智能手机等。
所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于电脑、智能手机、PDA等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本申请,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本申请。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。
需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本申请,也应包含在本申请保护范围以内,并以引用方式包含于此。
后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。
这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本申请的示例性实施例的目的。但是本申请可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。
应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。
应当理解的是,当一个单元被称为“连接”或“耦合”到另一单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。
这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。
还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
下面结合附图对本发明作进一步详细描述。
图1示出了根据本申请实施例的一个示例性的系统的结构示意图。
参照图1,该系统的Redis集群包括Redis主节点、Redis从节点和QJM(QuorumJournal Manager)模块。其中,QJM由一组奇数个数的日志节点(Journal Node)构成,日志节点两两之间会互相通信。每个日至节点具有一个对外的远程过程调用(RemoteProcedure Call,RPC)接口,以供Redis主节点或Redis从节点向QJM写入操作日志(editlog)或读取editlog。
其中,Redis主节点会将写请求写入到QJM,由QJM内部之间做数据强同步;Redis主节点会从QJM中持续同步数据。Redis集群中如果新增一个数据为空的Redis主节点,则也会从QJM同步数据。
图2示出了根据本申请实施例的用于的方法流程图。所述方法包括Redis主节点执行的步骤S101至步骤S103,由QJM执行的步骤S201,由Redis从节点执行的步骤S301。
参照图2,在步骤S101中,响应于用户侧的写入请求,Redis主节点将该写入请求转换为相应的写入到QJM的写入操作。
其中,用户侧先向Redis集群发送写入请求。接着,Redis主节点在步骤S101中响应于用户侧的写入请求,Redis主节点将该写入请求转换为相应的写入到QJM的写入操作。
其中,用户侧写入数据将直接写入到Redis主节点。
其中,所述写入操作为能够写入到QJM的远程过程调用(Remote Procedure Call,RPC)操作。其中,该写入操作主要涉及在QJM中写editlog的操作。
其中,所述写入操作携带的字段包括但不限于:
1)标识信息;该标识信息是每一条Redis写入请求的标识。
例如,用seqID表示每一条Redis写入请求的id,该seqID是一个48位的字符串,占用24个字节。并且,seqID的生成规则如下:
seqID的24个字节表示为:[0,1,2,3][4,5,6][7,8][9,13,14...20][21,22,23]几个部分;其中,0至3字节为时间戳,精确度为秒级别;4至6字节是主机的唯一标识符,一般是主机名称的哈希值,即获取到主机名称后,然后调用特定的哈希函数得到对应的value;7和8两个字节是产生seqID的PID进程号;9至20字节是即时产生的随机数;21至23的最后三个字节是自增计数器,用于确保相同进程同一秒内产生的ID是唯一的。
2)时间戳;该时间戳为生成以上标识信息的时间戳。优选地,该时间戳基于特定的时钟硬件,例如原子钟产生的时间,而非基于机器NTPF协议产生的时间,从而减小时间误差;
3)写入操作的类型信息;例如,SET,HSET等。
4)校验和;该校验和为以上各个字段的校验和。优选地,该校验和采用CRC16算法来计算,以确保数据传输的正确性和完整性。
根据本申请的第一示例,QJM的RPC写入操作携带4个字段seqID、ts、op、checksum,分别表示Redis写入请求的标识、时间戳、写入操作的类型和校验和。
根据本申请的一个实施例,Redis主节点通过定义两个大小相同的缓冲区,来同时执行本地写入和数据同步。具体地,Redis主节点针对本地写入和QJM的写入分别定义两个大小相同的缓冲区。
例如,定义两个大小相同的缓冲区,分别表示为bufferNow和bufferPrepare。通过缓冲器交换机制,即bufferNow在快达到大小的阈值且bufferPrepare的数据同步完成,则bufferPrepare的数据会清空,同时两者的指针相互交换,这样会将bufferPrepare的指针指向bufferNow去继续同步editlog。
继续参照图2进行说明,在步骤S102中,Redis主节点向QJM发起该写入操作。
在步骤S201中,基于Redis主节点发起的写入操作,QJM在内部的各个日志节点之间进行数据同步。
具体地,QJM在内部的各个日志节点之间通过paxos协议进行数据同步。
根据一个实施例,所述步骤S201之前包括步骤S202和步骤S203。
在步骤S202中,QJM对数据的有效性进行校验。
继续对第一示例进行说明,写入操作携带四个字段seqID、ts、op、checksum,分别表示Redis写入请求的标识、时间戳、写入操作的类型和校验和,QJM针对seqID、ts、op、checksum这四元组数据进行校验。
在步骤S203中,校验成功后,QJM针对每条写入消息分配标识信息。
如果校验失败,则QJM会向Redis主节点返回写入失败的消息。
接着,QJM在内部的各个日志节点之间进行数据同步。
根据一个实施例,所述方法还包括由QJM执行的步骤S204。
在步骤S204中,如果写入操作成功,QJM将向Redis主节点返回写入成功的消息。
并且,如果QJM半数以上日志节点同步到对应的写入操作,则该写入操作成功。
例如,需要得到半数以上日志节点的确认ack报文回复才算做写入操作成功。
优选地,Redis主节点在发起写入操作时预设一个超时时间的阈值,如果整体写入过程的时间已超过该阈值,则写入操作失败。
继续参照图2进行说明,在步骤S103中,响应于QJM返回的写入成功的消息,Redis主节点向用户侧发送写入操作成功的消息。
在步骤S301中,Redis从节点从QJM异步读取数据,以进行数据同步。
根据一个实施例,Redis从节点从QJM的每个日志节点获取editlog文件。接着,Redis从节点对数据的有效性进行校验。接着,Redis从节点按照日志顺序进行数据回放,以完成数据同步。
继续对第一示例进行说明,Redis从节点从每个日志节点获取editlog,每个日志节点按照写入消息的标识txid的数值由小到大进行排序,之后并入到一个集合中。接着,在各个日志节点之间,相同名字的日志文件也被并入到一个组,各个组之间再按照txid的数值由小到大进行排序,以便后面按照顺序进行日志回放。接着,Redis从节点对seqID、ts、op、checksum这四元组数据进行校验。接着,Redis从节点按照日志顺序进行数据回放,以完成数据同步。
优选地,如果Redis从节点的初始状态不带数据,则Redis从节点从Redis主节点同步一个快照存储(snapshot),然后从QJM中获取增量的数据。
根据一个实施例,所述方法还包括QJM执行的步骤S205。
在步骤S205中,如果QJM中生成的editlog文件的个数或大小超过预定阈值,则执行editlog文件的归并操作来合并或删除editlog文件。
例如,执行执行editlog文件的归并的流程如下:
步骤1:editlog文件的个数或大小超过预定阈值,则触发执行editlog文件的归并操作;
步骤2:在日志节点之间,在同一时间点只能由一个日志节点来执行该归并操作;并且,日志节点执行归并操作的规则如下:
a)每个日志节点发起归并操作的时候,都会通过原子钟获取到TrueTime,发起的时间最早的日志节点将优先执行归并操作;
b)执行归并操作前需要检查数据必须是最全的,若不是则无法继续执行归并操作;
c)通过fork函数派生一个独立的进程来执行归并操作,避免阻塞主流程。并且对于多个editlog合并的时候,旧的editlog不会再被日志节点在同一时间访问,因而无需加锁,而最新的editlog文件会有可能要同时被写入,因而需要临时加文件锁。归并完成后,文件锁自然释放;
d)整个editlog归并逻辑与Redis原生的日志模式(AOF)文件的归并相类似。例如,在执行归并时,对于四元组seqID/ts/op/checksum,如前一条op1为set key1 value1,后一条op2为set key2 value2,则两条最终会进行归并,生成新的seqID,ts则沿用时间戳靠后的,op也只会保留时间戳最靠后的,而checksum会按照新的seqID/ts/op,并基于CRC16生成一个新的checksum,这样一次归并操作即完成;
e)归并完成后,将旧的文件通过对文件加硬连接以及ftruncate函数的方式删除文件,减少删除无用editlog文件时候带来的磁盘IO开销;
步骤3:归并完成后的日志节点将合并后的editlog文件名和内容,以及需要操作的editlog信息,按照一定格式同步至其余的日志节点;
步骤4:其余的日志节点收到以上信息后,回放执行对应的editlog合并以及无用editlog删除操作。
通过执行editlog文件的归并操作,能够避免避免文件数目过多或者单个文件条数过多,节省了存储空间。
根据一个实施例,如果QJM的日志节点出现异常,通过与Redis主节点或从节点的交互使其屏蔽故障的日志节点或感知已恢复的日志节点。
例如,Redis集群和QJM基于以下规则来应对QJM日志节点异常的情况:
如果当单个日志节点出现网络不通,Redis主节点在写入时候最多重试用3次,重试都失败则会忽略掉这个日志节点的editlog写入(QJM中大于半数以上的日志节点处于健康状态);
如果异常的日志节点的网络恢复,则Redis主节点会直接对该日志节点写入新的editlog文件,之前缺失的文件则不会补充,而是注明缺失的时间段和条数范围;
对于实例崩溃后重启恢复的日志节点,则日志节点在启动阶段会重新校验已有的editlog文件格式及内容,如果因为崩溃导致文件损坏,则在手动清空该日志节点中已有的editlog文件并初始化后,之后再将该日志节点加回到Redis集群当中。
根据本申请实施例的方法,通过在Redis集群中引入QJM,使得Redis主节点和Redis从节点的数据同步方式由原有的异步复制的方式变更为Redis主节点写QJM,Redis从节点读QJM,该数据同步方式能够保证Redis主从节点数据的一致性,即使Redis主节点出现故障并完全不可恢复,在发生主从切换后,其Redis从节点仍然能够获取到该Redis主节点故障之前的全量数据,从而与该Redis主节点数据保持一致,满足了Redis集群中对数据的强一致性的要求。
图3示出了根据本申请实施例的Redis集群的数据同步的第一装置、第二装置和第三装置的结构示意图。
其中,所述第一装置应用于Redis集群的Redis主节点;所述第二装置应用于Redis集群的QJM;所述第三装置应用于Redis集群的Redis从节点。
所述第一装置包括:用于响应于用户侧的写入请求,将该写入请求转换为相应的写入到QJM的写入操作的装置(以下简称“写入转换装置101”),用于向QJM发起该写入操作的装置(以下简称“写入发起装置102”),和用于响应于QJM返回的写入成功的消息,向用户侧发送写入操作成功的消息的装置(以下简称“成功返回装置103”)。
其中,所述第二装置包括用于基于Redis主节点发起的写入操作,在内部的各个日志节点之间进行数据同步的装置(以下简称“节点同步装置201”)。
其中,所述第三装置包括用于从QJM异步读取数据,以进行数据同步的装置(以下简称“数据同步装置301”)。
参照图3,响应于用户侧的写入请求,写入转换装置101将该写入请求转换为相应的写入到QJM的写入操作。
其中,用户侧先向Redis集群发送写入请求。接着,写入转换装置101响应于用户侧的写入请求,Redis主节点将该写入请求转换为相应的写入到QJM的写入操作。
其中,用户侧写入数据将直接写入到Redis主节点。
其中,所述写入操作为能够写入到QJM的远程过程调用(Remote Procedure Call,RPC)操作。其中,该写入操作主要涉及在QJM中写editlog的操作。
其中,所述写入操作携带的字段包括但不限于:
2)标识信息;该标识信息是每一条Redis写入请求的标识。
例如,用seqID表示每一条Redis写入请求的id,该seqID是一个48位的字符串,占用24个字节。并且,seqID的生成规则如下:
seqID的24个字节表示为:[0,1,2,3][4,5,6][7,8][9,13,14...20][21,22,23]几个部分;其中,0至3字节为时间戳,精确度为秒级别;4至6字节是主机的唯一标识符,一般是主机名称的哈希值,即获取到主机名称后,然后调用特定的哈希函数得到对应的value;7和8两个字节是产生seqID的PID进程号;9至20字节是即时产生的随机数;21至23的最后三个字节是自增计数器,用于确保相同进程同一秒内产生的ID是唯一的。
2)时间戳;该时间戳为生成以上标识信息的时间戳。优选地,该时间戳基于特定的时钟硬件,例如原子钟产生的时间,而非基于机器NTPF协议产生的时间,从而减小时间误差;
3)写入操作的类型信息;例如,SET,HSET等。
4)校验和;该校验和为以上各个字段的校验和。优选地,该校验和采用CRC16算法来计算,以确保数据传输的正确性和完整性。
根据本申请的一个实施例,Redis主节点通过定义两个大小相同的缓冲区,来同时执行本地写入和数据同步。具体地,Redis主节点针对本地写入和QJM的写入分别定义两个大小相同的缓冲区。
继续参照图2进行说明,写入发起装置102向QJM发起该写入操作。
基于Redis主节点发起的写入操作,节点同步装置201在内部的各个日志节点之间进行数据同步。
具体地,QJM在内部的各个日志节点之间通过paxos协议进行数据同步。
根据一个实施例,所述第二装置还包括之前包括用于对数据的有效性进行校验(以下简称“数据校验装置”)和校验成功后,QJM针对每条写入消息分配标识信息(以下简称“标识分配装置”)
数据校验装置对数据的有效性进行校验。
校验成功后,标识分配装置QJM针对每条写入消息分配标识信息。如果校验失败,则第二装置会向Redis主节点返回写入失败的消息。
接着节点同步装置201在QJM内部的各个日志节点之间进行数据同步。
根据一个实施例,所述第二装置还包括用于向Redis主节点返回写入成功的消息的装置(以下简称“消息返回装置204”)。
如果写入操作成功,消息返回装置204将向Redis主节点返回写入成功的消息。
并且,如果QJM半数以上日志节点同步到对应的写入操作,则该写入操作成功。
例如,需要得到半数以上日志节点的确认ack报文回复才算做写入操作成功。
优选地,Redis主节点在发起写入操作时预设一个超时时间的阈值,如果整体写入过程的时间已超过该阈值,则写入操作失败。
继续参照图3进行说明,响应于QJM返回的写入成功的消息,成功返回装置3向用户侧发送写入操作成功的消息。
数据同步装置301从QJM异步读取数据,以进行数据同步。
根据一个实施例,第三装置从QJM的每个日志节点获取editlog文件。接着,第三装置对数据的有效性进行校验。接着,第三装置按照日志顺序进行数据回放,以完成数据同步。
继续对第一示例进行说明,第三装置从每个日志节点获取editlog,每个日志节点按照写入消息的标识txid的数值由小到大进行排序,之后并入到一个集合中。接着,在各个日志节点之间,相同名字的日志文件也被并入到一个组,各个组之间再按照txid的数值由小到大进行排序,以便后面按照顺序进行日志回放。接着,第三装置对seqID、ts、op、checksum这四元组数据进行校验。接着,第三装置按照日志顺序进行数据回放,以完成数据同步。
优选地,如果Redis从节点的初始状态不带数据,则第三装置从Redis主节点同步一个快照存储(snapshot),然后从QJM中获取增量的数据。
根据一个实施例,所述第二装置还包括归并装置。
如果QJM中生成的editlog文件的个数或大小超过预定阈值,则归并装置执行editlog文件的归并操作来合并或删除editlog文件。
根据一个实施例,如果QJM的日志节点出现异常,第二装置通过与Redis主节点或从节点的交互使其屏蔽故障的日志节点或感知已恢复的日志节点。
根据一个实施例,如果QJM的日志节点出现异常,通过与Redis主节点或从节点的交互使其屏蔽故障的日志节点或感知已恢复的日志节点。
例如,Redis集群和QJM基于以下规则来应对QJM日志节点异常的情况:
如果当单个日志节点出现网络不通,Redis主节点的第一装置在写入时候最多重试用3次,重试都失败则会忽略掉这个日志节点的editlog写入(QJM中大于半数以上的日志节点处于健康状态);
如果异常的日志节点的网络恢复,则第一装置会直接对该日志节点写入新的editlog文件,之前缺失的文件则不会补充,而是注明缺失的时间段和条数范围;
对于实例崩溃后重启恢复的日志节点,则日志节点在启动阶段会重新校验已有的editlog文件格式及内容,如果因为崩溃导致文件损坏,则在手动清空该日志节点中已有的editlog文件并初始化后,之后再将该日志节点加回到Redis集群当中。
根据本申请实施例的装置,通过在Redis集群中引入QJM,使得Redis主节点和Redis从节点的数据同步方式由原有的异步复制的方式变更为Redis主节点写QJM,Redis从节点读QJM,该数据同步方式能够保证Redis主从节点数据的一致性,即使Redis主节点出现故障并完全不可恢复,在发生主从切换后,其Redis从节点仍然能够获取到该Redis主节点故障之前的全量数据,从而与该Redis主节点数据保持一致,满足了Redis集群中对数据的强一致性的要求。
本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个功能或步骤的电路。
另外,本发明的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本发明的方法和/或技术方案。而调用本发明的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本发明的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本发明的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (15)
1.一种Redis集群的数据同步的方法,其中,所述方法应用于Redis集群的Redis主节点,所述方法包括:
响应于用户侧的写入请求,Redis主节点将该写入请求转换为相应的写入到QJM的写入操作;
Redis主节点向QJM发起该写入操作;
响应于QJM返回的写入成功的消息,Redis主节点向用户侧发送写入操作成功的消息。
2.根据权利要求1所述的方法,其中,所述方法包括:
Redis主节点通过定义两个大小相同的缓冲区,来同时执行本地写入和数据同步。
3.一种Redis集群的数据同步的方法,其中,所述方法应用于Redis集群的QJM,所述方法包括:
基于Redis主节点发起的写入操作,QJM在内部的各个日志节点之间进行数据同步。
4.根据权利要求3所述的方法,其中,所述方法还包括:
QJM对数据的有效性进行校验;
校验成功后,QJM针对每条写入消息分配标识信息。
5.根据权利要求3或4所述的方法,其中,所述方法还包括:
如果写入操作成功,QJM将向Redis主节点返回写入成功的消息;
其中,如果QJM半数以上日志节点同步到对应的写入操作,则该写入操作成功。
6.根据权利要求3或4所述的方法,其中,所述方法还包括:
如果QJM中生成的editlog文件的个数或大小超过预定阈值,则执行editlog文件的归并操作来合并或删除editlog文件。
7.根据权利要求3或4所述的方法,其中,所述方法还包括:
如果QJM的日志节点出现异常,通过与Redis主节点或从节点的交互使其屏蔽故障的日志节点或感知已恢复的日志节点。
8.一种Redis集群的数据同步的方法,其中,所述方法应用于Redis从节点,所述方法包括:
Redis从节点从QJM异步读取数据,以进行数据同步。
9.根据权利要求所述的方法,其中,Redis从节点从QJM异步读取数据,以进行数据同步的步骤包括:
Redis从节点从QJM的每个日志节点获取editlog文件;
Redis从节点对数据的有效性进行校验;
Redis从节点按照日志顺序进行数据回放,以完成数据同步。
10.一种用于Redis集群数据同步的第一装置,其中,所述第一装置应用于Redis集群的Redis主节点,所述第一装置包括:
用于响应于用户侧的写入请求,将该写入请求转换为相应的写入到QJM的写入操作的装置;
用于向QJM发起该写入操作的装置;
用于响应于QJM返回的写入成功的消息,向用户侧发送写入操作成功的消息的装置。
11.一种用于Redis集群数据同步的第二装置,其中,所述第二装置应用于Redis集群的QJM,所述第二装置包括:
用于基于Redis主节点发起的写入操作,在内部的各个日志节点之间进行数据同步的装置。
12.一种用于Redis集群数据同步的第三装置,其中,所述第三装置应用于Redis集群的Redis从节点,所述第三装置包括:
用于从QJM异步读取数据,以进行数据同步的装置。
13.一种用于Redis集群数据同步的系统,所述系统包括多个如权利要求1或2所述的Redis主节点、如权利要求3至7中任一所述的Redis从节点、如权利要求8或9所述的QJM。
14.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1或2所述的方法;或者,所述处理器执行所述程序时实现如权利要求3至7中任一所述的方法;或者,所述处理器执行所述程序时实现如权利要求8或9所述的方法。
15.一种计算机可读的存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1或2所述的方法;或者,该程序被处理器执行时实现如权利要求3至7中任一所述的方法;或者,该程序被处理器执行时实现如权利要求8或9所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210585335.9A CN115033642A (zh) | 2022-05-26 | 2022-05-26 | 一种Redis集群的数据同步的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210585335.9A CN115033642A (zh) | 2022-05-26 | 2022-05-26 | 一种Redis集群的数据同步的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115033642A true CN115033642A (zh) | 2022-09-09 |
Family
ID=83120437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210585335.9A Pending CN115033642A (zh) | 2022-05-26 | 2022-05-26 | 一种Redis集群的数据同步的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115033642A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116431083A (zh) * | 2023-06-15 | 2023-07-14 | 成方金融科技有限公司 | 基于Redis的数据读写方法、装置、电子设备及介质 |
WO2024114105A1 (zh) * | 2022-11-30 | 2024-06-06 | 华为云计算技术有限公司 | 一种数据库的数据更新方法、系统及计算设备集群 |
WO2024152556A1 (zh) * | 2023-01-17 | 2024-07-25 | 华为技术有限公司 | 一种远程复制系统、方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8145838B1 (en) * | 2009-03-10 | 2012-03-27 | Netapp, Inc. | Processing and distributing write logs of nodes of a cluster storage system |
CN103268318A (zh) * | 2013-04-16 | 2013-08-28 | 华中科技大学 | 一种强一致性的分布式键值数据库系统及其读写方法 |
CN103500229A (zh) * | 2013-10-24 | 2014-01-08 | 北京奇虎科技有限公司 | 一种数据库同步方法和数据库系统 |
CN104980307A (zh) * | 2015-06-29 | 2015-10-14 | 小米科技有限责任公司 | 数据访问请求的处理方法、装置及数据库服务器 |
CN105159818A (zh) * | 2015-08-28 | 2015-12-16 | 东北大学 | 内存数据管理中日志恢复方法及其仿真系统 |
CN105227657A (zh) * | 2015-09-29 | 2016-01-06 | 北京京东尚科信息技术有限公司 | 一种数据同步的方法和装置 |
CN107168970A (zh) * | 2016-03-07 | 2017-09-15 | 中兴通讯股份有限公司 | 一种分布式文件系统hdfs的管理方法、装置及系统 |
CN107426265A (zh) * | 2016-03-11 | 2017-12-01 | 阿里巴巴集团控股有限公司 | 数据一致性同步的方法及设备 |
-
2022
- 2022-05-26 CN CN202210585335.9A patent/CN115033642A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8145838B1 (en) * | 2009-03-10 | 2012-03-27 | Netapp, Inc. | Processing and distributing write logs of nodes of a cluster storage system |
CN103268318A (zh) * | 2013-04-16 | 2013-08-28 | 华中科技大学 | 一种强一致性的分布式键值数据库系统及其读写方法 |
CN103500229A (zh) * | 2013-10-24 | 2014-01-08 | 北京奇虎科技有限公司 | 一种数据库同步方法和数据库系统 |
CN104980307A (zh) * | 2015-06-29 | 2015-10-14 | 小米科技有限责任公司 | 数据访问请求的处理方法、装置及数据库服务器 |
CN105159818A (zh) * | 2015-08-28 | 2015-12-16 | 东北大学 | 内存数据管理中日志恢复方法及其仿真系统 |
CN105227657A (zh) * | 2015-09-29 | 2016-01-06 | 北京京东尚科信息技术有限公司 | 一种数据同步的方法和装置 |
CN107168970A (zh) * | 2016-03-07 | 2017-09-15 | 中兴通讯股份有限公司 | 一种分布式文件系统hdfs的管理方法、装置及系统 |
CN107426265A (zh) * | 2016-03-11 | 2017-12-01 | 阿里巴巴集团控股有限公司 | 数据一致性同步的方法及设备 |
Non-Patent Citations (2)
Title |
---|
易柏胜: "基于zookeeper的虚拟机动态变更机制的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》, 15 December 2013 (2013-12-15), pages 33 - 37 * |
韦鹏程等: "《大数据时代Hadoop技术及应用分析》", 31 March 2019, 电子科技大学出版社, pages: 123 - 124 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024114105A1 (zh) * | 2022-11-30 | 2024-06-06 | 华为云计算技术有限公司 | 一种数据库的数据更新方法、系统及计算设备集群 |
WO2024152556A1 (zh) * | 2023-01-17 | 2024-07-25 | 华为技术有限公司 | 一种远程复制系统、方法及装置 |
CN116431083A (zh) * | 2023-06-15 | 2023-07-14 | 成方金融科技有限公司 | 基于Redis的数据读写方法、装置、电子设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110209726B (zh) | 分布式数据库集群系统、数据同步方法及存储介质 | |
CN115033642A (zh) | 一种Redis集群的数据同步的方法和装置 | |
RU2554847C2 (ru) | Контрольные точки для файловой системы | |
US8301600B1 (en) | Failover recovery in a distributed data store | |
CN112131237B (zh) | 数据同步方法、装置、设备及计算机可读介质 | |
CN110019514B (zh) | 数据同步方法、装置以及电子设备 | |
CN110569269A (zh) | 一种数据同步方法及系统 | |
CN111078667B (zh) | 一种数据迁移的方法以及相关装置 | |
US11748215B2 (en) | Log management method, server, and database system | |
JP6987340B2 (ja) | データベースのデータ変更要求処理方法及び装置 | |
US20120278429A1 (en) | Cluster system, synchronization controlling method, server, and synchronization controlling program | |
US20230315713A1 (en) | Operation request processing method, apparatus, device, readable storage medium, and system | |
EP4276651A1 (en) | Log execution method and apparatus, and computer device and storage medium | |
CN106815094B (zh) | 一种用于实现主备同步模式下事务提交的方法与设备 | |
CN113791934A (zh) | 数据的恢复方法、计算设备及存储介质 | |
CN110121712B (zh) | 一种日志管理方法、服务器和数据库系统 | |
CN110196788B (zh) | 一种数据读取方法、装置、系统及存储介质 | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN115328931A (zh) | 数据库集群数据校验方法、装置、存储介质及电子设备 | |
US11669501B2 (en) | Address mirroring of a file system journal | |
US20220035772A1 (en) | System and method for mirroring a file system journal | |
CN115698955A (zh) | 事务镜像的容错 | |
CN109857523B (zh) | 一种用于实现数据库高可用性的方法及装置 | |
CN111581023A (zh) | 银行内存数据处理方法及装置 | |
CN112181729A (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 |