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

redis之集群

集群

  • 一、问题
    • 1.1 redis 集群为什么槽位选择16384
    • 1.2 redis集群不保证强一致性
  • 二、实例演示
    • 2.1 配置集群
    • 2.2 主机宕机
    • 2.3 扩容
    • 2.4 缩容
  • 三、简介集群
    • 3.1 什么是槽slot
    • 3.2 什么是分片
      • 3.2.1 分片和槽的优势
    • 3.3 槽位映射算法
      • 3.3.1哈希取余分区算法
      • 3.3.2 一致性哈希算法分区
      • 3.3.3 哈希槽分区
    • 3.3 常用命令
      • 3.3.1 是否对外提供命令
      • 3.3.2 槽位是否被占用
      • 3.3.3 当前key分配到哪个槽位
      • 3.3.4 集群结点信息

一、问题

1.1 redis 集群为什么槽位选择16384

在 Redis 集群中,Redis 根据公式 HASH_SLOT=CRC16(key) mod 16384 ,来确定客户端的 key 映射到哪个分片上,然后 Redis 会去相应节点进行操作。然而,CRC16 算法最多可产生 65535 个槽位,但是 Redis 的取模 是16384 ,主要基于如下两个原因:

①Redis 节点在发送心跳数据包时需要将所有槽都放入到这个心跳包里,如果采用 16384 个插槽,占用空间为 2KB(16384/8);如果采用 65536 个插槽,占空间 8KB (65536/8)。8KB 的心跳数据有点儿大。
16384b/8/1024=2KB
②Redis Cluster 不太可能扩展到超过 1000 个节点,太多会导致网络拥堵。选择 16384 ,照样可以确保每个主节点都有足够的槽。
所以,选择 16384 既可以保证集群中每个节点都有足够的槽,又能保证心跳数据包不会过大。

1.2 redis集群不保证强一致性

当一个主机宕机,并且其从机还没有上位时,可能会出现写丢失。

二、实例演示

2.1 配置集群

首先给每个服务器添加上开启集群的配置,接着开启redis主机实例,
在这里插入图片描述
之后为机器构建集群关系
在这里插入图片描述
自动分配主从节点。

在这里插入图片描述
添加key时,防止路由失效,比如当前节点只能写0-4096,但是你的key映射到了4097,则会报错,所以我们要添加一个参数 -c 保证连接,即使当前槽位不在该主机,也不会报错,会重定位到另一个主机。
在这里插入图片描述

在这里插入图片描述

2.2 主机宕机

当一个主机宕机之后,其从机会上位,如果宕机的主机又启动了,那么它会自动变为从机。如果想要恢复和原来关系一样,可以采用
在这里插入图片描述

2.3 扩容

在这里插入图片描述

扩容 首先将扩容的机器添加上集群开启配置,之后将机器添加到原始集群上,
redis-cli --cluster add-node <new-node-ip>:<new-node-port> <existing-node-ip>:<existing-node-port>

分配槽位
redis-cli --cluster reshard <existing-node-ip>:<existing-node-port>
给新的主节点 添加从节点(同时把该节点加入汲集群)
在这里插入图片描述

2.4 缩容

缩容
删除当前主节点对应的从节点
将要删除的主节点的槽位清空,进行重新分配
删除主节点

三、简介集群

主从复制时,当主节点宕机了,从节点并不能自动升级为主节点,所以出现了哨兵,哨兵可以帮助我们选择一个从节点上位,但是哨兵有一个缺点就是它只有一个主结点,扩容缩容不方便,主节点压力大,集群可以让我们有多个主节点和从节点。

3.1 什么是槽slot

redis集群槽有16384个哈希槽,每个key通过CRC16校验后来决定放入哪个槽,集群的每个结点负责一部分哈希槽。
也就是在数据放入到结点之前加了一步槽的概念,先确定槽,把数据放到对应槽上,在确定放到哪个节点上。当我们后续槽进行重新分配时,上边的数据也会跟着移动。
在这里插入图片描述

3.2 什么是分片

分片其实就是看有几个主节点,一整个集群可以进行分片,每个分片确定一部分哈希槽。
在这里插入图片描述

3.2.1 分片和槽的优势

可以很容易的进行添加或者删除节点,添加或者删除节点,移动槽位分配信息时,并不会停止服务,捕获造成集群成不可用的状态。就是即使删除了一个节点,我们可以把它的槽位分配出去,该集群仍是可用的。

3.3 槽位映射算法

我们的槽位信息到底对应到哪个机器上?

3.3.1哈希取余分区算法

hash(key)/节点数。
该算法简单,但是它的缺点很大,就是比如扩容或者缩容时,我们的节点就会有变化,会造成我们的槽位分配信息大片混乱。

3.3.2 一致性哈希算法分区

①一致性哈希环
在这里插入图片描述
②每个节点通过映射 映射到哈希环上
在这里插入图片描述
③key落到服务器的落键规则
在这里插入图片描述
优点: 容错性和扩容性,就是即使节点变化,扩容或者缩容时,并不会全部槽位映射混乱,只会影响一部分数据。
在这里插入图片描述
缺点: 数据倾斜问题
可能会导致一个主机分配的槽位太多,但是其他主机太少。不能自动分配。
在这里插入图片描述

3.3.3 哈希槽分区

在这里插入图片描述

在这里插入图片描述

3.3 常用命令

3.3.1 是否对外提供命令

如果一个主节点挂了,不能对外提供服务,如果是yes,则不能对外提供服务,如果是no,则可以对外提供服务。

cluster-require-full-coverage

3.3.2 槽位是否被占用

0代表没有被占用,1代表已经被占用
CLUSTER COUNTKEYSINSLOT 槽位编号

3.3.3 当前key分配到哪个槽位

CLUSTER KEYSOLT KEY

3.3.4 集群结点信息

CLUSTER NODES
在这里插入图片描述

相关文章:

  • Python web 开发 flask 实践
  • 汇凯金业:现货黄金投资平仓策略有哪些
  • 暴雨讲堂|通往AGI的必由之路—AI agent是什么?
  • 超详细的linux-conda环境安装教程
  • svm 超参数
  • maxwell源码编译安装部署
  • Docker 从安装到使用的完整指南
  • Python抓取高考网图片
  • Android屏幕旋转流程(1)
  • 代理网络基础设施 101:增强安全性、速度和可扩展性
  • 生成式人工智能时代的5大网络安全趋势
  • AI大模型部署Ubuntu服务器攻略
  • Navicat和SQLynx产品功能比较一(整体比较)
  • Text2SQL基座模型选择的实战教程(持续更新)
  • 香港云服务器怎么处理高并发和突发流量?
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • C# 免费离线人脸识别 2.0 Demo
  • docker容器内的网络抓包
  • Intervention/image 图片处理扩展包的安装和使用
  • js作用域和this的理解
  • spring security oauth2 password授权模式
  • vagrant 添加本地 box 安装 laravel homestead
  • vuex 笔记整理
  • vue自定义指令实现v-tap插件
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 浮动相关
  • 给新手的新浪微博 SDK 集成教程【一】
  • 设计模式(12)迭代器模式(讲解+应用)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一些css基础学习笔记
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​queue --- 一个同步的队列类​
  • ​决定德拉瓦州地区版图的关键历史事件
  • #{}和${}的区别?
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (02)Unity使用在线AI大模型(调用Python)
  • (1)Hilt的基本概念和使用
  • (11)MATLAB PCA+SVM 人脸识别
  • (175)FPGA门控时钟技术
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (k8s)kubernetes集群基于Containerd部署
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)详解PHP处理密码的几种方式
  • (转载)Linux 多线程条件变量同步
  • .NET Core引入性能分析引导优化
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...