Redis设计与实现--多级数据库的实现

Posted cheungchein

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis设计与实现--多级数据库的实现相关的知识,希望对你有一定的参考价值。

8 复制功能

8.1 旧版复制功能

同步,命令传播

8.2 新版复制功能

PSYNC: 完整重同步,部分重同步

8.3 部分重同步的实现

复制偏移量

复制积压缓冲区(一个FIFO队列,默认大小1M)

8.4 复制的实现

SLAVEOF命令

8.5 心跳检测

REPLCONF ACK <replication_offset>

9 Sentinel

9.1 Sentinel启动过程

1) 初始化服务器

2) 使用Sentinel专用代码

3) 初始化Sentinel状态

4) 初始化Sentinel状态的masters属性

5) 创建连向主服务器的网络连接

技术分享图片

技术分享图片

 

技术分享图片

技术分享图片

检测主观下线状态

 

检测客观下线状态

10 集群

10.1 集群数据结构

clusterNode记录自己的状态,并为集群中的其他节点(包括主节点和从节点)都创建了一个相应的clusterNode结构,以此来记录其他节点的状态.

技术分享图片

 clusterNode的link属性是一个clusterLink结构,该结构保存了连接节点所需的信息,比如套接字描述符,输入缓冲区,输出缓冲区.

技术分享图片

最后,每一个节点都保存这一个clusterState结构,这个结构记录了在当前节点的视角下集群目前的状态:

技术分享图片

命令: CLUSTER MEET

技术分享图片

10.2 槽指派

clusterNode中的slots属性和numsolts属性记录了节点负责处理哪些槽,

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

技术分享图片

计算键属于哪一个槽命令:CLUSTER KEYSLOT <key>

节点和单机数据库在数据库方面有一个区别:节点只能使用0号数据库,而单机数据库则没有这一限制.

clusterState中的slots_to_keys跳跃表来保存槽与键之间的关系:

技术分享图片

10.3 重新分片

重新分片由Redis集群管理软件redis-trib负责执行.

ASK错误:如果key所属的槽i正在进行迁移,节点会向客户端发出一个ASK错误.

MOVED错误:代表槽的负责权已经从一个节点转移到了另一个节点.

ASKING命令:

10.4 复制与故障转移

10.4.1 设置从节点

设置从节点:CLUSTER REPLICATE <node_id>

从节点相关设置:

技术分享图片

主节点相关设置:

技术分享图片

技术分享图片

10.4.2 故障检测

集群中的每个节点都会定期向其他节点发送PING消息,如果未在规定时间接收到PONG消息,那么就将该节点标记为疑似下线(PFAIL);

半数以上复杂处理槽的主节点都将某节点标识为疑似下线,则该节点将被标记为FAIL节点.

10.4.3 故障转移

10.4.4 选举新的节点

10.4.5 消息

MEET, PING, PONG, FAIL消息, PUBLISH消息.

 

以上是关于Redis设计与实现--多级数据库的实现的主要内容,如果未能解决你的问题,请参考以下文章

Redis进阶学习08--多级缓存

探讨下如何更好的使用缓存 —— Redis缓存的特殊用法以及与本地缓存一起构建多级缓存的实现

探讨下如何更好的使用缓存 —— Redis缓存的特殊用法以及与本地缓存一起构建多级缓存的实现

Redis | 第4章 Redis中的数据库《Redis设计与实现》

Redis | 第6章 事件与客户端《Redis设计与实现》

[Redis] redis的设计与实现-对象系统