简读笔记-Redis设计与实现第三章

2019-04-24  本文已影响0人  你的头发真的好长

第三部分 多机数据库的实现

复制

1.旧版复制功能的实现

2.旧版复制功能的缺陷

3.新版复制功能的实现

4.部分重同步的实现

5.PSYNC命令的实现

6.复制的实现

SLAVEOF <master_ip> <master_port>

  1. 设置主服务器的地址和端口号
  2. 建立套接字连接(让从服务器成为主服务器客户端)
  3. 发送PING命令 (检测主服务器连接状况)
  4. 身份验证
  5. 发送端口信息(让主服务器保存从服务器的相关信息)
  6. 同步(发送PSYNC命令,执行同步操作。 并且由单工通信编程双工通信,即主从服务器互相成为对方的客户端)
  7. 命令传播
  8. 心跳检测(从服务器会每秒1次的频率,向主服务器发送命令 REPLCONF ACK <从服务器偏移量>
    • 检测主从服务器网络连接状态
    • 复制实现min-slaves功能 (当主服务器的从服务器数量小于min-slaves时,则认为集群挂了)
    • 检测命令丢失(主服务器进行部分重同步时由于网络问题而丢失,则通过心跳检测到后进行补发)

总结

Sentinel哨兵机制

Sentinel是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器下的从服务器,并在被监视的主服务器进行下线状态时,自动将被下线主服务器下的某个重服务器升级为主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求(失效转移

Sentinel的构成

image

如何获取主服务器信息

如何获取从服务器信息

向主从服务器发送消息

在默认情况下,Sentinel会以每两秒一次的频率,通过命令连接向所有被监视的主服务器和从服务器发送订阅消息

PUBLISH sentinel_:hello <sentinel的信息,主服务器的信息>

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

image

检测主观下线状态

检测客观下线状态

如何选举领头Setinel

##请求格式
Sentinel is-master-down-by-addr  <master的ip地址> <端口号>  <配置纪元>(标志是否同一轮选举) <SentinelId>

##响应格式
<上下线状态> <局部领头id> <当前纪元>

故障转移

  1. 在已下线主服务器属下的所有从服务器里面,挑选出一个从服务器,并将其转换为主服务器(升级
  2. 让已下线主服务器属下的所有从服务器改为复制新的主服务器
  3. 将已下线主服务器设置为新的主服务器的从服务器,当这个旧的服务器重新上线时,它就会成为新的主服务器的从服务器(降级

集群

Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。

主要内容有集群中的节点,槽指派,命令执行,重新分片,转向,故障转移,消息等方面

image
上一篇下一篇

猜你喜欢

热点阅读