redis集群之hash槽分析算法

news2024/12/26 20:48:28

上文提过了 hash取余算法和hash一致性算法
一致性hash算法是为了减少节点数目发生改变时尽可能的减少数据迁移
将所有的存储节点排在首位相连的Hash环上,每个key在计算hash后会顺时针找到临近的存储节点。
而当有节点加入或退出时,仅影响该节点在hash环上顺时针相邻的节点。
优点

加入或删除时节点,只影响Hash环中顺时针方向的相邻节点。
加入时:将相邻的节点一部分数据转移的新节点
删除时:将相邻的节点添加删除节点的数据

缺点

数据的分布与节点位置有关,而这些节点不均匀的分布在Hash换上,所以每个
redis实例存储的数据也不均匀,会造成数据倾斜

刚刚提到一致性hash算法有数据倾斜问题,为了解决这个问题便又了
hash槽分析算法。

哈希槽

哈希槽时机就是一个数组,数组【0,2^14-1】形成了哈希槽空间。

哈希槽用来解决均匀分配问题,在数据和节点之间又加了一层,把这层称为hash槽,用于管理数据和节点之间的关系,现在就相当于节点上方的是槽,槽里放的数据。

一个集群只能有16384个槽,编号0-16383,这些槽会分配给各个主节点。同时集群会记录槽与节点的关系。解决槽和节点的映射关系后,接下来
堆key进行计算求出槽位。hash_solt=CRC16(key) mod 16384。如果要增减节点,则以槽为单位移动数据,这样数据移动问题就更加简单了

在这里插入图片描述

为什么redis集群的最大槽数是16384个?

CRC16算法可以产生的hash值有 2^16 bit,
该算法可以产生2^16个值,那为何不用
Hash_solt=CRC16(key) mod 65536呢?

正常的心跳包数据带有节点的完整配置。

原因1: 如果槽位位65536,发送心跳消息的消息头达8k,发送心跳包过于庞大。

在心跳消息的消息头中最占空间的是myslots[CLUSTER_SOLT/8]。
当槽位为65536时,这块大小是:65536/8/1024=8kb
当槽位为16384时,这块大小是:16384/8/1024=2kb

因为每一秒钟(心跳配置间隔),redis节点需要发送一定数量的ping消息作为心跳包。如果每条消息的消息就占8kb,浪费带宽。

原因2:redis cluster节点数量超过1000个

redis集群节点越多,心跳包的消息体内携带的数据越多。如果节点超过1000个,会导致网路拥堵,因此redis作者不建议将redis cluster节点数量超过1000个。那么对于节点数在1000以内的rediscluster集群,16384个槽位够用了,没必要扩展到65536个。

原因3:槽位越小,节点少的情况下,压缩比高,容易传输

redis主节点的配置信息中他所负责的hash槽是通过一张bitmap的形式来保存的,在传输过程中会对bitmap进行压缩,
bitmap的填充率=slots / N (N表示节点数)
也就是说slots越小,填充率就会越小,压缩率就会越高,传输效率就会越高

其他

redis 集群也不能保证强一致性(C)可以保证AP。在一些特定的情况下,redis集群可能会丢掉一些被系统受到到写入请求命令。就是主机突然挂了,还没来得急同步从机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/546778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-python3求平均值

Python3求平均值-从基础到实践 Python3作为一种广泛使用的编程语言,被广泛应用于不同的领域。今天我们将探讨如何使用Python3求平均值。求平均值在数学和统计学中非常常见,使我们能够了解数据的中心趋势,并简化数据分析过程。让我们深入了解…

DELPHI7实现XP菜单风格

在DELPHI7中不使用任何第三方控件,实现放在工具栏上可拖动的XP风格菜单 今天有点空闲时间,顺便写点东西,不是什么深奥的东西,但实用,对于不想第三方控件但又想加点效果的朋友可能有点用.实现的效果如图: 步骤一:把Win32面板上把CoolBar组件加到窗体上 步骤二:把Additional面板上…

VBA 密码删除软件 4n6.VBA Password Remover 1.2 Crack

VBA 密码删除软件 软件评级(基于 1541 条评论的平均评分 4.8) 该工具是完美的软件,可以解锁任何类型的受密码保护的 VBA 文件。用户可以轻松使用此 VBA 密码删除软件并从 VBA 文件中删除密码保护。 兼容所有 Office 文件格式:.d…

Linux线程5——生产消费模型

生产消费模型 1个交易场所:超市 2种角色:生产者/消费者 3种关系:生产者和生产者(竞争关系也叫互斥关系),消费者和消费者(竞争关系同样是互斥关系),生产者和消费者(互斥,同步关系:生产完再消费或消费完再生产)。 以上是生产消费模型遵守的“321”原则。 生产者和消…

RocketMQ Connect 核心知识点概述

一、概览 RocketMQ Connect是RocketMQ数据集成重要组件,可将各种系统中的数据通过高效,可靠,流的方式,流入流出到RocketMQ,它是独立于RocketMQ的一个单独的分布式,可扩展,可容错系统&#xff0…

英文文本情感分析textblob模块sentiment方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 英文文本情感分析 textblob模块 sentiment方法 [太阳]选择题 关于下列代码说法错误的是? from textblob import TextBlob myText"Textblob is amazingly simple to us…

chatgpt赋能Python-python3绝对值

Python3绝对值——学习Python3编程的基础 Python3是一种非常流行的编程语言,可以应用于各种不同的场景,例如数据科学、机器学习、网络编程、自动化脚本、游戏开发等。在Python3编程中,绝对值是一个基础的概念。 什么是绝对值? …

【网络编程】实现UDP/TCP客户端、服务器

目录 一、UDP 1、Linux客户端、服务器 1.1udpServer.hpp 1.2udpServer.cc 1.3udpClient.hpp 1.4udpClient.cc 1.5onlineUser.hpp 2、Windows客户端 二、TCP 1、单进程版的TCP客户端、服务器 1.1tcpServer.hpp 1.2tcpServer.cc 1.3tcpClient.hpp 1.4tcpClient.cc …

K8s进阶1——kubeadm工具搭建K8s高可用集群

文章目录 一、资源清单二、系统初始化2.1 所有服务器配置2.2 master节点配置 三、nginxkeepalived3.1 主备机器上进行3.2 配置主节点3.3 配置备节点3.4 启动服务 四、部署etcd集群4.1 资源清单4.2 生成Etcd证书4.3 部署Etcd集群 五、安装Docker/kubeadm/kubelet5.1 安装docker5…

ESP32-C3入门教程 问题篇⑱——VSCode ESP-IDF Monitor device 波特率不对导致乱码

文章目录 一、前言二、发现问题三、分析问题一、前言 本文基于VS Code IDE进行编程、编译、下载、运行等操作 基础入门章节请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World 教程目录大纲请查阅:ESP32-C3入门教程——导读 二、发现问题 升级了VSCode,没注意…

GDB调试无行号,报dwarf error问题解决

背景 近期我开发的一个C程序,在生产环境产生了coredump,但是在调试该core文件时,打出的debug信息并不全。 这种debug信息丢失,其实说白了,就是符号表丢失。一般由两种情况造成,一种是编译的时候没有加-g参…

EasyRecovery16适用于Windows和Mac的专业硬盘恢复软件

无论你对数据恢复了解多少, 我们将为您处理所有复杂的流程并简化恢复!适用于Windows和Mac的 专业硬盘恢复软件 硬盘数据无法保证绝对安全。有时会发生数据丢失,需要使用硬盘恢复工具。支持恢复不同存储介质数据:硬盘、光盘、U盘/移动硬盘、数…

类似于ChatGPT的优秀应用notion

notion 是一款流行的笔记应用。不过功能实际远超笔记,官方自己定义是:“将笔记、知识库和任务管理无缝整合的协作平台”。其独特的 block 概念,极大的扩展了笔记文档的作用,一个 block 可以是个数据库、多媒体、超链接、公式等等。…

如何把Docker容器变成物理机系统

如何把容器变成物理机 本文的主题是把容器变成物理机,根据所学的知识。以及通过各种搜索引擎。他们都告诉我们,这是不可能的。这真的是不可能的吗?我不信,那我就要创造奇迹。请继续往下看。本文将教你如何把容器变成物理机。作品…

PBDF8WN、FPBJXDN、FPBMXDN插装式比例阀放大器

PBHB8WN、PBFB8WN、PBDB8WN、PBHF8WN、PBFF8WN、PBDF8WN、PBJB8WN、RPEILAN、RBAPXAN、RBANXAN、FPBGXDN、FPBDXDN、FPBJXDN、FPBMXDN、FPBFXDN、FPBIXDN、FREPXAN比例插装阀一种高精度液压控制元件,其采用了先进的比例控制技术,可以根据控制信号快速地调…

linux介绍

/ 是所有目录的源点目录结构整体是一棵倒挂的树bin:存放二进制可执行文件boot:存放系统引导时使用的各类文件dev:存放设备文件etc:存放系统配置文件home:存放系统用户的文件lib:存放系统运行所需的共享库和…

传输层:TCP协议

传输层中有两个重要的协议:TCP协议和UDP协议。本博文分享的是TCP协议,不仅分享其协议格式,特点等等,还有应答机制、超时传送机制、连接管理机制、滑动窗口、阻塞控制等等。 TCP协议 TCP全称为 "传输控制协议(Transmission C…

Python中的自定义函数创建方法和应用举例

Python中的自定义函数创建方法和应用举例 在Python语言中,函数是一组能够完成特定任务的语句模块,可分为内置函数、第三方模块函数和自定义函数。其中,内置函数是Python系统自带的函数;模块函数是NumPy等库中的函数。 1.自定义函…

Java【网络原理2】TCP 协议的三次握手和四次挥手到底是什么意思?

文章目录 前言一、三次握手三次握手的作用 二、四次挥手总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链…

mysqlbinlog delete恢复成insert

不小心把数据删掉了 首先要拿到binlog文件 执行以下命令行 /usr/local/mysql/bin/mysqlbinlog --base64-outputdecode-rows --start-datetime“2023-05-19 09:01:32” --stop-datetime“2023-05-19 09:01:35” -v /Users/zylong/Downloads/mysql-bin.003178 --result-file/Use…