深入浅析Redis—多机数据库的实现

本文深入探讨Redis的高可用性实现,包括复制的完整同步、部分同步与命令传播机制,Sentinel哨兵系统的监控、故障转移流程,以及集群的分片、节点管理与故障检测。通过对Redis复制、Sentinel和集群的详细讲解,揭示了其在多机数据库中的应用和价值。
摘要由CSDN通过智能技术生成

目录

第 15 章:复制

第 16 章:Sentinel

第 17 章:集群


第 15 章:复制

使用SLAVEOF命令让一个服务器去复制另一个服务器,被复制的是主服务器,进行复制的是从服务器;

复制的方法:

  • 同步:

    • 完整重同步(SYNC):适用于第一次进行数据库复制或者更改复制的主数据库,将数据库整体复制,较为花时间;

    • 部分重同步(PSYNC):适用于从服务器断线之后重连的情况,只复制断开期间执行的命令;

  • 命令传播:适用于主从服务器的数据库状态一致后,对主服务器执行的命令发送到从服务器;

部分重同步的实现:

  • 复制偏移量:

    • 主从服务器都维护一个复制偏移量,记录当前执行命令的字节数,在主服务器执行命令、从服务器复制的时候更改

    • 可以记录从服务器相较于主服务器缺少的命令有多少

  • 复制积压缓冲区:

    • 默认为1M的固定长度先进先出队列;

    • 在服务传播的时候,会记录传播的命令。这样如果主从服务器复制偏移量之差小于1M的情况下,只需要将缺少的命令从缓冲区复制到从服务器即可,不用完整重同步;

  • 服务器运行ID:

    • 每个服务器开启时都有一个随机的ID,从服务器会记录主服务器的ID。断线重连的时候会带上之前的主服务器ID,如果主服务器ID与接收到的ID一致,就可以确定发送方是从服务器,然后根据复制偏移量之差决定是否采用部分重同步。

复制的实现:

  • 设置主服务器的地址和端口、建立套接字连接、发送PING命令、身份验证(masterauth密码验证)、发送端口信息、同步、命令传播

心跳检测:

  • 在命令传播阶段,从服务器会以每秒一次的频率向主服务器发送命令;

  • 检测主从服务器的网络连接状态:主从服务器可以通过发送和接收REPLCONF ACK命令来检查两者之间的网络连接是否正常:如果主服务器超过一秒钟没有收到从服务器发来的REPLCONF ACK命令,那么主服务器就知道主从服务器之间的连接出现问题了;

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

  • 检测命令丢失

第 16 章:Sentinel

Sentinel(哨岗、哨兵)是Redis的高可用性( high availability)解决方案:

  • 由一个或多个Sentinel 实例(instance)组成的Sentinel系统( system)可以监视任意多个主服务器以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。

哨兵模式启动流程:

  1. 初始化服务器:sentinel 本质上还是一个特殊的redis服务器,所以需要先初始化服务器,但与普通的redis服务器有所区别,如sentinel 不需要使用RDB、AOF文件来还原数据库状态;

  2. 使用sentinel 专用代码:用sentinel 专用代码替换普通redis服务器的代码(所以redis的命令对哨兵可能是无效的),如sentinel 默认端口是26379;

  3. 初始化sentinel 状态:在应用了Sentinel的专用代码之后,接下来,服务器会初始化一个sentinel.c/sentinelState结构(后面简称“Sentinel状态”),这个结构保存了服务器中所有和Sentinel功能有关的状态(服务器的一般状态仍然由redis.h/redisServer结构保存);

  4. 初始化sentinel状态的master属性:

    • Sentinel状态中的masters字典记录了所有被Sentinel监视的主服务器的相关信息,其中字典的键是被监视主服务器的名字。而字典的值则是被监视主服务器对应

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值