redis 主从同步和故障切换的几个坑

news2024/11/24 16:58:01

数据不一致

当我们从节点读取一个数据时,和主节点读取的数据不一致,这是因为主从同步的命令是异步进行的,一般情况下是主从同步延迟导致的,为什么会延迟,
主要二个原因
1、网络状态不好
2、网络没问题,从节点执行耗时命令,之前的命令在排队,没有执行到

对于 1,我们要检查网络状态,在硬件网络尽量把主从机器部署在一起,对于 2 ,可以开发一个监控主从复制进度的程序,及时的把主从复制进度大于一定差值的客户端移除,当复制进度赶上时,再增加进去
在这里插入图片描述

数据不一致是不可避免的,我们尽量缩小不一致的时间,或者重要数据直接读主库

客户端读取到过期数据

我们使用主从集群时,有时后设置的过期时间是 12.00.00,但是 12:00:01 时,在从节点还是可以读取到数据, 这个和 redis 过期策略有关系

redis,过期策略有 2 种,主动删除和定期删除,

  • 主动删除是惰性的,当客户端读取主节点时,判断数据过期,不会返回,主节点不会读取到过期时间,但是从节点 不会自动删除,会返回过期数据,这个和版本有关系,3.2 之前会,之后不会再返回过期数据
  • 定期删除是被动的,定时100ms的,但是不会删除所有过期数据,会随机选择一定的数据,不断的进行删除,保证 redis 的性能,所以会有一部分数据是过期但是还存在

如果使用 3.2 之后,会返回吗,看使用的命令

  • expire和 pexpire ,设置的是从命令开始计算的存活时间 ,当主从延迟是,一个命令是 60s,主节点 12.00 执行,从节点延迟了,12.01 执行,过期时间就会不一致,怎么解决的,使用下个命令
  • expireat 和 pexpireat ,直接把数据的过期时间设置为一个具体的时间点,这个就可以保证不会读取到过期数据了
    EXPIRE testkey 60 替换为 EXPIREAT testkey 1603501200
    这个问题是可以解决的

不合理的命令导致服务挂掉

protected-mode 配置项

作用是哨兵实例是否可以被其他实例访问,配置为 yes 时,只能本地访问 ,当其他哨兵服务器在其他节点时,无法通信,主库故障时无法判断,也无法切换,建议配置为 no ,bind 其他实例地址

protected-mode no
bind 192.168.10.3 192.168.10.4 192.168.10.5

cluster-node-timeout 配置项

这个配置项设置了 Redis Cluster 中实例响应心跳消息的超时时间

当我们在 Redis Cluster 集群中为每个实例配置了“一主一从”模式时,如果主实例发生故障从实例会切换为主实例,受网络延迟和切换操作执行的影响,切换时间可能较长,就会导致实例的心跳超时(超出 cluster-node-timeout)。实例超时后,就会被 Redis Cluster 判断为异常。而 Redis Cluster 正常运行的条件就是,有半数以上的实例都能正常运行。
所以,如果执行主从切换的实例超过半数,而主从切换时间又过长的话,就可能有半数以上的实例心跳超时,从而可能导致整个集群挂掉。所以,我建议你将 cluster-node-timeout 调大些(例如 10 到 20 秒)

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1372848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 项目使用 activi 设计流程,流程线上设置条件表达式时出现以下错误

项目场景: 背景: java 项目使用 activi 设计流程,流程线上设置条件表达式后,保存时出现错误 问题描述 问题: java 项目使用 activi 设计流程,流程线上设置条件表达式后,保存时出现以下错误&…

Matlab 之数据分布拟合

文章目录 Part.I IntroductionPart.II Distribution Fitter APP 的使用Chap.I APP 简介Chap.II 简单使用 Part.III 通过代码实现分布拟合Chap.I 基于 fitdist 函数Chap.II 获取数据的频率分布后进行曲线拟合 Reference Part.I Introduction 本文主要介绍了如何使用 Matlab 对数…

Linux学习记录——삼십팔 网络层IP协议

文章目录 1、了解IP协议2、IP协议报文1、8位服务类型2、16位总长度(字节数)3、8位生存时间(TTL) 3、网段划分1、网段划分和CIDR方案2、子网划分简单方法3、IP地址问题的解决方案 4、公网内网1、内网分配2、运营商管理方法 5、路由…

2024年3月10日PMI认证考试的报名时间确定!

⏰中国大陆地区2024年第1期PMI认证考试于3月10日举办 ⏰报名时间: 为减少同一时间集中报名造成的网络拥堵,本次报名将采取以下形式分地区、分批次开放报名。👇 1️⃣第1批报名城市:⏰2024年1月11日10:00至1月18日16:00&#xff0c…

【昕宝爸爸定制】如何将集合变成线程安全的?

如何将集合变成线程安全的? ✅典型解析🟢拓展知识仓☑️Java中都有哪些线程安全的集合?🟠线程安全集合类的优缺点是什么🟡如何选择合适的线程安全集合类☑️如何解决线程安全集合类并发冲突问题✔️乐观锁实现方式 (具体步骤)。✅…

基于 Validator 类实现 ParamValidator,用于校验函数参数

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器,从编码到发布全过程》 2、相关回顾 使用 TypeV…

dubbo的springboot集成

1.什么是dubbo? Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo …

vmlinux, System.map; cmake的find_package(Clang)产生的变量们; geogebra单位切向量(简单例子)

linux4.15.y内核中的函数个数 依赖关系: vmlinux, vmlinux.bin, bzImage cd /bal/linux-stable/ file vmlinux #vmlinux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, BuildID[sha1]b99bbd9dda1ec2751da246d4a7ae4e6fcf7d789b, not str…

Git远端删除的分支,本地依然能看到 git remote prune origin

在远端已经删除ylwang_dev_786等三四个分支,本地git branch -a 时 依然显示存在。 执行 git remote show origin 会展示被删除的那些分支 当你在Git远程仓库(如GitLab)上删除一个分支后,这个变更不会自动同步到每个开发者的本地…

【教学类-45-01】X-Y之间的“三连加“题(a+b+c=)

作品展示: 背景需求: 我常去的大4班孩子们基本都适应了0-5之间的加法题,做题速度极快。 为了增加“花样”,吸引幼儿参与,修改参数,从二连加12变为三连加111。 素材准备: 代码重点 代码展示 X-Y 之间的3…

springboot基于java的小区物业管理系统(保安巡逻绿化消防)设计+jsp

小区物业管理系统采用的是JAVA语言开发,利用MySQL为数据库, 使用IDEA平台来编写代码,框架方面选择的是springbootweb框架,采用B/S结构实现系统。本系统的设计与开发过程中严格遵守软件工程的规范,运用软件设计模式&…

uniapp最简单的底部兼容安全区域显示

效果图&#xff1a; 1.html写上动态padding-bottom <view class"button-wrap" :style"padding-bottom:bottomPaddingrpx"><view class"com-btn cencel-btn">取消</view><view class"com-btn confirm-btn " cl…

Xcalibur软件Qual Brower程序的使用

找到Qual Brower&#xff1a;在System>Program里 打开采集的数据文件*.RAW&#xff0c;软件界面主窗口能查看色谱图和质谱图&#xff1a; 1、图形的放大和拷贝、色谱中查看峰的质谱信息&#xff1a; 点亮如图图像右上角的按钮&#xff0c;可以激活该图形并进行操作&#x…

前端 Node 项目迁徙为桌面 Electron 应用笔记

起因 我的服务器到期了&#xff0c;服务器上有几个服务&#xff0c;人家问这几个网站怎么不好使了&#xff0c;奈何服务器续费太贵租不起了… 但是服务还是要提供的&#xff0c;所以我在想如何把 node 的项目变成桌面端应用&#xff0c;于是有了这个笔记 效果展示 页面没啥…

强化学习10——免模型控制Q-learning算法

Q-learning算法 主要思路 由于 V π ( s ) ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) V_\pi(s)\sum_{a\in A}\pi(a\mid s)Q_\pi(s,a) Vπ​(s)∑a∈A​π(a∣s)Qπ​(s,a) &#xff0c;当我们直接预测动作价值函数&#xff0c;在决策中选择Q值最大即动作价值最大的动作&…

如何寻找到相对完整的真正的游戏的源码 用来学习?

在游戏开发的学习之路上&#xff0c;理论与实践是并重的两个方面。对于许多热衷于游戏开发的学习者来说&#xff0c;能够接触到真实的、完整的游戏源码无疑是一个极好的学习机会。但问题来了&#xff1a;我们该如何寻找到这些珍贵的资源呢&#xff1f; 开源游戏项目 GitHub:地…

BUUCTF ---> Encrypto

转眼就一月十号了&#xff0c;本来今天不想更的&#xff0c;&#xff08;因为我懒&#xff09;是因为明天要考python&#xff0c;好像还不止 但是呢&#xff0c;发现BUUCTF的密码学模块刚好可以用到py的脚本&#xff0c;那就当时复习一下吧&#xff01;&#xff01; 这里就要介…

http跟https有什么区别?

HTTPS和HTTP的概念&#xff1a; HTTP&#xff1a;是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应答的标准&#xff08;TCP&#xff09;&#xff0c;用于从WWW服务器传输超文本到本地浏览器的传输协议&#xff0c;它可以使浏览器更加高效&am…

2024--Django平台开发-Django知识点(六)

day06 Django知识点 今日概要&#xff1a; Form和ModelForm组件【使用】【源码】缓存【使用】ORM【使用】其他&#xff1a;ContentTypes、Admin、权限、分页、信号等 1.Form和ModelForm组件 背景&#xff1a;某个公司后台管理项目。 垃圾 def register(request):"&quo…

Qt/QML编程学习之心得:hicar手机投屏到车机中控的实现(32)

hicar,是华为推出的一款手机APP,有百度地图、华为音乐,更多应用中还有很多对应手机上装在的其他APP,都可以在这个里面打开使用,对开车的司机非常友好。但它不仅仅是用在手机上,它还可以投屏到车机中控上,这是比较神奇的一点。 HiCar本质上是一套智能投屏系统,理论上所有…