RedisCluster介绍

介绍

  1. Redis集群中有多个节点,每个节点负责整个集群中的一部分数据。 Redis Cluster将所有数据划分为16384个槽,每个节点负责一部分槽。槽位的信息存储在每个节点上。
  2. 当Redis集群的客户端访问集群时,会得到槽位信息。客户端查找某个key对应的信息时可以直接定位到目标节点上。
  3. 某个key-value存储的槽位:使用crc32计算key的哈希值,将哈希值对16384取余,获得数据的槽位。
    crc32(key)%16384
    Redis Cluster允许用户将某个key强制挂在特定槽位。
  4. 当客户端对某个错误节点发送指令,节点发现指令的key所在的槽位不归自己管理,就会给客户端发送带目标节点的信息的跳转指令,客户端更新本地槽位映射表。

槽迁移

可手动调整槽位在Redis分片的分布。Redis迁移单位为槽,当槽在迁移时,处于中间过渡态。迁移工具redis-trib在源节点和目标节点设置中间过渡态,然后一次性获取源节点槽位的所有key,再挨个对key迁移。

  • 单个key迁移

源节点对当前key执行dump指令得到序列化内容,向目标节点发送,目标节点收到数据后进行反序列化,然后将内容存到内存中,给源节点发送ok,源节点收到ok后在当前节点删掉key。

  • 阻塞操作

单个key的迁移过程是同步的,在目标节点执行restore指令将key存到内存中到源节点删除key之间,源节点处于阻塞状态,直到key被成功删除。
如果key的内容很小,单个key迁移过程会很快,不会影响客户端的正常访问。

  • 槽位迁移感知

客户端存储了槽位和节点的映射关系表,如果槽位发生迁移,客户端上的映射表需要及时更新,才能将指令发到正确的节点上。
1. 槽位迁移完毕
 客户端将指令发到源节点上,源节点发现对应指令的槽位不归自己管,就会向客户端发送带着目标节点信息的moved指令,客户端刷新本地的槽位关系表,然后重试指令。
2. 正在迁移槽位
 如果槽位正在处于迁移中,客户端向源节点发送指令,如果源节点存在数据,就会直接返回结果;如果数据不存在,它可能真的不存在也可能被迁移到目标节点上。这时源节点会向客户端返回asking error。客户端收到asking error就会去目标节点尝试,不会刷新槽位映射关系表。

集群变更

容错

每个集群中的redis节点都由一个主节点和多个从节点组成,当主节点故障时,集群自动将某个从节点提升为主节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值