一种Redis副本集的实现方法及装置与流程

文档序号:23350047发布日期:2020-12-18 16:54阅读:174来源:国知局
一种Redis副本集的实现方法及装置与流程

本发明涉及数据库技术领域,具体来说,涉及一种redis副本集的实现方法及装置。



背景技术:

目前网络博客或许多项目应用中,redis副本集很多是一主两从三哨兵、多哨兵或一主一从两哨兵的搭建方式,很少谈及一主一从一哨兵最低配的搭建方式。常见的方案如下:方案一(如图1所示)为一主一从两哨兵,m1、r1分别为主从redis,s1、s2为高可用哨兵;方案二(如图2所示)为一主一从三哨兵,如单独部署,3个哨兵会占用更多的资源;与redis部署在一起,同样会遇到故障切换问题;方案三(如图3所示)为一主两从3哨兵,依然不是最低配,耗费更多的资源;另外没有代理,用户需要感知所有节点信息如ip,port等,通过客户端可以执行所有管理员操作如flush等,带来安全隐患。

然而,对于上述方案一而言,其存在以下缺陷:1)无法解决网络故障后脑裂问题;2)如其中某一哨兵进程宕掉或某一虚机宕掉后,故障切换无法顺利进行;3)客户端需要明确底层部署架构信息如ip,port等,且可以执行一切管理员操作如flush等。

对于上述方案二而言,增加一个哨兵;如三个哨兵单独部署为带来额外的资源耗费,哨兵进程只是故障切换,不会占用太多资源;如哨兵进程与redis部署在一起,同样会有两个明显的缺点:1)如其中哨兵多的一方虚机宕掉后,故障切换无法顺利进行;2)客户端需要明确底层部署架构信息如ip,port等,且可以执行一切管理员操作如flush等。

对于上述方案三而言,一主两从三哨兵,额外增加一台物理资源,已然不是最低配。

针对相关技术中的问题,目前尚未提出有效的解决方案。



技术实现要素:

针对相关技术中的问题,本发明提出一种redis副本集的实现方法及装置,以克服现有相关技术所存在的上述技术问题。

为此,本发明采用的具体技术方案如下:

根据本发明的一个方面,提供了一种redis副本集的实现方法,包括以下步骤:

s1、采用预设方法对代理进行活性检测,实现代理高可用;

s2、通过预设法则实现自动故障转移、手动主从节点切换、哨兵自动切换、故障节点自救及脑裂多主检测;

s3、所述代理采用预设规则获取数据库redis最新结构信息,正确路由请求。

进一步的,所述s1中采用预设方法对代理进行活性检测,实现代理高可用具体包括以下步骤:采用预设的软件keepalived通过检测代理活性来控制vip偏移,实现所述代理高可用。

进一步的,所述s1中的所述代理为开源代理predixy,所述开源代理predixy可屏蔽一些密码重置及参数修改的命令,且用户无需感知底层架构部署信息,连接所述代理犹如连接单个数据库redis,可以实现后续副本集扩展。

进一步的,所述s2中通过预设法则实现自动故障转移、手动主从节点切换、哨兵自动切换、故障节点自救及脑裂多主检测具体包括以下步骤:

s21、当副本集初始化后,哨兵运行于从节点,并周期性获取数据库redis的状态及负责数据库redis的自动故障转移和手动主从节点服务器的切换;

s22、当主从切换完成后,周期触发check-sentinel脚本会检测到哨兵运行节点与数据库redis角色不匹配,进而哨兵会被所述check-sentinel脚本相应的切换到当下从节点服务器中。

进一步的,所述s22中周期性触发check-sentinel脚本具体包括以下步骤:

当服务器为主节点服务器,且存在哨兵,则停止所述哨兵进程,所述代理进程配置文件软连接指向本地,修改软连接指向远端代理配置文件,并重启代理;

当服务器为从节点服务器,且不存在哨兵,则启动哨兵进程,所述代理进程配置文件软连接指向远端,修改软连接指向本地代理配置文件,并重启代理;

当ping命令返回错误时,则视为从节点服务器,每周期累加一次,若5次依然失败,则修改所述代理配置文件软连接指向本地配置文件。

进一步的,所述s3中所述代理获取数据库redis最新结构信息的预设规则指所述代理周期性的从哨兵获取。

根据本发明的另一个方面,还提供了一种电子装置,所述电子装置包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的redis副本集的实现程序,所述redis副本集的实现程序被所述处理器执行时实现如下步骤:

s1、采用预设方法对代理进行活性检测,实现代理高可用;

s2、通过预设法则实现自动故障转移、手动主从节点切换、哨兵自动切换、故障节点自救及脑裂多主检测;

s3、所述代理采用预设规则获取数据库redis最新结构信息,正确路由请求。

进一步的,所述s1中采用预设方法对代理进行活性检测,实现代理高可用具体包括以下步骤:采用预设的软件keepalived通过检测代理活性来控制vip偏移,实现所述代理高可用。

进一步的,所述s2中通过预设法则实现自动故障转移、手动主从节点切换、哨兵自动切换、故障节点自救及脑裂多主检测具体包括以下步骤:

s21、当副本集初始化后,哨兵运行于从节点,并周期性获取数据库redis的状态及负责数据库redis的自动故障转移和手动主从节点服务器的切换;

s22、当主从切换完成后,周期触发check-sentinel脚本会检测到哨兵运行节点与数据库redis角色不匹配,进而哨兵会被所述check-sentinel脚本相应的切换到当下从节点服务器中。

进一步的,所述s22中周期性触发check-sentinel脚本具体包括以下步骤:

当服务器为主节点服务器,且存在哨兵,则停止所述哨兵进程,所述代理进程配置文件软连接指向本地,修改软连接指向远端代理配置文件,并重启代理;

当服务器为从节点服务器,且不存在哨兵,则启动哨兵进程,所述代理进程配置文件软连接指向远端,修改软连接指向本地代理配置文件,并重启代理;

当ping命令返回错误时,则视为从节点服务器,每周期累加一次,若5次依然失败,则修改所述代理配置文件软连接指向本地配置文件。

本发明的有益效果为:通过组件proxy、keepalived、redis-server、redis-sentinel及check-sentinel脚本的配合使用,使得本发明可以采用最低配的redis来实现高可用方案,不仅有效地解决了脑裂及虚机宕机无法切换的问题,而且还有效地解决了虚机启动后的多主问题,同时代理的加入能够对redis提供一种保护如性能损耗命令的屏蔽及客户端连接打满redis导致redis异常退出等。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是现有技术中redis副本集方案一的搭建方式示意图;

图2是现有技术中redis副本集方案二的搭建方式示意图;

图3是现有技术中redis副本集方案三的搭建方式示意图;

图4根据本发明实施例的一种redis副本集的实现方法的流程示意图;

图5是根据本发明实施例的一种redis副本集的实现方法中原理框架示意图。

具体实施方式

为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。

根据本发明的实施例,提供了一种redis副本集的实现方法及装置。

现结合附图和具体实施方式对本发明进一步说明,如图4-5所示,根据本发明的一个实施例,提供了一种redis副本集的实现方法,包括以下步骤:

s1、采用预设方法对代理进行活性检测,实现代理高可用;

其中,所述s1具体包括以下步骤:采用预设的软件keepalived通过检测代理(proxy)活性来控制vip偏移,实现所述代理高可用。

具体的,所述s1中的所述代理为开源代理predixy,所述开源代理predixy可屏蔽一些密码重置、参数修改及损耗性能如scan,keys等命令,且用户无需感知底层架构部署信息,连接所述代理犹如连接单个数据库redis,可以实现后续副本集扩展。

s2、通过预设法则实现自动故障转移、手动主从节点切换、哨兵自动切换、故障节点自救及脑裂多主检测;

其中,所述s2具体包括以下步骤:

s21、当副本集初始化后,哨兵运行于从节点,并周期性获取数据库redis的状态及负责数据库redis的自动故障转移和手动主从节点服务器的切换;

具体的,所述s21中的故障转移包括以下步骤:

在已下线主节点服务器的所有从节点服务器里挑选一个从节点服务器,并将其转换为主节点服务器;优选的,将从节点服务器转换为主节点服务器的选举原则如下:首先删除列表中处于下线或断线状态的从节点服务器,保证所有服务器都处于在线状态;然后删除列表中最近5秒没有回复领头哨兵的服务器,保证所有服务器都是可以正常通信的;最后删除与已下线的主节点服务器断开超过预设时间的从节点服务器,用来筛选出较新数据的从数据库。当进行删减后,将优先设置优先级高,复制偏移量最大的从节点服务器,如果还无法选出,将选择运行id最小的从节点服务器;当选举出新的主节点服务器时,哨兵会以每秒一次的频率进行info命令的发送,当被升级的role属性从slave升级为了master,就认为已经升级成了主节点服务器。当检测到选出的所述从节点服务器已经升级到主节点服务器之后,将继续向其他的所述从节点服务器发送slaveof命令来更改所述主节点服务器的设置。

让已下线的主节点服务器的其他从节点服务器复制新的主节点服务器;

将已下线的主节点服务器设置为新的主节点服务器的从节点服务器,当已下线的主节点服务器重新上线时,会成为新的主节点服务器的从节点服务器。

具体的,旧主节点服务器已经下线,所以设置是配置在领头哨兵的旧主节点服务器对象中,当旧节点主服务器上线后,哨兵会进行slaveof命令的补发。

s22、当主从切换完成后,周期触发check-sentinel脚本会检测到哨兵运行节点与数据库redis角色不匹配,进而哨兵会被所述check-sentinel脚本相应的切换到当下从节点服务器中。

具体的,所述s22中check-sentinel脚本为周期性触发,如每3秒,具体如下:

当服务器为主节点服务器,且存在哨兵,则停止所述哨兵进程,所述代理进程配置文件软连接指向本地,修改软连接指向远端代理配置文件,并重启代理;

当服务器为从节点服务器,且不存在哨兵,则启动哨兵进程,所述代理进程配置文件软连接指向远端,修改软连接指向本地代理配置文件,并重启代理;

当ping命令返回错误(error)时,则视为从节点服务器,每周期累加一次,若5次依然失败,则修改所述代理配置文件软连接指向本地配置文件。

此外,所述s22中还包括实现自动切换哨兵(因为故障哨兵会负责切换,切换后,redis角色与哨兵只运行在从节点不符合,所以要切换哨兵;哨兵之运行在从节点,因为主节点宕掉,依然可以切换),故障节点自救如尝试3次服务依然启动失败,则会发出告警邮件、及脑裂多主出现会相应杀掉进程运行时间长的redis进程。

s3、所述代理采用预设规则获取数据库redis最新结构信息,正确路由请求。

其中,所述s3中所述代理获取数据库redis最新结构信息的预设规则指所述代理周期性的从哨兵获取,所述信息包括状态/角色等信息。

根据本发明的另一个实施例,还提供了一种电子装置。

在本实施例中,所述电子装置可以是电脑或服务器。所述电子装置至少包括存储器、处理器、通信总线以及网络接口。

其中,存储器至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、磁性存储器、磁盘、光盘等。存储器在一些实施例中可以是电子装置的内部存储单元,例如所述电子装置的硬盘。存储器在另一些实施例中也可以是电子装置的外部存储设备,例如电子装置上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器还可以既包括电子装置的内部存储单元也包括外部存储设备。存储器不仅可以用于存储安装于电子装置的应用软件及各类数据,例如redis副本集的实现程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。

处理器在一些实施例中可以是一中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器中存储的程序代码或处理数据。

通信总线用于实现这些组件之间的连接通信。

网络接口可选的可以包括标准的有线接口、无线接口(如wi-fi接口),通常用于在电子装置与其他电子设备之间建立通信连接。

可选地,电子装置还可以包括用户接口,用户接口可以包括显示器(display)、输入单元比如键盘(keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子装置中处理的信息以及用于显示可视化的用户界面。

所述电子装置包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的redis副本集的实现程序,所述redis副本集的实现程序被所述处理器执行时实现如下步骤:

s1、采用预设方法对代理进行活性检测,实现代理高可用;其中,所述s1具体包括以下步骤:采用预设的软件keepalived通过检测代理活性来控制vip偏移,实现所述代理高可用。

s2、通过预设法则实现自动故障转移、手动主从节点、切换、哨兵自动切换、故障节点自救及脑裂多主检测;其中,所述s2具体包括以下步骤:s21、当副本集初始化后,哨兵运行于从节点,并周期性获取数据库redis的状态及负责数据库redis的自动故障转移和手动主从节点服务器的切换;s22、当主从切换完成后,周期触发check-sentinel脚本会检测到哨兵运行节点与数据库redis角色不匹配,进而哨兵会被所述check-sentinel脚本相应的切换到当下从节点服务器中。

具体的,所述s22中周期性触发check-sentinel脚本具体包括以下步骤:

当服务器为主节点服务器,且存在哨兵,则停止所述哨兵进程,所述代理进程配置文件软连接指向本地,修改软连接指向远端代理配置文件,并重启代理;

当服务器为从节点服务器,且不存在哨兵,则启动哨兵进程,所述代理进程配置文件软连接指向远端,修改软连接指向本地代理配置文件,并重启代理;

当ping命令返回错误时,则视为从节点服务器,每周期累加一次,若5次依然失败,则修改所述代理配置文件软连接指向本地配置文件。

s3、所述代理采用预设规则获取数据库redis最新结构信息,正确路由请求。

综上所述,借助于本发明的上述技术方案,通过组件proxy(代理)、keepalived(可以实现高可用可靠的软件)、redis-server(节点)、redis-sentinel(哨兵)及check-sentinel脚本的配合使用,使得本发明可以采用最低配的redis来实现高可用方案,不仅有效地解决了脑裂及虚机宕机无法切换的问题,而且还有效地解决了虚机启动后的多主问题,同时代理的加入能够对redis提供一种保护如性能损耗命令的屏蔽及客户端连接打满redis导致redis异常退出等。

需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1