《Redis设计与实现》读书笔记-第三部分:多机数据库的实现-3:集群

目录

1.节点

1.1启动节点

1.2集群数据结构

​编辑 1.3CLUSTER MEET命令的实现

​编辑 2.槽指派

 2.1记录节点的槽指派信息

 2.2传播节点的槽指派信息

​编辑 2.3记录集群所有的槽的指派信息

 2.4CLUSTER ADDSLOTS命令的实现

3.在集群中执行命令

3.1计算键属于哪个槽

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

3.3MOVED错误 

 3.4节点数据库的实现

5ASK错误

 6.复制和故障转移

 7.消息


1.节点

一个redis集群通常由多个节点组成,在刚开始的时候,每个节点都是相互独立的,它们都处于一个只包含自己的集群中,要建立一个真正可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群。连接各个节点可以通过CLUSTER MEET命令完成

1.1启动节点

一个节点就是一个运行在集群模式下的redis服务器,Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式:

 节点 ,即运行在集群模式下的Redis服务器,会继续使用所有在单机模式中使用的服务器组件:

1.2集群数据结构

 clusterNode——节点的创建时间、名字、配置纪元、IP地址以及端口。每一个节点都会使用一个clusterNode来记录自己的状态,并为集群中的所有其他节点(包括主节点和从节点)都创建一个相应的clusterNode结构,以此来记录其他节点的状态

 

 

 1.3CLUSTER MEET命令的实现

通过向节点A发送CLUSTER MEET命令,可以让接受命令的A节点将另一个节点B添加到节点A当前所在的集群里面。

 2.槽指派

 2.1记录节点的槽指派信息

 

 2.2传播节点的槽指派信息

 

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

 

 

 

State.slots是从槽的角度,记录了每一个槽被指派给了哪个节点,这样想知道具体某一个槽是被指派给哪个节点的时候只需要O(1)的时间复杂度就能知道;Node.slots是从某一个节点的角度,去看自己指派监管了哪几个槽。

 2.4CLUSTER ADDSLOTS命令的实现

CLUSTER ADDSLOTS命令接受一个或多个槽作为参数,并将所有输入的槽指派给接收该命令的节点负责:

3.在集群中执行命令

在对数据库中16384个槽都进行了指派之后,集群就会进入上线状态,这是客户端就可以向集群中的节点发送数据命令了。

3.1计算键属于哪个槽

节点使用以下计算方法来计算给定键key属于哪个槽:

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

3.3MOVED错误 

当节点发现键所在的槽并非由自己负责处理的时候,节点就会向客户端返回一个MOVED错误,指引客户端转向至正在负责槽的节点。

 

 

 

 3.4节点数据库的实现

 

 

5ASK错误

 6.复制和故障转移

Redis集群中的节点分为主节点和从节点,其中主节点用去处理槽,而从节点用于复制某个主节点,并在被复制的主节点下线时,替代下线的主节点继续处理命令请求。

 7.消息

集群中的各个节点通过发送和接收消息来进行通信。我们称发送消息的节点为发送者,接收消息的节点为接收者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值