【学习笔记】Redis学习笔记——第17章 集群
创始人
2024-11-19 07:08:53

第17章 集群

17.1 节点

使用cluster meet命令将其他节点添加到当前节点集群中

17.1.1 启动节点

通过cluster-enabled设置来决定是否启用集群

17.1.2 集群数据结构

每个节点都保存了自己及其他节点的IP端口号等信息

17.1.3 cluster meet命令的实现

是收到命令的节点和新节点握手建立连接,并传播这个节点给其他集群节点握手认识

17.2 槽指派

整个数据库为16384个槽(即常说的桶),每个节点处理0-16384个槽,当有槽未被指派时,整个集群处于下线状态

17.2.1 记录节点的槽指派信息

一个二进制的数组,如果相对位置上值为1,则代表需要处理该槽

17.2.2 传播节点的槽指派信息

节点会将自己处理的槽信息发给其他节点

17.2.3 记录集群所有槽的指派信息

每一个节点都记录了每个槽是由哪个节点来处理

17.2.4 Cluster addslot命令的实现

1>检查指派的槽是否是未指派状态
2>分配并记录在clusterNode中

17.3 在集群中执行命令

17.3.1 计算键属于哪个槽

通过Key计算出一个0-16383的值来决定键属于哪个槽

17.3.2 判断槽是否由当前节点负责处理

查看键的槽计算值是否有自己处理,否则的话引导向负责该槽处理的节点

17.3.3 Moved错误

如果访问的节点不负责处理这个槽,会返回Moved错误引导客户端访问正确的节点,在集群模式下的客户端会屏蔽掉这个错误

17.3.4 节点数据库的实现

与单机相比差别不大,键与槽的关系使用跳表保存

17.4 重新分片

1>通知源节点与目标节点
2>将源节点数据分批复制到目标节点

17.5 ASK错误

在重新分片期间,被重分配的槽同时由源节点与目标节点操作,取决于键的被转移情况。(PS:所以此时会出现两个节点同时处理一个槽的状况)

17.5.1 Cluster Setslot importing 命令的实现

使用一个数组来记录正在被导入的槽

17.5.2 Cluster Setslot mingrating命令的实现

使用一个数组来记录正在被迁移的槽

17.5.3 ASK错误

如果键属于当前节点负责处理的槽,但没有找到,会到正在被迁移的槽中寻找,并返回给客户端ASK错误并返回该键被迁移到的节点(与Moved错误相似)

17.5.4 ASKING命令

使用该命令可以让节点破例操作正在被导入的槽中的键

17.5.5 ASK与Moved错误的区别

主要可以理解为中间态与稳定态的区别

17.6 复制与故障转移

从节点接替主节点负责的槽继续进行工作

17.7 消息

redis通过发送与接收消息来进行通信,消息有其自己的格式

相关内容

热门资讯

刚刚,Claude最新功能泄露... 新智元报道 编辑:定慧 大卫 【新智元导读】2026年5月4日,testingcatalog在An...
高分辨大宽带集成光子光谱仪成功... 麦姆斯咨询获悉,近日,中国科学院南京天文光学技术研究所天文光子学团队在面向天文观测的高分辨大宽带集成...
性价比高又稳定的云手机哪个好?... 作为搬了4年砖、踩过无数云手机坑的老玩家,今天直接给你们唠唠性价比高又稳定的云手机选法,全是实战干货...
以灵石破局,万物云参编国内首部... 4月23日,由低碳智慧建筑产业技术创新战略联盟与北京清华同衡规划设计研究院有限公司主办、万物云作为协...
专访 | CLA成功反哺全球 ... 2026年,是奔驰诞生的140周年,也是奔驰进入中国内地市场的20周年。 140年间,从第一款汽车问...