《Redis设计与实现》第十七章 集群

Redis集群是Redis提供的分布式数据库方案,集群通过sharding分片来进行数据共享,并提供复制和故障转移功能。
对集群的节点、slot、命令执行、重新分片、转向、故障转移、消息等各方面介绍。

17.1 节点

一个Redis集群通常由多个节点node组成,在刚开始的时候,每个节点都是相互独立的,他们都出于一个只包含自己的集群当。
-w644

17.1.1 启动节点

一节节点就是一个reis服务器。
-w453
-w699

17.1.2 集群数据结构

clusterNode结构保存了一个节点的当前状态、创建时间名字、配置epoch、节点ip端口号和地址等。-w513
-w473
-w587

17.1.3 CLUSTER MEET命令的实现

-w439
相当于区域连通,会通知其他同区域的node。

17.2 槽指派

Redis集群通过分片方式来保存数据的键值对:集群的整个数据库被分为16384个槽slot。
CLUSTER ADDSLOTS槽分配。

17.2.1 记录节点的槽指派信息

-w703
二进制 2048字节 16384个二进制位,如果为1表示该节点处理该槽位。

17.2.2 传播节点的槽指派信息

-w292
告诉自己的职责numslotslots属性
-w769
-w690
-w493

17.2.4 CLUSTER ADDSLOTS 命令的实现

-w602

17.3 在集群中执行命令

-w538

17.3.1 计算键属于哪个槽

CRC 校验
-w412

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

如果是就执行否就转发-w570
-w390
-w404

实际上就是一致性哈希。

17.3.4 节点数据库的实现

保存的方式以及过期的方式跟单机Redis的方式相同。
节点只能使用0号数据库。

-w722
-w720

17.4 重新分片

-w699

重新分片实现原理
redis-trib负责执行,redis-trib对单个slot分片步骤如下。
-w658
-w320

17.5 ASK错误

-w429
重新分片过程中的查找。

17.5.1 CLUSTER SETSLOT IMPORTING 命令的实现

-w722

17.5.2 CLUSTER SETSLOT MIGRATING 命令的实现

记录了当前节点正在迁移至其他节点的槽。

17.5.3 ASK错误

-w412

17.5.4 ASKING命令

-w481

17.5.5 ASK错误和MOVED错误的区别。

两者都会导致客户端转向,他们区别在于:
1、moved负责全从一个节点到另外一个节点。
2、ask不会记录信息
-w687

17.6 复制和故障转移

-w379

17.6.1 设置从节点

CLUSTER REPLCATE NODE_ID
-w297
-w494
-w509

17.6.2 故障检测

-w742
-w391

17.6.3 故障转移

-w726

17.6.4 选举先的主节点

-w685

17.7 消息

-w209
meet消息、ping消息、pong消息、fail消息、publish消息。

17.8 重点回顾

  • 槽就是一致性哈希
  • 计算槽值
  • moved错误和ask错误
  • 重定向
  • 故障转移和故障检测
  • 主节点选举
  • 消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值