码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-04-21 19:25:10      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:数据结构   idt   master   网络   inf   服务器   img   ica   自己的   

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设计与实现--多级数据库的实现

标签:数据结构   idt   master   网络   inf   服务器   img   ica   自己的   

原文地址:https://www.cnblogs.com/cheungchein/p/8902562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!