3.4 Redis分片集群
一、搭建分片集群
哨兵集群没有解决的问题
海量数据存储问题
高并发写的问题
使用分片集群可以解决上述问题
集群中有多个master,每个master保存不同的数据
每个master可以有多个slave节点
master之间通过ping检测彼此健康状态
客户端请求可以访问集群任意节点,最终都会被转发到正确节点上
搭建分片集群可以参考附录
二、散列插槽
Redis会把每一个master节点映射到0~16383共16384个插槽(hash slot)上
数据key不是与节点绑定,而是与插槽绑定。Redis会根据key的有效部分计算插槽值,分两种情况:
key中包含"{}",且"{}"中至少包含一个字符,"{}"中的部分是有效部分
key中不包含"{}",整个key都是有效部分
cli链接方式:
redis-cli -c -p 端口地址
三、集群伸缩
添加一个节点到集群
redis-cli --cluster add-node 新节点ip:新节点端口 已经存在的节点ip:已经存在的节点端口备注:添加一个主节点
查看分片集群信息
redis-cli -p 随便一个端口地址 cluster nodes给添加的节点添加插槽
redis-cli --cluster reshard 被拆出插槽的节点ip:被拆出插槽的节点端口备注:后续填写内容:
How many slots do you want to move? 你想要移动出多少个插槽
What is the receiving node ID? 谁来接收这部分插槽:接收的节点的id
Source node #1:被拆出插槽的节点id
Source node #2:填写done即可
最后一个yes就可以完成移动了
四、故障转移
集群中有一个master宕机会发生什么呢
该实例与其他实例失去连接
疑似宕机
确定下线,自动提升一个slave为新的master
数据迁移——手动故障转移
利用cluster failover命令可以手动让集群的某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移,流程如下

手动的Failover支持三种不同模式:
缺省:默认流程,入图1-6
force:省略了对offset的一致性校验
takeover:直接执行第5步,忽略数据一致性、忽略master状态和其他master的意见
命令:
cluster failover
五、RedisTemplate访问分片集群
步骤
引入redis的starter依赖
配置分片集群地址
spring: redis: cluster: nodes: # 指定分片集群的每一个节点信息(不管主从,全部配置) - ip:端口 - ip:端口 - ip:端口 - ip:端口 - ……配置读写分离
基本与哨兵模式无意,除了配置分片集群的yml有点差异
最后更新于
这有帮助吗?