redis cluster架构

前言

前面我们讲到redis主从架构实现了读水平扩展。后面针对主从+哨兵介绍了第一套企业redis高可用架构的实现方案。那们主从+哨兵有没有缺点呢?答案肯定是存在一定的缺陷的,比如仅有一个master节点对于写请求的扩展支持的不太友好。

下面我们就要讲到第二套redis企业级架构方案:redis cluster。


图解

redis cluster架构_第1张图片 redis-cluster

redis cluster简单介绍

(1)自动将数据分片,每个master上存放一部分数据。

(2)提供内置的高可用支持,部分master不可用时还可以继续工作。

(3)在redis cluster架构下 redis要开放两个端口号 一个用来提供服务一个用来进行节点间通信。

  (4)slave自动迁移:比如你有10个master 每个master有一个slave,然后你又新增3个slave作为冗余,有三个master就有两个slave,此时如果只有一个slave的master node的slave节点挂了,会选择一个冗余的slave节点给这个master节点作为新的slave节点。

上面提到的分片redis是如何实现的呢?redis的路由策略是如何实现的?

redis cluster的hash slot算法: 整个cluster有16384个hash slot,对每个key计算CRC16值,然后对16384取模,得到key所对应的hash slot。

增加一个master node:redis cluster会把其他master上的hash slot移动部分到新增的master node上。

减少一个master node:redis cluster会把这个master node上的hash slot均匀迁移到其他master node上。

gossip协议

redis采用的是gossip协议,小道消息通信。包含多种消息:ping pong meet fail等等。

(1)meet:某个节点发送meet给新加入的节点,让新节点加入集群,然后新节点就会开始和其他节点进行通信。

         redis-trib.rb add-node 内部就是发送一个meet消息给新加入的节点通知那个节点加入到我们的集群。

(2)ping:每个节点都会频繁的给其他节点发送ping。其中包含自己的状态还有自己维护的集群源数据,互相通过ping交换元数据。

(3)pong:返回ping和meet,包含自己的状态和其他信息,也可以用于信息广告和更新。

(4)fial:某个节点判断另一个几点fail之后就会发送fail给其他节点,通知其他节点指定节点宕机了。

高可用性和主备切换的原理

  1. 判断几点宕机:(1)如果一个节点认为另一个节点宕机,就是pfail,主观宕机。在cluster-node-timeout内,某个节点一直没有返回pong那么就认为pfail。

                                  (2)如果多个节点都认为另外一个节点宕机了那么就是fail,客观宕机。(和哨兵sdown和odown对应着看发现类似) 。会通过gossip ping消息传达给其他节点,超过半数的节点都认为pfail了那么就变成fail。

    2.从节点过滤:对宕机的master节点从其所有的slave节点中选择一个切换成masternode,(如果超过了cluster-node-timeout * cluster-slave-validity-factor,那么就没有资格切换成master)。

   3.从节点选举:offset大 的优先选举,如果超半数的master node都投票给了某个slave则选举通过。从节点执行主备切换,变成主节点。

 

你可能感兴趣的:(redis)