redis之主从切换可能有哪些问题

news2024/11/27 20:21:23

写在前面

本文一起看下Redis cluster 集群模式下,发生了主从切换时可能存在的问题以及应对方案。

1:主从数据不一致

主从数据不一致,是由于主从同步延迟造成的,可能的解决方案如下:

1:尽量将主从同机房部署,减少网络延迟的影响,当因为数据高可用等原因无法同机房部署时,尽量给从节点更好的宽带资源
2:不要在从节点执行诸如SDIFFSTORE等集合操作,从而造成从节点计算压力大,造成主从同步慢
3:在从节点读取数据前,判断复制偏移量是否已经同步要读取的数据更新

看下3,读取数据前,在Redis master执行info replication,获取此时master的复制进度值master_repl_offset,然后在要读取数据的slave执行info replication,获取其复制进度slave_repl_offse,当master_repl_offset >= slave_repl_offse时,则说明要读取数据的修改肯定已经同步完成了,但是这种方案有个缺点就是需要多两次数据读取,势必会影响性能,但是凡事有舍有得,实际场景中还是要根据具体的情况来做出最优的选择。

2:读取到过期数据

读取到过期的原因有如下几种:

1:惰性删除和定期删除
2:过期命令在从节点的执行延迟

Redis对于过期数据的处理并非是到期就删除,而是数据读取时才删除,这种方式就会造成大量的过期数据留在内存中,占用内存资源,为了解决这个问题,Redis引入了定期删除策略,但是这种策略也只是随机的选择一批数据,然后删除其中的过期数据,并非删除所有数据。如果是没有被定时删除删除的过期数据,从节点会读到吗?这其实和Redis的版本有关系,在3.2之前的版本,Redis会正常返回数据,因此会读取到数据,对于>=redis3.2的版本,Redis会返回空,此时读不到过期数据。因此生产环境建议使用>=3.2版本的Redis。假定我们现在使用了>=3.2,就读不到过期数据了吗?还是会的,为什么呢?这和我们设置过期时间 的方式有关系,设置过期时间的相关命令如下:

在这里插入图片描述

当我们使用了expire,pexpire等相对时间的命令时,可能因为命令同步延迟,导致从库实际的过期时间等于命令延迟时间+实际过期时间,比如执行命令expire myK 60就是设置60秒后过期,比如2022-12-14 11:14:36过期,但是主从延迟20秒,则从库执行后实际的过期时间就是2022-12-14 11:14:46,当在2022-12-14 11:14:40读取数据时实际数据应该是过期的,但是从库的过期时间还没到,就读取到过期数据了。此时我们就需要使用设置绝对过期时间的命令expireatpexpireat,此时这种方式就需要保证每个服务器上的时间是一致的,可以考虑使用NTPnetwork time protocol服务器,总结解决方案如下:

1:使用>=3.2版本的Redis,避免数据过期还返回
2:使用expireAt,pexireAt命令,设置UNIX时间戳的绝对时间,避免主从延迟导致最终的过期时间不一致
3:使用NTP服务器,保证服务器具有相同的时间,避免设置绝对过期时间时数据有效期不一致

3:不合理配置在主从切换时导致集群挂掉

3.1:protected-mode

该配置项用来设置哨兵节点是否允许非一个局域网内的其他服务器访问,如果是设置为yes,允许访问,但是安全性较低,如果是设置为no,则不允许访问,当出现主节点故障时,因为此设置no可能导致部署在不同局域网中哨兵无法通信,导致无法对故障的主节点进行主从切换,进而导致服务不可用,解决方案是将protected-mode设置为yes保证安全性,并设置允许访问的IP白名单,如下:

在这里插入图片描述

3.2:cluster-node-timeout

该参数用于设置集群节点间进行PING/PONG 存活检测时的超时时间,如果超时则被检测节点会被标记为pfailpossible fail,然后经过询问其他节点对该节点状态的判断结果,最终会被标记为fail,即不可用,当超过半数的节点都fail时,集群将不可用。主从切换时如果是切换的时长超过了这个时间就可能发生这种情况,解决的方法是给cluster-node-timeout设置一个比较大的时间,如20秒,主从切换保留足够的时长保证其完成切换。

写在后面

参考文章列表:

Redis集群–Cluster–故障转移的过程(原理) 。

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

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

相关文章

React面试:谈谈虚拟DOM,Diff算法与Key机制

1.虚拟dom 原生的JS DOM操作非常消耗性能,而React把真实原生JS DOM转换成了JavaScript对象。这就是虚拟Dom(Virtual Dom) 每次数据更新后,重新计算虚拟Dom,并和上一次生成的虚拟dom进行对比,对发生变化的…

Ansys Zemax | 用于数字投影光学中均匀照明的蝇眼阵列

简介 在数字投影仪设计中,我们希望确保数字光源与投影图像在辐照度分布相匹配。因此,这一约束要求投影仪设计包含均匀照明的空间光调制器——通常以LCD面板的形式呈现。理论上听起来很容易,但实际上,此面板上的光源光束通常是高斯…

语音输入转文字怎么操作?分享几种语音转文字技巧

相信有不少小伙伴在整理语音文件的时候,都会有过怎样把这些语音直接转换成文字的想法吧。每次在我开完会之后,需要对会议语音进行整理时,都会产生这种想法。因为我们需要不断的去听这个会议的语音内容,这样做既费时又费力。但其实…

MATLAB生成2D和3D格网(GUI程序)

目录 一、写函数DataStructure_Fnc 二、控件属性 三、生成2D格网代码 三、生成3D格网代码 一、写函数DataStructure_Fnc 函数代码,生成三角网需要调用此函数 function DataStructureDataStructure_Fnc(Table) [row col]size(Table); Table(1:end,5:7)-1; for j1…

【配置指导】如何配置dataFEED edgeConnector Siemens以实现西门子PLC与阿里云之间的双向通信

本配置指导手册介绍了如何配置dataFEED edgeConnector Siemens,以通过MQTT来将西门子S7-1200 PLC数据上传到阿里云;以及从阿里云发布数据,并传输到PLC中,从而实现西门子S7-1200 PLC与阿里云之间的双向通信。 主要内容包括&#xf…

30-Vue之ECharts-直角坐标系的常用配置

直角坐标系的常用配置前言直角坐标系常用配置网格坐标轴区域缩放前言 本篇来学习下直角坐标系的常用配置 直角坐标系 直角坐标系的图表指的是带有x轴和y轴的图表, 常见的直角坐标系的图表有: 柱状图 折线图 散点图 常用配置 网格 grid:是用来控制直角坐标系的…

可落地的、不基于框架的分布式事务解决方案

两阶段提交 2PC 在MySQL InnoDB中,为了保证Bin Log和Redo Log的一致性,便采用了两阶段提交;ZooKeeper、ETCD集群为了保证数据一致性,也采用了两阶段提交,RocketMQ的事务消息也采用了两阶段提交,可见两阶段…

从VirtualBox换成KVM虚拟机管理程序?

好消息是,您可以轻松地将VDI格式的VirtualBox VM迁移到qcow2(即KVM的磁盘映像格式),不用创建新的KVM来宾计算机。 我们在本文中将概述如何将VirtualBox VM迁移到Linux中KVM VM的逐步过程。 第一步:列出现有的VirtualBox映像 首先&#xff0c…

泰斯公式Thiem’s equation地下水

基本形式 泰斯公式1描述了在含水层抽水时的地下水流动。 多井作业时非承压含水层的方程形式如下 H(s)和H0(s)分别表示s点的估计地下水位和初始地下水位,K表示水力导率,ri表示预测位置与贡献井i之间的距离,n是贡献井的集合,Q表…

Win11 21H2 12月最新更新了哪些内容?

微软今天发布了12月最新的累积更新补丁,用户可以升级KB5021234将版本号提升至 build 22000.1335,并解决了远程网络问题以及可能影响数据保护应用程序编程接口 (DPAPI) 解密的问题。此外,该更新还包括之前在 11 月 15 日…

11-FreeRTOS配置函数 FreeRTOSConfig.h

1-FreeRTOSConfig.h介绍 FreeRTOS中的相关定义多数都在FreeRTOSConfig.h中,整个FreeRTOS的定义调用都可以在这里定义,当然你也可以自己命名一个文件实现自定义。 下面是这个文件的内容,如下: #ifndef FREERTOS_CONFIG_H #define…

Graph Neural Networks for Social Recommendation学习笔记

1 目标 学习user embedding和item embedding。 2 框架 3 用户建模 3.1 利用历史记录对用户建模 3.2 利用社交关系对用户建模

10.9.1-Dataway+Echarts动态图表方案

文章目录1. 技术选型2. 实现方案2.1. 方案介绍2.2. 方案实现(demo)2.2.1. 使用echarts绘制html静态页2.2.1.1. 选择合适的图表2.2.1.2. 下载html demo2.2.2. 使用Dataway准备数据接口2.2.2.1. 部署dataway2.2.2.2. 创建数据接口2.2.3. 调试html demo da…

代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体会一下 哈希法 如何提高程序执行效…

【洞察人性】 理解行为背后的动机

《洞察人性》 关于作者 阿尔弗雷德•阿德勒,奥地利精神病学家, 人本主义心理学先驱,曾经在美国哥伦比亚大学任客座教授。同时他也是个体心理学的创始人,在学术界拥有重要的地位。著作有《自卑与超越》《人性的研究》 《洞察人性…

DPDK源码分析之rte_eal_init

EAL是什么 环境抽象层(EAL)负责获得对底层资源(如硬件和内存空间)的访问。对于应用程序和其他库来说,使用这个通用接口可以不用关系具体操作系统的环境细节。rte_eal_init初始化例程负责决定如何分配操作系统的这些资源(即内存空间、设备、定时器、控制台等等)。 …

【IVIF:搜索架构】

Searching a Hierarchically Aggregated Fusion Architecture for Fast Multi-Modality Image Fusion (搜索用于快速多模态图像融合的分层聚合融合架构) 现有的基于CNN的方法使主要点在于设计各种体系结构,以端到端的方式实现这些任务。但是…

JSP ssh美食娱乐分享网站系统myeclipse开发oracle数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh美食娱乐分享网站系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采 用B/S模式开发。开发环境为TOMCA…

学习二叉树必须要了解的各种遍历方式及节点统计

哈喽,大家好,我是小林。今天给大家分享一下对二叉树的一些常规操作。 愿我们都能保持一颗向上的心。 目录一、前序遍历二、中序遍历三、后序遍历四、 统计节点个数五、统计叶子节点个数六、第K层的节点个数七、二叉树的深度八、查找值为x的节点九、层序遍…

TensorFlow TFRecords简介

TensorFlow TFRecords简介 这篇博客将介绍TensorFlow的TFRecords,提供有关TFRecords的所有信息的一应俱全的介绍。从如何构建基本TFRecords到用于训练 SRGAN 和 ESRGAN 模型的高级TFRecords的所有内容。包括什么是TFRecords,如何序列化,反序…