Redis Cluster集群的实现原理

本文详细介绍了RedisCluster如何利用hashslot算法提高数据一致性,包括客户端路由、数据分片迁移策略,以及故障转移过程中的节点判断和主从节点选举。此外,还探讨了RedisCluster的高可用性保障措施,如主节点保护和集群故障条件。文中提到的Java开发资源包提供全面的学习资料,有助于开发者技能提升。
摘要由CSDN通过智能技术生成

1、哈希算法:采用固定节点数量,当某一节点宕机,缓存重建。

2、一致性哈希算法:当某一结点宕机,只有此节点数据受影响。会将压力压到数据库。

Redis Cluster使用的时hash slot算法通过采用固定节点数量和可配置映射节点,来避免取模的不灵活性和一致性哈希的部分影响。

Redis Cluster将所有数据按照hash slot算法分布到16384[0-16383]个哈希槽上面,哈希槽分布在各节点上,各节点维护自己的哈希槽。

2.2 客户端路由

当Client访问的Key不在当前节点的哈希槽中时,Redis Cluster会返回moved命令,并告知正确路由信息。当Client接收到moved命令时,会再次请求Redis并更新其内部路由缓存信息。

当Redis Cluster在数据重新分布时,Redis Cluster会使用ask命令用于重定向。因为在数据重新分布时,某个哈希槽的数据可能同时存在于新旧两个节点。所以ask只会重定向,并不会更新路由信息。

2.3 数据分片迁移

当有新主节点加入集群中、从集群中移除节点或者因数据分布不均衡时需要数据重新分布时,就需要对数据分片的迁移。数据迁移分为三个步骤:

1、向目标节点发送状态变更命令,将目标节点的对应哈希槽状态置为importing。

2、向源节点发送状态变更命令,将源节点对应的哈希槽状态置为migrating。

3、针对源节点上的哈希槽的所有key,向源节点发送migrate命令,告知源节点将对应的key迁移到目标节点。

当源节点的状态置为migrating后。此时源节点提供的服务和通常状态下有所区别:

1、如果Client访问的key尚未迁出,则正常的处理该key;

2、如果key已经迁出或者key不存在,则回复Client ASK,信息让其跳转到目标节点处理;

当目标节点状态变成importing后。表示对应的slot正在向目标节点迁入。目标节点和通常情况下有所区别:

1、对于该slot上所有非ask跳转的操作,目标节点不会进行操作,而是通过moved让Client跳转至源节点执行。这样就保证了同一个key在迁移之前总是在源节点执行。迁移后总是在目标节点执行,从而杜绝了双写的冲突。

2、迁移过程中,新增加的key会在目标节点执行,源节点不会新增key。使得迁移有界限,可以在某个确定的时刻结束。

单个key的迁移过程可以通过原子化的migrate命令完成。对于源节点和目标节点的从节点,是通过主备复制,从而达到增删数据。当所有key迁移完成后,Client 通过Redis Cluster的setslot命令设置目标节点的分片信息,从而包含了迁入的slot。设置过程中会让Epoch自增,并且是Cluster中的最新值。然后通过相互感知,传播到Cluster 中的其他节点。

三、Redis Cluster故障转移


3.1 节点故障判断

首先,在Redis Cluster中每个节点都存有集群中所有节点的信息。它们之间通过互相ping-pong判断节点是否可以连接。如果有一半以上的节点去ping一个节点的时候没有回应,集群就认为这个节点宕机。

3.2 slave选举

当主节点被集群公认为fail状态,那么它的从节点就会发起竞选,如果存在多个从节点,数据越新的节点越有可能发起竞选。集群中其他主节点返回响应信息。

3.3 结构变更

当竞选从节点收到过半主节点同意,便会成为新的主节点。此时会以最新的Epoch通过PONG消息广播,让Redis Cluster的其他节点尽快的更新集群信息。当原主节点恢复加入后会降级为从节点。

四、Redis Cluster高可用性


4.1 主节点保护

当集群中某节点中的所有从实例宕机时,Redis Cluster会将其他节点的非唯一从实例进行副本迁移,成为此节点的从实例。

这样集群中每个主节点至少有一个slave,使得Cluster 具有高可用。集群中只需要保持 2*master+1 个节点,就可以保持任一节点宕机时,故障转移后继续高可用。

4.2 集群fail条件

Redis Cluster保证基本可用的特性,在达到一定条件时才会认定为fail:

1、某个主节点和所有从节点全部挂掉,则集群进入fail状态。
2、如果集群超过半数以上主节点挂掉,无论是否有从节点,集群进入fail状态。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!

某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!

成功只会留给那些有准备的人!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
45)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值