一种保障redis集群可用性的方法与流程

文档序号:18884346发布日期:2019-10-15 20:38阅读:527来源:国知局
一种保障redis集群可用性的方法与流程

本发明涉及redis集群技术领域,具体来说是一种保障redis集群可用性的方法。



背景技术:

redis从3.0版本开始引入了集群功能,到3.2版本集群功能已经稳定。redis集群提供了一个提供在多个redis间节点间共享数据的程序集。redis集群的两个主要特点在于数据分区和主从模式,通过数据分区,引入了哈希槽,将哈希槽位分不到不同的节点,将数据分别到不同的槽位,从而达到将数据分割到不同的节点的目的,从而减轻了单个节点的数据压力,并且集群的伸缩性会更好;通过主从模式,当主节点宕机时,该主节点的从节点被选举为新的主节点继续提供服务,提高了集群的可用性。

但是,虽然redis集群中存在很多组主从节点,但是只要有一组主从节点挂掉,整个集群就会宕机,不能对外提供服务,这对于一个集群来说是不可接受的,造成该问题的原因就是数据分区,如果某个主从节点都挂掉,那么存在于该节点的槽位都就不存在了,那么存储于这些槽位的数据也就无法存储和获取。因此,需要设计一种保障redis集群可用性的方法。



技术实现要素:

本发明的目的在于解决现有技术的不足,提供一种保障redis集群可用性的方法,集群迁移过程中对外提供的服务不中断。

为了实现上述目的,设计一种保障redis集群可用性的方法,所述的方法包括集群迁移方法,所述的集群迁移方法具体如下:步骤a.将redis集群节点信息保存,并将宕机的主从节点从redis集群中删除;步骤b.将宕机的主节点的dump.rdb文件及redis实例重新添加到redis集群中,并将重新添加的redis实例的权重配置为0,其他节点仍按设定的权重进行配置;步骤c.将重新添加的redis实例删除,并清理删除的redis实例的rdb文件。

所述的方法采用snmp与ctdb构成集群监控系统以实现对集群的监控,具体方法如下:将snmp的客户端部署在redis集群的各个节点上以获知redis集群的各项重要参数信息和集群节点信息(clusternodes),并将各项重要参数信息和集群节点信息发送至snmp的服务器端,由snmp服务端将各项重要参数信息和集群节点信息同步至redis集群中,并通过ctdb将snmp的服务器端在redis集群中部署为高可用。

当集群状态为不可用时,若redis集群的一半以上的节点处于宕机状态或redis集群剩余的主节点小于3个或redis集群只有三个主节点,此时集群状态已经不满足redis集群启动条件,集群故障且无法提供服务,只需发出告警信息,不进行步骤a-步骤c。否则,进行步骤a-步骤c的处理。

所述的方法还包括集群回迁方法,所述的集群回迁方法具体如下:步骤d.将主从节点加入至redis集群中,并进行主从模式的配置;步骤e.调用redis集群的提供的redis-trib.rb脚本,执行rebalance命令,添加use-empty-masters参数并配置权重,以均衡redis集群中的槽位分配。

所述的方法持续对宕机的主节点发送测试包,当发现宕机的主节点已经重新启动且该主节点的至少一个从节点启动,则实施所述的集群回迁方法。

本发明同现有技术相比,其优点在于:提供了一种集群迁移的方法,当redis集群中的主从节点宕机后,整个集群能继续对外提供存储服务,解决发生故障时redis集群的不可用状态,并优选地提供一种监控集群的方法,能监控redis节点可用性和redis节点信息,及一种集群回迁的方法,当redis集群中主从从宕机的状态恢复到正常状态,redis集群重新恢复的方法。

附图说明

图1是一实施方式中本发明方法的整体规划示意图。

图2是一实施方式中本发明集群迁移方法的流程示意图。

图3是一实施方式中本发明集群回迁方法的流程示意图。

具体实施方式

下面对本发明作进一步说明,这种方法的原理对本专业的人来说是非常清楚的。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

参见图1,本实施方式包括集群监控、集群迁移和集群回迁三大部分,首先,对本实施方式的集群监控方法进行说明如下:我们采用snmp(简单网络管理协议)+ctdb(ctdb是群集samba中的群集数据库组件,可提供高可用性负载共享cifs服务器群集)的方法提供一个分布式的监控系统,其监控方法的具体步骤如下:

1、snmp的客户端agent部署在各个节点上,收集信息,利用redis集群本身提供的命令获知redis集群信息,本实施方式中采用如下2种命令,根据设定的时间间隔,获知下述两大类redis集群信息,为后续将数据恢复到宕机前状态留备份。两大类redis集群信息中,第一类是集群的重要参数信息,第二类为集群节点信息,两大类redis集群信息共同用于实现监控,需要监控各个节点信息的同时,还要知道整个集群的状态是不是正常的。集群节点信息还用于迁移,通过保存各个节点的信息,防止丢失。

1>通过clusterinfo获取集群的重要参数信息,包括:当前集群的状态(cluster_state,ok为正常,fail为不正常状态),当前集群的主节点个数,集群的规模(cluster_size和cluster_known_nodes)。

2>通过clusternodes获取集群节点信息,包括:redis集群各个节点的id、ip、端口、主从信息、连接状态、槽位等信息。

snmp的server服务端程序接收各个agent收集到的信息,分析出集群的真实信息后,将信息同步到redis集群中。

2、同时,利用ctdb将snmp的server在分布式redis集群中部署为高可用。ctdb是一个横跨多个节点的并且数据一致、锁一致的tdb数据库,这是为了在其中一个节点服务端宕机时候,ctdb能自动切换到其所管理的其他节点,保证监控系统可用性。并且,优选地,还能利用计算机图形界面将数据展示出来。

而后,参见图2,对于本实施方式中的集群迁移方法进行说明如下:当集群监控系统发现集群状态为fail(不可用),且某一组主从节点都处于宕机状态,则进入故障状态的集群迁移阶段。

1>首先,判断集群的主节点是否宕机一半以上或者redis中只有三个主节点或者剩余的主节点不够三个,这样的情况直接返回,不处理,只发送告警邮件,不进行后续处理。

2>将未迁移前的redis集群信息保存,调用redis-trib.rb脚本将宕机的主从节点从redis集群中删除掉。

3>集群启动各个节点上redis实例,集群会自动以dump.rdb文件(redis集群在磁盘中的落盘redis数据库文件),将数据恢复到宕机前状态,最后调用redis-trib.rb脚本将这些实例添加到redis集群中。

4>调用redis集群的提供的redis-trib.rb脚本,执行rebalance(重新平衡)命令,将3>中启动的redis实例的权重配置为0,其他节点按照配置文件中的权重,均衡redis集群中的槽位分配。

5>调用redis集群的提供的redis-trib.rb脚本,将3>中启动的redis实例删除,然后关闭这些实例并清理rdb文件,至此集群迁移完成。

最后,参见图3,对于本实施方式中的集群回迁方法进行说明如下:监控系统持续向宕机的主节点发心跳(发送测试包),当发现redis主节点已经重新启动正常且该主节点的从节点中至少有一个启动,则进入集群回迁阶段,其具体步骤如下。

1>首先,将主从redis节点加入集群中,并配置好保存配置中的主从模式。

2>调用redis集群提供的redis-trib.rb脚本,执行rebalance命令,添加use-empty-masters参数(配置权重的脚本操作),配置权重,均衡redis集群中的槽位分配,至此集群回迁完成。

实施例1

本实施例的具体步骤如下所示,本实施例的redis集群有6个主节点,该实施例保障了redis集群的可用性并且保留了redis集群宕机前的数据。

1>判断集群的主节点是否宕机三个以上或者只有三个主节点或者剩余的主节点不够三个,这样的情况下集群不可用,直接返回,只发送告警邮件,不进行后续处理。

2>本实施例中盖redis集群有两个主节点处于宕机状态,此时将未迁移前的redis集群信息保存,调用redis-trib.rb脚本将down掉的主从节点从redis集群中删除掉。

2.1>第一步,调用redis-trib.rb脚本的add-node指令,将集群中down掉的2个主节点上的dump.rdb文件启动数量和redis实例重新添加到redis集群中。

2.2>第二步,调用redis集群redis-trib.rb脚本的rebalance(重新平衡)指令,将2.1>中启动的2个redis实例的权重配置为0,其他节点按照配置文件中的权重,均衡redis集群中的槽位分配。

2.3>第三步,调用redis集群redis-trib.rb脚本的del-node指令,将2.1>中启动的redis实例删除,然后关闭这些实例并清理rdb文件,至此集群迁移完成。

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