【学习笔记】Redis学习笔记——第17章 集群

第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通过发送与接收消息来进行通信,消息有其自己的格式

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值