Redis原理(4) Cluster 详解

Redis Cluster需要至少3个master和相应的slave节点组成,通过CRC16算法和槽分配实现负载均衡。当master宕机,系统自动将slave提升为master,保证服务连续。节点间使用TCP通信,通过gossip协议进行信息交换。JedisCluster通过配置一个节点即可获取集群信息。在集群扩展或节点故障时,会触发槽迁移。主从复制确保数据一致性,故障切换快速完成服务恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看一张图,大致触摸下Redis Cluster

Redis Cluster要求至少需要3个master才能组成一个集群,同时每个master至少需要有一个slave节点。各个节点之间保持TCP通信。当master发生了宕机, Redis Cluster自动会将对应的slave节点提拔为master,来重新对外提供服务。

Redis Cluster 功能 : 负载均衡,故障切换主从复制 

负载均衡

先说下槽,集群中每个redis实例都负责接管一部分槽,总槽数为:16384(2^14),如果有3台master,那么每台负责5461个槽(16384/3)。

redis节点 负责的槽位
节点1 0-5461
节点2 5461-10922
节点3 10922-16383

当redis客户端设置值时,会拿key进行CRC16算法,然后 跟16384取模,得到的就是落在哪个槽位,根据上面表格就得出在哪台节点上。槽公式如下:

slot = CRC16(key) & 16383

Redis集群中,每个节点都会有其余节点ip,负责的槽 等 信息。

JedisCluster如何寻址集群的?

JedisCluster配置只用指定集群中某一个节点的IP,端口信息就可以了。JedisCluster初始化时,会找配置的节点获取整个集群的信息(cluster nodes命令)。

解析集群信息,得到集群中所有master信息,然后遍历每台master,通过ip,端口构建jedis实例,然后put到一个全局nodes变量里面(Map类型) , key为ip,端口,值为Jedis实例,nodes值如下:

nodes={172.19.93.120:6380=redis.clients.jedis.JedisPool@74ad1f1f,.....}

在上面遍历master过程中,还做一件事,遍历此台master负责的槽索引,然后又put到一个全局map slots里面。值为上面的Jedis实例, slots值如下:

slots={0=redis.clients.jedis.JedisPool@74ad1f1f,
1=redis.clients.jedis.JedisPool@74ad1f1f,
2=redis.clients.jedis.JedisPool@74ad1f1f,
....
5461 = redis.clients.jedis.JedisPool@65aa1f2f,    ####另外的master机器
....
16383=r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值