博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis-cluster概念
阅读量:6538 次
发布时间:2019-06-24

本文共 1223 字,大约阅读时间需要 4 分钟。

hot3.png

本博客整参考文章:  以及  以及

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

 

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

091fbfd2d70bf4e1a92f8a0b5109597feee.jpg

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

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

  3. 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

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

 

redis-cluster投票:容错

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

  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,达到读写分离

 

转载于:https://my.oschina.net/fusublog/blog/3028579

你可能感兴趣的文章
maven的配置
查看>>
用户登录界面(1.8版本--网站框架改进)
查看>>
POJ1383 Labyrinth(树的直径:两次BFS)
查看>>
Node.js + Express 4.x + MongoDB 构建登录注册(二)
查看>>
关于十六进制和八进制负数的问题
查看>>
连接池并发的实现原理
查看>>
Range
查看>>
爬虫之lxml - etree - xpath的使用
查看>>
PyalgoTrade 打印收盘价(二)
查看>>
关于C语言指针【第二季】
查看>>
MYSQLi数据访问批量删除
查看>>
浪潮K-UNIX操作系统了解
查看>>
less: CSS 预处理语言
查看>>
知识管理系统VS文档管理系统的区别【转】
查看>>
最近点对
查看>>
《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day2
查看>>
PHP为什么会被认为是草根语言?
查看>>
解决NetBeans编辑器中文乱码问题
查看>>
ztree-demo 2
查看>>
javascript常用方法
查看>>