当前位置: 首页 > news >正文

Redis心跳检测

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

REPLCON FACK <rep1 ication_ offset>

其中replication_offset是从服务器当前的复制偏移量。

发送REPLCONF ACK命令对于主从服务器有三个作用:

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

辅助实现min-slaves选项。

检测命令丢失。

下面将分别介绍这三个作用。

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

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

通过向主服务器发送INFO replication命令,在列出的从服务器列表的lag一栏中,我们可以查看相应从服务器最后一次向主服务器发送REPLCONF ACK命令距离现在过了多少秒。

在一般情况下,lag的值应该在0秒或者1秒之间跳动,如果超过1秒的话,那么说明主从服务器之间的连接出现了故障。

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

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

举个例子,如果我们向主服务器提供以下设置:

min-slaves-to-write 3
min-slaves-max-lag 10

那么在从服务器的数量少于3个,或者三个从服务器的延迟(lag)值都大于或等于10秒时,主服务器将拒绝执行写命令,这里的延迟值就是上面提到的INFO replication命令的lag值。

检测命令丢失:

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

举个例子,假设有两个处于一致状态的主从服务器,它们的复制偏移量都是200,如下图所示。

在这之后,当从服务器向主服务器发送REPLCONFACK命令的时候,主服务器会察觉从服务器的复制偏移量依然为200,而自己的复制偏移量为233,这说明复制积压缓冲区里面复制偏移量为201至233的数据(也即是命令SET key value)在传播过程中丢失了,于是主服务器会再次向从服务器传播命令SET key value,从服务器通过接收并执行这个命令可以将自己更新至主服务器当前所处的状态,如下图所示。

注意,主服务器向从服务器补发缺失数据这一操作的原理和部分重同步操作的原理非常相似,这两个操作的区别在于,补发缺失数据操作在主从服务器没有断线的情况下执行,而部分重同步操作则在主从服务器断线并重连之后执行。

总结:

主服务器通过向从服务器传播命令来更新从服务器的状态,保持主从服务器一致,而从服务器则通过向主服务器发送命令来进行心跳检测,以及命令丟失检测。

http://www.lryc.cn/news/125821.html

相关文章:

  • 【数据库】Sql Server可视化工具SSMS条件和SQL窗格以及版本信息
  • Python SFTP 详细使用
  • MyBatis的XML映射文件
  • UML-类图和对象图
  • 升级指定版本Node.js或npm
  • UE4/5 GAS技能系统入门3 - GameplayEffect
  • Linux交叉编译opencv并移植ARM端
  • TypeScript教程(一)简介与安装
  • 做视频_Style
  • vue3使用pinia和pinia-plugin-persist做持久化存储
  • 数据结构入门指南:二叉树
  • 大数据课程J2——Scala的基础语法和函数
  • 03-基础入门-搭建安全拓展
  • 穿越未来:探索虚拟现实科技的未来前景
  • SQL- 每日一题【1327. 列出指定时间段内所有的下单产品】
  • [xgb] plot tree
  • 【云原生】Kubernetes 概述
  • 9.2.2Socket(TCP)
  • “解锁IDEA的潜力:高级Java Maven项目配置指南”
  • [足式机器人]Part5 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】
  • 机器学习:隐马尔可夫模型(HMM)
  • 使用插件实现pdf,word预览功能
  • yolov5模型构建源码详细解读(yaml、parse_model等内容)
  • Monodepth2和Lite-Mono准备数据集
  • ML-fairness-gym入门教学
  • 结构体指针变量的使用
  • 解决oracle的em访问提示“使用不受支持的协议。”的bug
  • 编译工具:CMake(三)| 最简单的实例升级
  • 20天学会rust(四)常见系统库的使用
  • drawio----输出pdf为图片大小无空白(图片插入论文)