Redis--Redis集群介绍

15 篇文章 0 订阅
8 篇文章 0 订阅

Redis 集群介绍

      Redis3.0 版本之后支持 Cluster。集群要求集群节点中必须要支持主备模式,也就说集中的主节点(Master)至少要有一个从节点(Slave).
      每一个蓝色的圈都代表着一个 redis 集群中的主节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作.

      Redis-Cluster 架构图

在这里插入图片描述


       Redis-Cluster 选举: 容错

      Redis 之间通过互相的 ping-pong 判断是否节点可以连接上。如果有一半以上的节点去ping 一个节点的时候没有回应,集群就认为这个节点宕机了,然后去连接它的从节点。如果某个节点和所有从节点全部挂掉,我们集群就进入 fail 状态。还有就是如果有一半以上的主节点宕机,那么我们集群同样进入 fail 了状态。这就是我们的 redis 的投票机制,具体原理如下图所示:
在这里插入图片描述

      投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前 master 节点挂掉.
      什么时候整个集群不可用(cluster_state:fail)?

  1. 如果集群任意 master 挂掉,且当前 master 没有 slave。此时集群进入 fail 状态,也可以理解成集群的 slot 映射[0-16383]不完整时进入 fail 状态。
  2. 如果集群超过半数以上 master 挂掉,无论是否有 slave,集群进入 fail 状态.
      Redis-Cluster 数据存储

      当我们的存取的 key 到达的时候,redis 会根据 crc16 的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

在这里插入图片描述在 Node1 执行 set name kevin

  1. 使用 CRC16 算法对 key 进行计算,得到一个数字,然后对数字进行取余。
    CRC16 : name = 26384
    26384%16384 = 10000
  2. 查找到包含 10000 插槽的节点,比如是 node2,自动跳转到 node2
  3. 在 node2 上执行 set name kevin 命令完成数据的插入
  4. 如果在 node1 上执行 get name,先使用 CRC16 算法对 key 进行计算,在使用16384 取余,得到插槽的下标,然后跳到拥有该插槽的 node2中执行 get name 命令,并返回结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值