首页 > 数据库 >Redis分片集群

Redis分片集群

时间:2023-11-09 23:01:10浏览次数:40  
标签:插槽 Redis 192.168 集群 key 分片 master 节点

搭建分片集群

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

●海量数据存储问题

●高并发写的问题

使用分片集群可以解决.上述问题,分片集群特征:

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

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

●master之间通过ping监测彼此健康状态

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

Redis分片集群_Redis分片集群

散列插槽

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

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

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

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

例如: key是num,那么就根据num计算,如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一

个hash值,然后对16384取余,得到的结果就是slot值。

Redis分片集群_Redis分片集群_02

效果检验:

Redis分片集群_Redis分片集群_03

可以看到Redis存取值的时候,会自动切换插槽

Redis如何判断某个key应该在哪个实例?

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

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

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

如何将同一类数据固定的保存在同一个Redis实例?

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


验证:

Redis分片集群_Redis分片集群_04

可以看到当加上前缀之后,两者的插槽值是相同的,保存到了同一个Redis上


集群伸缩

redis-cli --cluster提供了很多操作集群的命令,可以通过下面方式查看:

Redis分片集群_redis集群_05

比如,添加节点的命令:

Redis分片集群_redis集群_06

案例:

向集群中添加一个新的master节点,并向其中存储num = 10

需求:

●启动一个新的redis实例,端口为7004

●添加7004到之前的集群,并作为一个master节点

●给7004节点分配插槽,使得num这个key可以存储到7004实例

Redis分片集群_Redis高可用_07

Redis分片集群_Redis高可用_08

Redis分片集群_redis集群_09

Redis分片集群_Redis高可用_10

-

Redis分片集群_Redis分片集群_11

Redis分片集群_Redis分片集群_12

Redis分片集群_Redis分片集群_13

删除节点

Redis分片集群_Redis_14

主节点有插槽不能直接删除,需要先将插槽移动到其他节点上才能删除

Redis分片集群_Redis高可用_15

Redis分片集群_Redis高可用_16

故障转移

自动转移

Redis分片集群_Redis_17

Redis分片集群_Redis_18

Redis分片集群_Redis分片集群_19

当集群中有一个master宕机会发生什么呢?

1.首先是该实例与其它实例失去连接

2.然后是疑似宕机:

Redis分片集群_redis集群_20

3.最后是确定下线,自动提升一-个slave为 新的master:

Redis分片集群_Redis高可用_21

手动数据迁移

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

Redis分片集群_Redis_22

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

●缺省:默认的流程,如图1~6步

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

●takeover:直接执行第5步,忽略数据一致性、忽略master状态和其它master的意见

命令演示

原始状态:

Redis分片集群_redis集群_23

执行 CLUSTER FAILOVER 命令

Redis分片集群_redis集群_24

Redis分片集群_Redis分片集群_25


RedisTemplate访问分片集群

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

1.引入redis的starter依赖

2.配置分片集群地址

3.配置读写分离

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

Redis分片集群_Redis_26

spring:
  redis:
    cluster:
      nodes:
        - 192.168.40.128:7001
        - 192.168.40.128:7002
        - 192.168.40.128:7003
        - 192.168.40.128:8001
        - 192.168.40.128:8002
        - 192.168.40.128:8003
      #    sentinel:
#      master: mymaster
#      nodes:
#        - 192.168.40.128:27001
#        - 192.168.40.128:27002
#        - 192.168.40.128:27003
从Redis中取值

Redis分片集群_Redis_27

观察控制台日志

Redis分片集群_redis集群_28

向Redis中set值

Redis分片集群_Redis分片集群_29

观察控制台日志

Redis分片集群_redis集群_30

Redis各个节点实例

Redis分片集群_Redis分片集群_31

标签:插槽,Redis,192.168,集群,key,分片,master,节点
From: https://blog.51cto.com/AmbitionGarden/8286235

相关文章

  • Redis队列和阻塞队列
    redis队列的优点是轻量级,业务足够简单时不需要使用rabbitMq这样专业的消息中间件;缺点是弹出队列中的元素时,即使该消息处理失败也无法再次进行消费Redis队列List简单演示如下普通的redis队列,为了实现业务,通常会使用while进行循环,这样的话没有消息时依旧会频繁的执行循环,造成cpu的......
  • redis 类型Hash 中value字符串存储空间大小
    在Redis中,Hash数据类型中的value是字符串,存储空间大小取决于存储在Hash中的每个value字符串的长度。Redis内部并不会额外存储每个value的元信息,因此存储空间大小主要由存储的字符串长度决定。每个字符串值的存储空间大小取决于以下因素:字符串长度:字符串的长度是主要的决定因素。较......
  • Redis内存淘汰策略
    内存淘汰策略分类早期版本的Redis有以下6种淘汰策略:noeviction:不淘汰任何数据,当内存不足时,新增操作会报错,Redis默认内存淘汰策略;allkeys-lru:淘汰整个键值中最久未使用的键值;allkeys-random:随机淘汰任意键值;volatile-lru:淘汰所有设置了过期时间的键值中最久未使用的键值......
  • redis特点
    知识点归纳:1.Redis速度快的原因:内存存储、C语言实现、单线程、优秀的源代码2.Redis支持的5种数据结构:字符串、列表、集合、有序集合、哈希3.Redis额外的功能:订阅、流水线、Lua脚本、键过期、事务4.Redis的简单现在:源代码少、单线程、不依赖类库,独立处理事件5.Redis支持多种语言6.Re......
  • 集群中几种session同步解决方案的比较
    在集群中session安全和同步是个最大的问题,下面是收集到的几种session同步的方案,希望能通过分析其各自的优劣找出其适应的场景。1.客户端cookie加密简单,高效。比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现。问题:session中数据不能太多,最好只有......
  • SpringBoot AOP + Redis 延时双删功能实战
    一、业务场景在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。请求一:A修改数据库数据B修改Redis数据请求二:C修改数据库数据D修改Redis数据并发情况下就会存在A—>C—>D—>B的情......
  • Redis 哨兵模式的原理及其搭建
    1.Redis哨兵Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。1.1.哨兵原理1.1.1.集群结构和作用哨兵的结构如图:哨兵的作用如下:监控:Sentinel会不断检查您的master和slave是否按预期工作。自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当......
  • Redis系列之常见数据类型应用场景
    目录String简单介绍常见命令应用场景Hash简单介绍常见命令应用场景List简单介绍常见命令应用场景Set简单介绍常见命令应用场景SortedSet(Zset)简单介绍常见命令应用场景Bitmap简单介绍常见命令应用场景附录Redis支持多种数据类型,比如String、hash、list、Set、SortedSet、Stream......
  • Redis哨兵集群
    ●slave节点宕机恢复后可以找master节点同步数据,那master节点宕机怎么办?哨兵的作用Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:●监控:Sentinel会不断检查您的master和slave是否按预期工作自动故障恢复:如果master故障,Sentinel会将一个......
  • Spring Data Redis使用方式
    SpringBoot提供了对应的Starter,maven坐标:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>SpringDataRedis中提供了一个高度封装的类:RedisTemplate,对相关api进行了......