redis集群最少使用三个主节点和使用16384个槽以及主节点数量不超过1000的原因

目录

集群最少三个主节点的原因

为什么是三个?

为什么是奇数?

16384个槽和1000个主节点


集群最少三个主节点的原因

https://redis.io/docs/management/scaling/

官网建议,搭建 redis 集群最少三主三从。

但是这么做是出于什么考虑呢?

https://worktile.com/kb/p/34708

https://blog.csdn.net/qq_35549286/article/details/127057374

借鉴这位的解答

为什么是三个?

cluster各节点之间需要互相通信确认对方是否存活。

假设有A、B两个节点,

B发现联系不上A,是不能确定A和B谁出了问题的,假设集群中还有一个C节点的话,

如果B、C可以互相联系,但是都联系不上A,

那么这时候就可以确定A出问题了,需要把A从集群中踢出去。

为什么是奇数?

集群可用原则:可用节点数量>集群总节点数量的二分之一,节点数量为奇数个是出于节省资源的考虑。

因为不管是四个还是三个节点,一旦挂了两个,整个集群都是不可用的。

即为了节省资源和节点通信考虑,集群的节点数量为奇数,即

y=2x+1,x为正整数,y为主节点数

16384个槽和1000个主节点

https://redis.io/docs/reference/cluster-spec/#overview-of-redis-cluster-main-components

https://redis.io/docs/management/scaling/#redis-cluster-101

crc16算法 产生的结果是 2^16,即65536,但是取用了 16384,是出于什么原因?

https://github.com/redis/redis/issues/2576

github上回复了。

https://blog.csdn.net/qq_35971258/article/details/126839944

按照上面的文章的意思,节点之间传递ping数据包如果是 16384,myslots数组会是2048个字节,即2KB,如果是65536,即8KB,如果1000个主节点相互传输数据,那是1000*1000*2KB=2000000KB,由于网络传输的单位是bit,转换单位就是2000000*1024*8=16,384,000,000,网卡单位和带宽是 bit,但是计算机表示数据使用的是字节,例如接入的带宽是 1gb,实际上一秒最多传输 128 MB的数据。

1gb 对应的是 bit 总数是1,073,741,824,16,384,000,000/1,073,741,824=15.25,即16gb的网卡才能满足要求,但是一般的网卡达不到这么高,如果有这些节点相互发送数据会造成网络拥堵,这还只是算了主节点,没算副本节点,更不用说8KB的数据了。

内存和cpu执行速度很快。集群的节点数多了这个时候性能瓶颈就在网络上了。所以,主节点数少且是大于3的奇数为好。

相关推荐
遇乐的果园1 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
摇滚侠2 小时前
Java 全栈开发实战教程 课程笔记 29-33
笔记
茯苓gao2 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
whyTeaFo3 小时前
GAMES101: Lecture 9: Shading 3(Texture Mapping cont.) ppt笔记
笔记
chase。4 小时前
【学习笔记】PointWorld:迈向通用机器人操控的3D世界模型
笔记·学习·机器人
ShiXZ2136 小时前
Redis docker-compose 部署指南
redis·docker·eureka
星恒随风7 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习
谢白羽7 小时前
vllm源码剖析14-vLLM 分布式推理-专家并行EP
笔记·分布式·llm·论文·vllm
玖玥拾8 小时前
Unity 3D 笔记(十一)UI 框架进阶:栈弹窗交互、BasePanel 基类虚方法、DoTween 界面动画
笔记·3d·unity
FellAveal8 小时前
【Go语言入门学习笔记】Part13.结构体与接口
笔记·学习·golang