Redis-cluster集群原理

 

一、引入

    面对访问量特别大的网站,redis单机模式的性能和存储都不足以支撑。故引入高可用、高性能、大存储的redis-cluster集群模式。

二、流程图

 

三、原理

     插槽(slot):可以存储两个数值的一个变量这个变量的取值范围是:0-16383。

    Cluster:集群管理者,使集群对外暴漏的是一个整体。

    redis cluster采用虚拟分区的方式,将整个集群看成一个整体,然后分成16384个槽位。

    然后再将16484个槽位分别分配给集群的各个节点,然后各个节点各自负责一部分槽位。

    比如上图:

    节点1负责 0-5000之间的槽位,节点2负责5001-10000之间的槽位,节点3负责10001-16383之间的槽位。

    k-v键值对数据只会和槽位相关,与物理机器无关。通过crc16算法计算出 k对应的整数值(有点类似hash),然后对算出的整数值%16384取模,计算出k-v对应在哪个槽位上,然后再根据槽位与机器节点的映射关系,存储到相应的节点上去。取的时候,也是相应的过        程所以整个集群协同一致对外,给client看到的视图就是完整的数据集。

四、故障处理

    哨兵:

       为了使集群高可用,每个节点都应该有一个备用节点(slave),当主节点(master)挂掉,sentinel会无感切换到备用节点。

    redis的投票机制:

      (1)     投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉.

      (2)     什么时候整个集群不可用(cluster_state:fail)? 

           a:如果集群任意master挂掉,且当前master没有slave,或者所以slave挂掉.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

           b:如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

五、优缺点

  • 天然的高可用
  • 高性能,多个机器处理
  • 大存储,解决单机容量限制

猜你喜欢

转载自www.cnblogs.com/oooak/p/10119482.html