Redis Sentinel 及 Redisson 连接问题全解析
在 Kubernetes (k8s) 环境下使用 Redis Sentinel 进行高可用部署时,可能会遇到 failover 超时、Sentinel 误判、Spring Boot 连接失败 以及 Redisson 配置错误等问题。本文将对这些问题进行汇总分析,并提供详细的解决方案。
1️⃣ Redis Sentinel 介绍
Redis Sentinel 是 Redis 的高可用组件,主要功能包括:
- 主节点故障检测:判断 Redis 主节点是否宕机。
- 自动故障转移:当主节点不可用时,选举新的主节点。
- 通知客户端:应用程序(如 Spring Boot、Redisson)可以通过 Sentinel 获取最新的主节点地址。
Redis Sentinel 关键配置(sentinel.conf):
sentinel monitor mymaster redis-master 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
down-after-milliseconds mymaster 5000:如果 5 秒内主节点无响应,认为其不可用。failover-timeout mymaster 60000:Sentinel 允许 60 秒内完成故障转移。
2️⃣ Redis Sentinel 报错分析
🚨 问题 1:Redis 日志报 failover-timeout
🔍 可能原因
- 副本同步未完成,Sentinel 不能立即选出新的主节点。
- 网络抖动,导致 Sentinel 误判主节点宕机。
- Sentinel 数量不足,无法进行有效投票。
✅ 解决方案
1️⃣ 检查 Redis 副本同步状态:
kubectl exec -it redis-master-0 -- redis-cli INFO replication
如果 connected_slaves: 0,说明没有可用副本,Sentinel 可能无法完成切换。
2️⃣ 增大 failover-timeout:
sentinel failover-timeout mymaster 120000 # 增加至 120 秒
然后重启 Sentinel:
kubectl delete pod -l app=redis-sentinel
3️⃣ 检查 Sentinel 是否足够:
kubectl get pods -l app=redis-sentinel
如果 num-other-sentinels: 0,需要增加副本:
spec:replicas: 3 # 至少 3 个 Sentinel
🚨 问题 2:Spring Boot 连接 Redis Sentinel 一直报 added 和 is down
🔍 可能原因
spring.redis.sentinel.master配置错误,导致 Spring Boot 连接不上 Redis Sentinel。sentinel.conf里mymaster拼写错误,导致 Sentinel 无法正确发现主节点。
✅ 解决方案
1️⃣ 检查 sentinel.conf 配置
kubectl exec -it redis-sentinel-0 -- redis-cli -p 26379 SENTINEL MASTER mymaster
如果 mymaster 不存在,说明 Sentinel 配置错误。
2️⃣ 检查 Spring Boot 配置
spring:redis:sentinel:master: mymaster # 必须和 Sentinel 配置一致nodes:- redis-sentinel-0:26379- redis-sentinel-1:26379- redis-sentinel-2:26379password: yourpassword
3️⃣ 调整 timeout 以减少误判
spring:redis:timeout: 5000lettuce:pool:max-active: 10max-wait: 5000
3️⃣ Redisson 连接 Redis Sentinel 配置
Redisson 是一个高效的 Redis 客户端,支持 Redis Sentinel 模式。
🚀 依赖
在 pom.xml 中引入:
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.2</version>
</dependency>
🚀 配置 RedissonClient
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient() {Config config = new Config();config.useSentinelServers().setMasterName("mymaster").addSentinelAddress("redis://redis-sentinel-0:26379","redis://redis-sentinel-1:26379","redis://redis-sentinel-2:26379").setPassword("yourpassword").setTimeout(5000).setConnectTimeout(10000);return Redisson.create(config);}
}
4️⃣ 测试 Redisson 连接
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RedisController {private final RedissonClient redissonClient;public RedisController(RedissonClient redissonClient) {this.redissonClient = redissonClient;}@GetMapping("/set")public String set(@RequestParam String key, @RequestParam String value) {RBucket<String> bucket = redissonClient.getBucket(key);bucket.set(value);return "Set " + key + " = " + value;}@GetMapping("/get")public String get(@RequestParam String key) {RBucket<String> bucket = redissonClient.getBucket(key);return "Get " + key + " = " + bucket.get();}
}
5️⃣ 可能的错误 & 解决方案
❌ Unable to connect to Redis Sentinel
✅ 解决方案
-
检查 Sentinel 是否正常运行
kubectl get pods -l app=redis-sentinel如果 Sentinel Pod 挂了,需要重新启动。
-
手动测试 Sentinel
redis-cli -p 26379 SENTINEL MASTER mymaster如果
mymaster不存在,说明 Sentinel 配置有误。
🔎 总结
🚀 Redis Sentinel + Redisson 高可用方案的关键要点:
1️⃣ Redis Sentinel 需配置正确,mymaster 名称需一致,failover-timeout 需足够长。
2️⃣ Spring Boot 连接 Redis Sentinel 时,spring.redis.sentinel.master 需要匹配 Sentinel 配置。
3️⃣ Redisson 连接 Sentinel 需要手动配置 RedissonClient,并保证 sentinel.conf 正确。
4️⃣ 故障排查时,手动执行 SENTINEL MASTER mymaster,检查主节点状态。
📢 如果你仍然遇到问题,可以提供 redis-cli 的 SENTINEL MASTER mymaster 输出,我可以帮你分析!🚀
相关文章:
Redis Sentinel 及 Redisson 连接问题全解析
在 Kubernetes (k8s) 环境下使用 Redis Sentinel 进行高可用部署时,可能会遇到 failover 超时、Sentinel 误判、Spring Boot 连接失败 以及 Redisson 配置错误等问题。本文将对这些问题进行汇总分析,并提供详细的解决方案。 1️⃣ Redis Sentinel 介绍 …...
基于Flink SQL的实时指标多维分析模型
数据流程介绍 1.创建源表kafka接入消息队列数据,定义字段映射规则; 2.创建目标表es_sink配置Elasticsearch输出; 3.通过多级视图(tmp→tmp_dedup→tmp1/tmp2→tmp3→tmp_groupby)实现数据清洗、去重、状态计算&#x…...
算法刷题整理合集(一)
算法刷题整理合集(一) 本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处&am…...
C++ STL—— String库
在C编程中,字符串操作是几乎每个项目都会涉及的基础功能。C标准模板库(STL)中的string类为我们提供了强大而灵活的工具,使得字符串的处理变得简单高效。无论是字符串的创建、修改、查找,还是复杂的文本处理,…...
【从零开始学习计算机科学】数据库系统(二)关系数据库 与 关系代数
【从零开始学习计算机科学】数据库系统(二)关系数据库 与 关系代数 关系数据库结构化查询语言SQL数据定义语言(DDL)数据查询语言(Data Query Language, DQL)数据操纵语言(Data Manipulation Language, DML)数据控制语言(Data Control Language, DCL)关系型数据库的优…...
DoS攻击防范
一、网络架构优化 使用CDN或反向代理 通过内容分发网络(CDN)或反向代理(如Nginx)分散流量,将请求分发到多个服务器节点,减轻单点压力,同时过滤异常请求。 负载均衡技术 部署负载均衡设备&#…...
Linux驱动开发实战(四):设备树点RGB灯
Linux驱动开发实战(四):设备树点RGB灯 文章目录 Linux驱动开发实战(四):设备树点RGB灯前言一、驱动实现1.1 驱动设计思路1.2 关键数据结构1.3 字符设备操作函数1.4 平台驱动探测函数1.5 匹配表和平台驱动结…...
vue中,watch里,this为undefined的两种解决办法
提示:vue中,watch里,this为undefined的两种解决办法 文章目录 [TOC](文章目录) 前言一、问题二、方法1——使用function函数代替箭头函数()>{}三、方法2——使用that总结 前言 尽量使用方法1——使用function函数代替箭头函数()…...
设计模式C++
针对一些经典的常见的场景, 给定了一些对应的解决方案,这个就叫设计模式。 设计模式的作用:使代码的可重用性高,可读性强,灵活性好,可维护性强。 设计原则: 单一职责原则:一个类只做一方面的…...
前端构建工具进化论:从Grunt到Turbopack的十年征程
前端构建工具进化论:从Grunt到Turbopack的十年征程 一、石器时代:任务自动化工具(2012-2014) 1.1 Grunt:首个主流构建工具 // Gruntfile.js 典型配置 module.exports function(grunt) {grunt.initConfig({concat: {…...
设备预测性维护:企业降本增效的关键密码
在当今竞争激烈的商业战场中,企业犹如一艘在波涛汹涌大海上航行的巨轮,要想乘风破浪、稳步前行,降本增效便是那至关重要的 “船锚”,帮助企业在复杂的市场环境中站稳脚跟。而设备预测性维护,正是开启企业降本增效大门的…...
css基本功
为什么 ::first-letter 是伪元素? ::first-letter 的作用是选择并样式化元素的第一个字母,它创建了一个虚拟的元素来包裹这个字母,因此属于伪元素。 grid布局 案例一 <!DOCTYPE html> <html lang"zh-CN"><head&…...
信号处理抽取多项滤波的数学推导与仿真
昨天的《信号处理之插值、抽取与多项滤波》,已经介绍了插值抽取的多项滤率,今天详细介绍多项滤波的数学推导,并附上实战仿真代码。 一、数学变换推导 1. 多相分解的核心思想 将FIR滤波器的系数 h ( n ) h(n) h(n)按相位分组,每…...
C++双端队列知识点+习题
在C中,双端队列(Deque,发音为“deck”)是标准模板库(STL)中的一种容器适配器,其全称为Double-Ended Queue。它结合了队列和栈的特点,允许在容器的两端(前端和后端&#x…...
【递归、搜索和回溯算法】专题二 :二叉树中的深搜
二叉树中的深搜 深度优先遍历(DFS):一种沿着树或图的深度遍历节点的算法,尽可能深地搜索树或图的分支,如果一条路径上的所有结点都被遍历完毕,就会回溯到上一层,继续找一条路遍历。 在二叉树中…...
Vue3计算属性深度解析:经典场景与Vue2对比
一、计算属性的核心价值 计算属性(Computed Properties)是Vue响应式系统的核心特性之一,它通过依赖追踪和缓存机制优雅地解决模板中复杂逻辑的问题。当我们需要基于现有响应式数据进行派生计算时,计算属性总能保持高效的性能表现…...
UE5与U3D引擎对比分析
Unreal Engine 5(UE5)和Unity 3D(U3D)是两款主流的游戏引擎,适用于不同类型的项目开发。以下是它们的主要区别,分点整理: 1. 核心定位 UE5: 主打3A级高画质项目(如主机/P…...
【vue3学习笔记】(第150-151节)computed计算属性;watch监视ref定义的数据
尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 本篇内容对应课程第150-151节 课程 P150节 《computed计算属性》笔记 写一个简单的 姓、名输入框效果: 用vue2的形式定义一个计算属性 fullName: 测试页面展示无问题: 但是,在vue…...
JavaScript如何实现复制图片功能?
最近开发中遇到一个需求,就是用户希望能通过直接点击按钮复制图片,然后就可以很方便的把图片发送到班群中,于是就有了复制图片的需求。 那么如何通过JavaScript来实现复制图片呢? 一、前置知识:如何实现复制…...
MySQL 8 设置允许远程连接(Windows环境)
🌟 MySQL 8 设置允许远程连接(Windows环境) 在开发和部署应用时,经常需要从远程主机连接到MySQL数据库。默认情况下,MySQL仅允许本地连接,因此需要进行一些配置才能允许远程访问。今天,我将详细…...
我又又又又又又更新了~~纯手工编写C++画图,有注释~~~
再再再次感谢Ttcofee提的问题 本次更新内容: 鼠标图案(切换),版本号获取,输入框复制剪切板 提前申明:如果运行不了,请到主页查看RedpandaDevc下载,若还是不行就卸了重装。 版本号&…...
Python控制语句——循环语句-for
1.下面的语句哪个会无限循环下去()。 A、 for a in range(10): time.sleep(10) B、 while 1<10: time.sleep(10) C、 while True: break D、 a = [3,-1,2] for i in a: if i==-1: break 答案:B。1<10始终为True,循环体中又没有break的条件,故B会无限循环。 2.for s i…...
全面解析:将采购入库单数据集成到MySQL的技术实施
旺店通旗舰版-采购入库单集成到MySQL的技术案例分享 在数据驱动的业务环境中,如何高效、准确地实现系统间的数据对接是企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例:将旺店通旗舰奇门平台上的采购入库单数据集成到MySQL数据库中&#x…...
12. Pandas :使用pandas读Excel文件的常用方法
一 read_excel 函数 其他参数根据实际需要进行查找。 1.接受一个工作表 在 11 案例用到的 Excel 工作簿中,数据是从第一张工作表的 A1 单元格开始的。但在实际场景中, Excel 文件可能并没有这么规整。所以 panda 提供了一些参数来优化读取过程。 比如 s…...
记录致远OA服务器硬盘升级过程
前言 日常使用中OA系统突然卡死,刷新访问进不去系统,ping服务器地址正常,立马登录服务器检查,一看磁盘爆了。 我大脑直接萎缩了,谁家OA系统配400G的空间啊,过我手的服务器没有50也是30台,还是…...
Java网络多线程
网络相关概念: 关于访问: IP端口 因为一个主机上可能有多个服务, 一个服务监听一个端口,当你访问的时候主机通过端口号就能知道要和哪个端口发生通讯.因此一个主机上不能有两个及以上的服务监听同一个端口. 协议简单来说就是数据的组织形式 好像是两个人交流一样,要保证自己说…...
【H2O2 | 软件开发】Axios发送Http请求
目录 前言 开篇语 准备工作 正文 概念 封装工具包 示例 结束语 前言 开篇语 本系列为短篇,每次讲述少量知识点,无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的,希望对诸位有所帮助。 如…...
VScode 运行LVGL
下载vscode解压 环境安装 安装mingw64,gcc 版本必须8.3以上 安装cmak 系统环境变量Path中添加(以实际安装目录为准) C:\Program Files\mingw64\bin C:\Program Files\CMake\bin 将GUI-Guider生成的代码目录拷贝一份放到vscode项目目录…...
AIP-165 按条件删除
编号165原文链接https://google.aip.dev/165状态批准创建日期2019-12-18更新日期2019-12-18 有时API需要提供一种机制,按照一些过滤参数删除大量资源,而非提供待删除的各资源名字。 这是一个稀有的场景,用于用户一次性删除数千或更多资源的…...
React Next项目中导入Echart世界航线图 并配置中文
公司业务要求做世界航线图,跑了三个ai未果,主要是引入world.json失败,echart包中并不携带该文件,源码的world.json文件页面404找不到。需要自己寻找。这是整个问题卡壳的关键点,特此贴出资源网址。 目录 一、安装 二…...
