Redis多机数据库的实现

1. 复制

1.1 旧版复制功能的实现

1.1.1 同步

 

1.1.2 命令传播

         在执行同步操作过后,主从服务器的数据是一致状态,但是这种状态不会是一成不变的,当主服务器有再执行了客户端发来的写命令时,主从服务器的状态可能不再一致。

1.2 旧版复制功能的缺陷

 

   1.3 新版复制功能实现

   

1.4 部分重同步实现

 1.4.1 复制偏移量

 

 

 1.4.2 复制积压缓冲区

 

  

1.4.3 服务器运行ID

 

 1.5 PSYNC命令的实现

 

 1.6 复制实现 

 

1.6.1 步骤一:设置主服务的地址和端口

1.6.2 步骤二:建立套接字连接

1.6.3 步骤三:发送PING命令

 1.6.4 步骤四:身份验证

1.6.5 步骤五:发送端口信息

1.6.6 步骤六:同步

  

1.6.7 步骤七:命令传播

 1.7 心跳检测

1.7.1 检测主从服务器的网络连接状态

1.7.2 辅助实现min-slaves配置选项

1.7.3 检测命令丢失

 

1.8 重点回顾

2. Sentinel

 

2.1 启动并初始化Sentinel

 2.1.1 初始化服务器

2.1.2 使用sentinel专用代码

 2.1.3 初始化Sentinel状态

 2.1.4 初始化Sentinel状态的masters属性

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

 

2.2 获取主服务器信息

  

2.3 获取从服务器信息

 

2.4 向主服务器和从服务器发送消息

 

 

2.5 接受来自主服务器和从服务器的频道信息

 

 2.5.1 更新sentinels字典

 

2.5.2 创建连向其他sentinel额命令连接

 2.6 检测主观下线状态

 

2.7 检查客观下线状态 

 

 2.7.1 发送SENTINEL is-master-down-by-addr命令

 2.7.2 接收SENTINEL is-master-down-by-addr命令

 2.7.3 接收SENTINEL is-master-down-by-addr命令的回复

 2.8 选举领头sentinel

         当一个主服务器被判断为客观下线时,监视这个下线的主服务器的sentinel会进行协商,会选举出一个领头sentinel,由这个领头sentinel对下线的主服务器进行故障转移操作。

3. 集群

3.1 节点

 

3.1.1 启动节点

 

 3.1.2 集群数据结构

 

3.1.3 cluster meet 命令实现

 

 3.2 槽指派

 

3.2.1 记录节点的槽指派信息

 

 

3.2.2 传播节点的槽指派信息

 

 

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

 

3.2.4  cluster addslots 命令实现

3.3 在集群中执行命令

 

3.3.1 计算键属于那个槽

 

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

3.3.3 moved错误

 

 

 

3.3.4 节点数据库的实现

 

 

3.4 重新分片

 

 

3.5 ask错误 

 

 

3.5.1 cluster setslot importing命令实现

 

3.5.2  cluster setslot migrating命令实现 

 

3.5.3 ASK错误 

 

3.5.4 asking命令

  

3.5.5 ASK错误与MOVED错误的区别

3.6 复制与故障转移

3.6.1 设置从节点 

 

 

3.6.2 故障检测

 

 

 

 3.6.3 故障转移

3.6.4 选举新的主节点

 

重点回顾 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值