《Redis设计与实现》第十五章总结二:复制的实现和心跳检测

本文总结了《Redis设计与实现》第十五章的复制实现和心跳检测内容。复制包括7个步骤,从设置主服务器信息到命令传播,详细阐述了如何建立主从连接并同步数据。心跳检测用于检测主从网络状态、辅助实现min-slaves选项以及检测命令丢失,确保数据一致性。
摘要由CSDN通过智能技术生成

《Redis设计与实现》第十五章总结一:新旧复制功能

15.6 复制的实现

SLAVEOF 是一个异步命令

以SLAVEOF 127.0.0.1 6379为例进行新复制版本的讲解

15.6.1 步骤1:设置主服务器的地址和端口

从服务器将客户端给定的主服务器的ip和端口保存到redisServer的char *masterhost和int masterport属性

保存完毕之后,从服务器向客户端返回OK,开始实际的复制工作

15.6.2 步骤2:建立socket连接

从服务器根据ip和端口,向主服务器发起连接

连接成功后,从服务器将为这个socket关联一个处理复制工作的文件事件处理器,用来负责执行后续的复制工作,如接收RDB文件、接收传播的命令等

主服务器接受连接后,为从服务器创建相应的客户端状态,即从服务器为主服务器的客户端

此时的状态:
在这里插入图片描述

15.6.3 步骤3:发送PING命令

从服务器成为主服务器的客户端之后,发送PING命令

作用:
在这里插入图片描述
从服务器收到的回复有三种情况:命令超时、返回错误、返回PONG
在这里插入图片描述

15.6.4 步骤4:身份验证

从服务器收到”PONG“后,根据是否设置了masterauth选项来决定是否进行身份验证:如果设置了,则进行

如果需要,则向主服务器发送一条AUTH命令,参数为masterauth选项的值,主服务器则使用requirepass选项来与masterauth对比,流程如下:
在这里插入图片描述

15.6.5 步骤5:发送端口信息

身份验证之后,从服务器执行命令REPLCONF listening-port < port-number > ,向主服务器发送从服务器的监听端口号

主服务器会将从服务器的端口号记录在其redisClient结构的int slave_listening_port属性中

唯一作用:主服务器执行INFO replication命令时打印出从服务器的端口号

15.6.6 步骤6:同步

从服务器发送PSYNC命令给主服务器,执行同步操作,并将自己的数据库更新至主服务器数据库当前所处的状态

注意:在此步骤之后,主服务器也会成为从服务器的客户端
在这里插入图片描述
因此到了这里,主从服务器互为对方的客户端
在这里插入图片描述

15.6.7 步骤7:命令传播

完成了同步之后,进入命令传播阶段,主服务器将自己执行的写命令发送给从服务器,从服务器接收并执行即可保持一致

15.7 心跳检测

在命令传播阶段,从服务器默认以每秒1次的频率,向主服务器发送命令REPLCONF ACK < replication_offset(从服务器当前偏移量) >

  • 作用

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

2.辅助实现min-slaves选项

3.检测命令丢失

接下来逐一介绍

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

如果主服务器超过1秒钟没有收到从服务器发来的REPLCONF ACK命令,那么主服务器就知道连接出现问题了

查看:INFO replication的l从服务器列表的lag栏目

15.7.2 辅助实现min-slaves选项

min-slaves-to-write和min-slaves-max-lag两个选项可以防止主服务器在不安全的情况下执行写命令

例子:
在这里插入图片描述

15.7.3 检测命令丢失

如果因为网络故障,主服务器传播给从服务器的写命令丢失,那么当从服务器向主服务器发送REPLCONF ACK命令时,主服务器将发觉从服务器的复制偏移量少于自己的偏移量,此时主服务器就会根据从服务器提交的复制偏移量,在复制积压缓冲区里面找到从服务器缺少的数据,并将这些数据重新发送给从服务器

原理类似部分重同步,区别在于补发缺失数据是服务器没断线的情况下执行的,而部分重同步是断线重连进行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值