Redis-集群

Redis集群

image-20240401213935236

集群:由于数据量过大,单个master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是redis的集群,其作用是提供在多个redis节点间共享数据的程序集

考集群的算法和架构拓扑安装

image-20240401214301548

==Redis集群是一个提供在多个Redis节点间共享数据的程序集==

==Redis集群可以支持多个Master==

干什么

redis集群支持多个Master,每个Master又可以挂载多个slave

  • 读写分离
  • 支持数据的高可用
  • 支持海量数据的读写存储操作

由于cluster自带的故障转移机制,内置了高可用的支持,无需再去使用哨兵的功能

客户端与redis的节点连接,不再需要连接集群中的所有节点,只需要任意连接集群中的一个可用节点即可

槽位slot负责分配到各个物理服务节点,又对应的集群来负责维护节点,插槽和数据之间的关系.

集群算法 分片 槽位slot

槽位slot

集群的密钥空间被分为16384个槽位,有效设置了16384个主节点的集群大小上限(但是建议,最大的节点大小约为1000个节点)

redis有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定防止在哪个槽,集群的每个节点负责一部分hash槽.

image-20240401220220448

分片

1. 定义:使用redis集群时我们会将存储的数据分散到多台redis机器中,这称为分片.

集群中的每个redis实例都被认为是整个数据的一个分片

2.如何找到给定key的一个分片

为了找到给定key的分片,我们对key进行CRC16(KEY)算法处理并通过对总分片数量取模.然后,使用确定性哈希函数,这意味着给定的key将多次始终映射到同一个分片,我们可以推断将来读取特定key的位置

优势

image-20240401221138492

slot槽位映射,一般业界有三种解决方案

redis集群分片之hash取余分区算法

image-20240401221729042

一致性哈希

image-20240401223213985

分布式缓存数据变更与映射问题,某个机器宕机了,分母的数量就改变了,自然取余就不可以了

能干啥

  • 提出了一致性hash解决方案
  • 目的是当服务器个数发生变动时,尽量减少影响客户端到服务器的映射关系

步骤

算法构建一致性哈希环

image-20240401223306047

服务器IP节点映射

image-20240401223600375

key落到服务器的落键规则

优点

image-20240401223814591

image-20240401223833557

哈希槽分区

image-20240401224030139

一定要-c 这个指令是值用集群的形式来运行 ,