当前位置: 首页 > news >正文

redis cluster集群

华子目录

  • 什么是`redis集群`
  • `redis cluster`的`体系架构`
  • 什么是数据`sharding`?
  • 什么是`hash tag`
  • 集群中删除或新增节点,数据如何迁移?
  • `redis集群`如何使用`gossip`通信?
    • 定义
    • `meet信息`
    • `ping消息`
    • `pong消息`
    • `fail消息(不是用gossip协议实现的)`
    • 流量图
  • 数据访问如何定位到具体的节点?
    • 正常访问
    • 访问已被迁移到其他节点的数据
  • `redis cluster主从架构`
  • 创建`redis cluster`的`前提`

什么是redis集群

  • redis3.0开始就支持集群节点之间使用gossip协议进行通信,实现了去中心化集群中支持动态的添加和删除节点动态迁移数据以及自动执行故障转移
  • 哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动slave提升为master,从而可以保证redis服务正常使用,但是无法解决redis单机写入瓶颈问题,即单机redis写入性能受限于单机的内存大小、并发数量、网卡速率等因素
  • 集群某个节点是否失效,是由整个集群超过半数节点监测都失效,才能算真正的失效
  • 客户端不需要proxy即可直接连接redis应用程序中需要配置全部的redis服务器IP
  • 每个哈希槽可以存储若干个key
  • 无中心redis集群当中,其每个节点保存当前节点数据整个集群状态每个节点都和其他所有节点连接

redis cluster体系架构

在这里插入图片描述

什么是数据sharding

  • redis cluster使用数据分片实现key存储分布
  • redis cluster集群划分为16384个槽位数据库中所有的key进行hash计算后,都会落到这16384个槽位中的其中一个槽位
  • 那么key是如何定位到哪个槽位的。可以通过公式进行计算:CRC16(key)%16384得到就是槽位16384个槽位全部分配cluster中的节点
  • 每个节点维护自己的槽位,同时每个节点也会存储其他节点维护的槽位信息
  • 当然你也可以指定到哪个槽位,这就涉及到了hash tag

什么是hash tag

  • hash tag是用来解决用户想要将一堆数据key全部放到一个槽位提出来的用户可以将key设置成这样:原始的key + {tag标签},当redis cluster碰到这样的key,就会提取{}里面的,进行槽位计算

集群中删除或新增节点,数据如何迁移?

  • 假设cluster目前有四个节点A,B,C,D
  • 如果删除D节点,则会将D节点中的所有槽位全部分配给A,B,C节点
  • 如果新增E节点,则会将A,B,C,D中的部分槽位移动到E节点

redis集群如何使用gossip通信?

定义

  • gossip使得元数据分布式存储不做集中存放,实现了去中心化,当一个节点信息变更,就会触发集群中整个节点信息的更新缺点就是更新会有延迟

meet信息

  • 用于在集群中通知新节点加入

ping消息

  • 用于检测节点是否在线交换每个节点之间状态信息

pong消息

  • pong消息是用来回应其他节点自己发的消息,还可以通过发此消息,让其他节点更新此节点状态信息

fail消息(不是用gossip协议实现的)

  • 集群里的主节点A主节点B标记为下线时,会通过集群广播一条关于主节点Bfail消息,所有接受到这条消息节点(包括主从节点)都会将主节点B标记为下线

流量图

在这里插入图片描述

数据访问如何定位到具体的节点?

正常访问

在这里插入图片描述

访问已被迁移到其他节点的数据

在这里插入图片描述

redis cluster主从架构

  • Redis cluster架构虽然解决了并发的问题,但是又引入了一个新的问题,每个Redis master高可用如何解决
  • 那就是对每个master节点都实现主从复制,从而实现redis高可用性

在这里插入图片描述

创建redis cluster前提

  • 每个redis node节点采用相同的硬件配置相同的密码相同的redis版本
  • 每个节点必须开启参数
cluster-enabled yes  #必须开启集群状态,开启后redis进程会有cluster显示
cluster-config-file nodes-6380.conf   #此文件有redis cluster集群自动创建和维护,不需要任何手动操作
  • 所有redis服务器必须没有任何数据
  • 先启动单机redis且没有任何key value
http://www.lryc.cn/news/510493.html

相关文章:

  • 解锁高效密码:适当休息,让学习状态满格
  • 代码随想录算法训练营第十一天-150.逆波兰表达式求值
  • C++ 泛编程 —— 嵌套使用模板类
  • 【WebGIS】Cesium:GLTF数据加载
  • 【面经】25届 双非本科 字节跳动 北京 四年的总结
  • 抖去推碰一碰系统技术源码/open SDK转发技术开发
  • goview——vue3+vite——数据大屏配置系统
  • 中间件xxl-job安装
  • 【第2篇】 Python与数据库基础
  • CTFHUB-web进阶-php
  • 深度学习使用Anaconda打开Jupyter Notebook编码
  • 金蝶V10中间件的使用
  • Firewalld 防火墙详解:深入理解与实践指南
  • linux系统编程(五)
  • Effective C++ 条款 16:成对使用 `new` 和 `delete` 时要采取相同形式
  • 【HarmonyOS NEXT】鸿蒙原生应用“上述”
  • 【人工智能】使用Python构建推荐系统:从协同过滤到深度学习
  • 店铺营业状态设置
  • batchnorm和layernorm的理解
  • 在git commit之前让其自动执行一次git pull命令
  • 【Rust自学】6.3. 控制流运算符-match
  • 大模型应用技术系列(三): 深入理解大模型应用中的Cache:GPTCache
  • 『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释
  • 深度解析:Maven 和 Gradle 的使用比较及常见仓库推荐
  • SQLite本地数据库的简介和适用场景——集成SpringBoot的图文说明
  • 管理面板Ajenti的在Windows10下Ubuntu24.04/Ubuntu22.04里的安装
  • 在Python如何用Type创建类
  • Android学习19 -- NDK4--共享内存(TODO)
  • 《Cocos Creator游戏实战》非固定摇杆实现原理
  • RabbitMQ工作模式(详解 工作模式:简单队列、工作队列、公平分发以及消息应答和消息持久化)