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缓存的特殊用法以及与本地缓存一起构建多级缓存的实现
探讨下如何更好的使用缓存 —— Redis缓存的特殊用法以及与本地缓存一起构建多级缓存的实现
Redis | 第4章 Redis中的数据库《Redis设计与实现》