目录

分布式缓存

Reids分片集群

搭建分片集群

散列插槽

集群伸缩

故障转移

数据迁移(手动故障)

RedisTemplate访问分片集群


分布式缓存

Reids分片集群

主从和哨兵可以解决高可用、高并发读的问题,但依然有两个问题

  • 海量数据存储问题

  • 高并发写的问题

特征:

  • 集群中有多个master,每个master保存不同数据

  • 每个master都可以有多个slave节点

  • master之间通过ping监测健康状态

  • 客户端请求可以访问集群任意节点,最终都会转发到正确节点

搭建分片集群

文件Redis集群.md

散列插槽

Redis会把每一个mater节点映射到0~16383共16384个插槽(hash slot)上,查看集群信息就能看到

数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:

  • key中包含“{}”,且{}中至少包含1个字符,{}中的部分是有效部分

  • key中不包含{},整个key都是有效部分

例如:key是num,那么就根据num计算,如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值

Redis判断某个key实例在哪方案:

  • 将16384个插槽分配到不同的实例

  • 根据key的有效部分计算哈希值,对16384取余

  • 余数作为插槽,寻找插槽所在实例即可

当同一类商品插槽一样解决方案(不熟):

  • 这一类数据使用相同的有效部分,例如Key都以{typeld}为前缀

集群伸缩

添加或移除节点

添加一个节点到集群:

  • redis-cli --cluster提供了很多操作集群的命令,如

命令 功能描述
create 创建新集群
check 检查集群状态
info 查看集群信息
fix 修复集群问题
reshard 重新分片
rebalance 重新平衡槽位
add-node 添加新节点
del-node 删除节点
set-timeout 设置节点超时时间
call 在所有节点执行命令
import 从外部导入数据
help 显示帮助信息
  • 添加节点命令为:

故障转移

当集群中有一个master宕机发生的情况:

1、首先是该实例与其他实例失去连接

2、疑似宕机

3、最后确定下线,自动提升一个slave为新的master

数据迁移(手动故障)

利用cluster failover命令可以手动让集群中某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移

手动的Failover支持三种不同模式:

  • 缺省:默认的流程,如图

  • force:省略对offset的一致性校验

  • takeover:执行第5步,忽略一致性、忽略master状态和其他master的意见

RedisTemplate访问分片集群

RedisTemplate底层同样基于lettuce实现分片集群的支持,而使用的步骤与哨兵模式基本一致:

1、引入redis的starter依赖

2、配置分片集群地址

3、配置读写分离

与哨兵模式相比,其中只有分片集群的配置略有差异:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐