redis-cluster概念

本博客整参考文章:redis架构演变与redis-cluster群集读写方案  以及 Redis cluster集群:原理及搭建 以及 redis官方集群文档html

不一样于master-salve 或者 哨兵模式 cluster与他们最大的区别就是 前两种是全量存储 内存消耗大,且存在木桶效应而 cluster集群则是分布式存储 即每台Redis存储不一样的内容。node

 

redis-cluster被设计为一共有16384个hash slot可用,每一个master分得一部分的slot 其分布算法为:【hash_slot = crc16(key) mod 16384】  若是有{}则取{}的可用key,不然整个能够是可用key。集群至少要3主3从,且每一个实例使用不一样的配置文件。redis

  1. 全部的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。算法

  2. 节点的fail是经过集群中超过半数的节点检测失效时才生效。架构

  3. 客户端与redis节点直连,不须要中间proxy层.客户端不须要链接集群全部节点,链接集群中任何一个可用节点便可。分布式

  4. redis-cluster把全部的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value优化

 

redis-cluster投票:容错ui

  1. 投票过程是集群中全部master参与,若是半数以上master节点与master节点通讯超时(cluster-node-timeout),认为当前master节点挂掉..net

  2. 何时整个集群不可用(cluster_state:fail)?设计

    • 若是集群任意master挂掉,且当前master没有slave.集群进入fail状态,也能够理解成集群的slot映射[0-16383]不完整时进入fail状态. 
      • redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
    • 若是集群超过半数以上master挂掉,不管是否有slave,集群进入fail状态。

 

在redis-cluster架构中,redis-master节点通常用于接收读写,而redis-slave节点则通常只用于备份,其与对应的master拥有相同的slot集合,若某个redis-master意外失效,则再将其对应的slave进行升级为临时redis-master。
在redis的官方文档中,对redis-cluster架构上,有这样的说明:在cluster架构下,默认的,通常redis-master用于接收读写,而redis-slave则用于备份,当有请求是在向slave发起时,会直接重定向到对应key所在的master来处理。但若是不介意读取的是redis-cluster中有可能过时的数据而且对写请求不感兴趣时,则亦可经过readonly命令,将slave设置成可读,而后经过slave获取相关的key,达到读写分离

相关文章
相关标签/搜索