(12)发明专利申请
(10)申请公布号 CN 112783694 A(43)申请公布日 2021.05.11
(21)申请号 202110138404.7(22)申请日 2021.02.01
(71)申请人 紫光云技术有限公司
地址 300459 天津市滨海新区高新区塘沽
海洋科技园汇祥道399号6号楼(72)发明人 王君
(74)专利代理机构 天津滨海科纬知识产权代理
有限公司 12211
代理人 杨正律(51)Int.Cl.
G06F 11/14(2006.01)G06F 16/27(2019.01)G06F 16/22(2019.01)
权利要求书1页 说明书5页 附图1页
(54)发明名称
一种高可用Redis的异地灾备方法
(57)摘要
本发明提供了一种高可用Redis的异地灾备方法,一套高可用Redis实例部署于数据中心A中,为一主N从M哨兵的架构,且M≥1、N≥1,一套单节点的Redis实例部署于数据中心B中,高可用的同步服务Server和同步服务client均部署于中心控制区,同步服务Server从高可用Redis实例中获取AOFbinlog,Redis实例开启AOF备份,同步服务Client则从同步服务Server处获取需要同步的数据,并且发送给异地的备份库实例备份,本发明所述的一种高可用Redis的异地灾备方法,能做到低时延,甚至没有时延的实时同步,保证业务不中断的高可用,支持多种Redis的HA架构,一主多从或一主多从多哨兵等,异地灾备,可以实现灾难恢复。
CN 112783694 ACN 112783694 A
权 利 要 求 书
1/1页
1.一种高可用Redis的异地灾备方法,其特征在于:包括数据中心和中心控制区,数据中心包括数据中心A和数据中心B,且数据中心A和数据中心B为物理隔离,一套高可用Redis
且M≥1、N≥1,一套单节点的Redis实例实例部署于数据中心A中,为一主N从M哨兵的架构,
部署于数据中心B中,高可用的同步服务Server和同步服务client均部署于中心控制区,同步服务Server从高可用Redis实例中获取AOF binlog,Redis实例开启AOF备份,同步服务Client则从同步服务Server处获取需要同步的数据,并且发送给异地的备份库实例备份。
2.根据权利要求1所述的一种高可用Redis的异地灾备方法,其特征在于:所述中心控制区中的不同同步服务server同一时间只能有一个处于running,其他的处于standby状态。
3.根据权利要求1所述的一种高可用Redis的异地灾备方法,其特征在于:所述中心控制区中同一时间只能由一个同步服务client进行get/ack/rollback操作。
4.根据权利要求1所述的一种高可用Redis的异地灾备方法,其特征在于:所述中心控制区同步服务Server和同步服务client的工作方法为:
①Server在启动的时候首先会向Zookeeper进行一次尝试启动判断;②哪个Sever创建临时节点成功,Zookeeper会通知Server启动成功,并设置该Server状态为Running;Sever就会启动对数据中心A中Redis数据库的监听,获取AOF binlog;
③其他的Server没有创建成功临时节点,设置该Server状态为Standby,并且监听创建成功的临时节点,以便Running状态的Server宕机后,及时补位,这就是Sever的主备切换;
④Client在启动的时候,首先会从Zookeeper上获取当前处于Running状态的Server,同时,Client会将自己的信息注册到Zookeeper的临时节点中,并且Client需要注册上述临时节点的监听,这样当Sever主备切换的时候,Client可以获取通知,以此来做相应的修改,连接新的Server;
⑤Client连接对应的Running状态的Server,消费Sever获取到的AOF binlog,然后通知异地的备份库进行AOF binlog追齐。
5.根据权利要求4所述的一种高可用Redis的异地灾备方法,其特征在于:所述步骤①Server在启动的时候首先会向Zookeeper进行一次尝试启动判断的具体做法是向Zookeeper创建一个相同的临时节点,哪个Server创建成功了,则让哪个Server启动,这里Zookeeper自己的机制可以保障有且只有一个Sever创建临时节点成功。
6.根据权利要求1所述的一种高可用Redis的异地灾备方法,其特征在于:所述同步服务Server从高可用Redis实例中获取AOF binlog,Redis实例开启AOF备份,同步服务Client则从同步服务Server处获取需要同步的数据的具体做法:
S1:从节点执行slaveof命令;S2:从节点内部的定时任务发现有主节点信息,开始使用Socket连接主节点;S3:连接建立成功后,从节点发送ping命令,且希望得到主节点pong命令响应,否则重试;
S4:如果主节点设置了权限,进行权限验证;如果验证失败,复制终止;S5:权限验证通过后,进行数据同步,主节点会把所有数据发送给从节点;S6:当主节点把已有的数据副本同步给从节点后,就会把在开始复制到复制完成期间的写命令发送给从节点,保证主从节点数据一致性。
2
CN 112783694 A
说 明 书
一种高可用Redis的异地灾备方法
1/5页
技术领域
[0001]本发明属于数据处理技术领域,尤其是涉及一种高可用Redis的异地灾备方法。背景技术
[0002]随着业务的发展,用户对业务系统的高可用要求越来越高,已经不满足于只能做到跨可用区的容灾,用户希望即使某个地域的系统都不可用了,还可用通过其它地域的系统继续提供服务,这就是跨地域容灾。目前常见的异地灾备方法分为本地主备和异地灾备两种,大多数是本地主备,本地主备的形式为:一主一备或者一主多备,传统的本地主备(如
如人为误操作、双机热备)并不能有效应对数据或者软件逻辑故障所造成的意外宕机情况,
网络病毒攻击等,异地灾备是将主库和备库放置在不同地方,并通过跨IDC同步,这种方法的缺点是延迟高,做不到实时的备份。发明内容
[0003]有鉴于此,本发明旨在提出一种高可用Redis的异地灾备方法,以有效的实现异地数据备份,且能够有效降低延迟。[0004]为达到上述目的,本发明的技术方案是这样实现的:[0005]一种高可用Redis的异地灾备方法,包括数据中心和中心控制区,数据中心包括数据中心A和数据中心B,且数据中心A和数据中心B为物理隔离,一套高可用Redis实例部署于数据中心A中,为一主N从M哨兵的架构,且M≥1、N≥1,一套单节点的Redis实例部署于数据中心B中,高可用的同步服务Server和同步服务client均部署于中心控制区,同步服务Server从高可用Redis实例中获取AOF binlog,Redis实例开启AOF备份,同步服务Client则从同步服务Server处获取需要同步的数据,并且发送给异地的备份库实例备份。[0006]进一步的,所述中心控制区中的不同同步服务server同一时间只能有一个处于running,其他的处于standby状态[0007]进一步的,所述中心控制区中同一时间只能由一个同步服务client进行get/ack/rollback操作
[0008]进一步的,所述中心控制区同步服务Server和同步服务client的工作方法为:[0009]①Server在启动的时候首先会向Zookeeper进行一次尝试启动判断;[0010]②哪个Sever创建临时节点成功,Zookeeper会通知Server启动成功,并设置该Server状态为Running;Sever就会启动对数据中心A中Redis数据库的监听,获取AOF binlog;
[0011]③其他的Server没有创建成功临时节点,设置该Server状态为Standby,并且监听创建成功的临时节点,以便Running状态的Server宕机后,及时补位,这就是Sever的主备切换;
[0012]④Client在启动的时候,首先会从Zookeeper上获取当前处于Running状态的Server,同时,Client会将自己的信息注册到Zookeeper的临时节点中,并且Client需要注
3
CN 112783694 A
说 明 书
2/5页
册上述临时节点的监听,这样当Sever主备切换的时候,Client可以获取通知,以此来做相应的修改,连接新的Server;
[0013]⑤Client连接对应的Running状态的Server,消费Sever获取到的AOF binlog,然后通知异地的备份库进行AOF binlog追齐。[0014]进一步的,所述步骤①Server在启动的时候首先会向Zookeeper进行一次尝试启动判断的具体做法是向Zookeeper创建一个相同的临时节点,哪个Server创建成功了,则让哪个Server启动,这里Zookeeper自己的机制可以保障有且只有一个Sever创建临时节点成功
[0015]进一步的,所述同步服务Server从高可用Redis实例中获取AOF binlog,Redis实例开启AOF备份,同步服务Client则从同步服务Server处获取需要同步的数据的具体做法:[0016]S1:从节点执行slaveof命令;[0017]S2:从节点内部的定时任务发现有主节点信息,开始使用Socket连接主节点;[0018]S3:连接建立成功后,从节点发送ping命令,且希望得到主节点pong命令响应,否则重试;[0019]S4:如果主节点设置了权限,进行权限验证;如果验证失败,复制终止;[0020]S5:权限验证通过后,进行数据同步,主节点会把所有数据发送给从节点;[0021]S6:当主节点把已有的数据副本同步给从节点后,就会把在开始复制到复制完成期间的写命令发送给从节点,保证主从节点数据一致性。[0022]本发明所述的一种高可用Redis的异地灾备方法具有以下优势:相对于现有技术,[0023](1)本发明所述的一种高可用Redis的异地灾备方法,能做到低时延,甚至没有时延的实时同步,保证业务不中断的高可用,支持多种Redis的HA架构,一主多从或一主多从多哨兵等,异地灾备,可以实现灾难恢复。[0024](2)本发明所述的一种高可用Redis的异地灾备方法,所述中心控制区中的不同同步服务server同一时间只能有一个处于running,其他的处于standby状态,用于减少Redis请求;所述中心控制区中同一时间只能由一个同步服务client进行get/ack/rollback操作,为有序性提供保证。附图说明
[0025]构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0026]图1为本发明实施例所述的一种高可用Redis的异地灾备方法的流程图;[0027]图2为本发明实施例所述的Redis主从同步的流程图。
具体实施方式
[0028]需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0029]在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗
4
CN 112783694 A
说 明 书
3/5页
示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。[0030]在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
[0031]下面将参考附图并结合实施例来详细说明本发明。[0032]名词解释:[0033]高可用性(High Availability,简称HA):指的是通过技术手段,尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性,业界的通行做法是采用群集系统(Cluster),将各个主机系统、网络系统、存储设备(部分高可用系统包含存储设备的高可用)等通过各种手段有机地组成一个群体,共同对外提供服务,通过创建群集系统(采用实现高可用性的软件)将冗余的高可用性的硬件组件和软件组件组合起来,以达到消除单点故障、减少设备意外发生时的宕机时间,一般说,高可用技术通过对网卡、CPU、内存、系统软件设置不同的可用性监测点,在这些节点发生故障时实现冗余切换,持续提供服务。
[0034]灾难恢复(DR)(国内通常简称为灾备或容灾)属于业务连续性的技术层面;在信息服务中断后,调动资源,在异地重建信息技术服务平台(包括基础架构、通信、系统、应用及数据),灾难恢复也包括本地的恢复与重建。目前,流行的灾备系统往往包括本地的HA集群和异地的DR数据中心;从故障角度,HA主要处理单组件的故障导致负载在集群内的服务器之间的切换,DR则是应对大规模的故障导致负载在数据中心之间做切换。[0035]Redis:REmote Server(远程字典服务器),是完全开源免费的,用C语 DIctionary言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器,Redis与其他key‑value缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用;Redis不仅仅支持简单的key‑value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;Redis支持数据的备份,即master‑slave模式的数据备份。[0036]Redis的作用:内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务;取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面;模拟类似于HttpSession这种需要设定过期时间的功能;发布、订阅消息系统;定时器、计数器。[0037]如图1所示,一种高可用Redis的异地灾备方法包括:数据中心和中心控制区,数据中心分为物理隔离的数据中心A和数据中心B,数据中心A中部署了一套高可用Redis实例,为一主N从M哨兵的架构,且M≥1、N≥1,数据中心B中部署一套单节点的Redis实例,用于异
5
CN 112783694 A
说 明 书
4/5页
地备份数据中心A中的Redis实例的数据,中心控制区部署了高可用的同步服务Server和同步服务client,同步服务Server和数据中心A、同步服务client和数据中心B都是通过专网连接的,专网是低延时网络,同步服务Server从高可用Redis实例中获取AOF binlog,Redis实例开启AOF备份,同步服务Client则从同步服务Server处获取需要同步的数据,并且发送给异地灾备的实例进行备份,能做到低时延,甚至没有时延的实时同步,保证业务不中断的高可用,支持多种Redis的HA架构,一主多从或一主多从多哨兵等,异地灾备,可以实现灾难恢复。
[0038]所述中心控制区中的不同同步服务server同一时间只能有一个处于running,其他的处于standby状态,用于减少Redis请求;
[0039]所述中心控制区中同一时间只能由一个同步服务client进行get/ack/rollback操作,为有序性提供保证;
[0040]所述中心控制区同步服务Server和同步服务client的工作方法为:[0041]①尝试启动。Server在启动的时候首先会向Zookeeper进行一次尝试启动判断。具体做法是向Zookeeper创建一个相同的临时节点,哪个Server创建成功了,则让哪个Server启动。这里Zookeeper自己的机制可以保障有且只有一个Sever创建临时节点成功;[0042]②启动成功。哪个Sever创建临时节点成功,Zookeeper会通知Server启动成功,并设置该Server状态为Running。Sever就会启动对数据中心A中Redis数据库的监听,获取AOF binlog;
[0043]③启动失败。其他的Server没有创建成功临时节点。设置该Server状态为Standby,并且监听创建成功的临时节点,以便Running状态的Server宕机后,及时补位,这就是Sever的主备切换;
[0044]④从Zookeeper中读取当前处于Running状态的Server。Client在启动的时候,首先会从Zookeeper上获取当前处于Running状态的Server,同时,Client会将自己的信息注册到Zookeeper的临时节点中,并且Client需要注册上述临时节点的监听,这样当Sever主备切换的时候,Client可以获取通知,以此来做相应的修改,连接新的Server;[0045]⑤连接对应的Running状态的Server,消费Sever获取到的AOF binlog,然后通知异地的备份库进行AOF binlog追齐;[0046]上文所说的Server主备切换:在Sever运行过程中难免会发生一些异常情况导致其无法正常工作,这个时候就需要进行主备切换了。基于Zookeeper临时节点的特性,当原本处于Running状态的Sever因为挂掉或网络等原因端口了与Zookeeper的连接,那么创建的临时节点就会消失。由于之前处于Standby状态的所有Server已经对该节点进行了监听,因此它们在接收到Zookeeper发送过来的节点删除或消失的通知后,会重复步骤①,以此实现主备切换;
[0047]所述步骤①Server在启动的时候首先会向Zookeeper进行一次尝试启动判断的具体做法是向Zookeeper创建一个相同的临时节点,哪个Server创建成功了,则让哪个Server启动,这里Zookeeper自己的机制可以保障有且只有一个Sever创建临时节点成功。[0048]如图2所示,所述同步服务Server从高可用Redis实例中获取AOF binlog,Redis实例开启AOF备份,同步服务Client则从同步服务Server处获取需要同步的数据的具体做法:[0049]S1:从节点执行slaveof命令;
6
CN 112783694 A[0050]
说 明 书
5/5页
slaveof命令用于在Redis运行时动态地修改复制(replication)功能的行为,通
过执行SLAVEOF host port命令,可以将当前服务器转变为指定服务器的从属服务器(slave server);如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行SLAVEOF host port将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步;[0051]S2:从节点内部的定时任务发现有主节点信息,开始使用Socket连接主节点;[0052]socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议;[0053]S3:连接建立成功后,从节点发送ping命令,且希望得到主节点pong命令响应,否则重试;
[0054]ping‑pong实质是一种数据缓冲的手段(是一种数据传输技术),能够同时利用两个数据缓冲区达到数据连续传输的目的,从而提高数据传输速率,由于单个缓冲区得到的数据在传输和处理中很容易被覆盖,而ping‑pong缓冲区的方式能够总是保持一个缓冲区的数据被利用,另一个缓冲去用于存储数据,即两个相同的对象作为缓冲区交替地被读和被写;
[0055]S4:进行权限验证;如果验证失败,复制终止;如果主节点设置了权限,[0056]设置权限,使得Redis主从备份更加安全可靠;[0057]S5:主节点会把所有数据发送给从节点;权限验证通过后,进行数据同步,[0058]S6:当主节点把已有的数据副本同步给从节点后,就会把在开始复制到复制完成期间的写命令发送给从节点,保证主从节点数据一致性。[0059]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
7
CN 112783694 A
说 明 书 附 图
图1
图2
8
1/1页
因篇幅问题不能全部显示,请点此查看更多更全内容