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

Redis主从哨兵模式连接踩坑全记录

Redis主从哨兵模式连接踩坑全记录

在分布式系统开发中,Redis主从哨兵模式是保障缓存高可用的常用架构,但实际配置过程中,往往会因密码认证、客户端适配等细节问题陷入困境。本次就分享一次从项目启动报错到最终稳定运行的完整踩坑经历,希望能为遇到类似问题的开发者提供参考。

一、背景与初始环境

项目采用Spring Boot开发,使用Redis实现缓存和分布式锁功能,Redis部署架构为「1主1从2哨兵」:

  • 主节点:10.97.0.44:6379(配置密码:Catarc@123#Foton)

  • 从节点:10.97.0.45:6379(未配置密码)

  • 哨兵节点:10.97.0.44:26379、10.97.0.45:26379(未配置密码)

  • 客户端:同时使用Lettuce(Spring Data Redis默认)和Redisson(分布式锁)

核心需求:基于自动配置实现Redis连接,确保缓存读写和分布式锁功能正常。

二、问题排查与解决过程

本次问题排查共经历3个核心阶段,每个阶段对应不同的报错的和解决思路,逐步定位到根源问题。

阶段1:启动报错 - 从节点无密码导致Redisson连接失败

1.1 关键报错信息


org.redisson.client.RedisException: ERR AUTH <password> called without any password configured for the default user. 
channel: [id: 0x81d4ccca, L:/10.35.84.244:52151 - R:/10.97.0.45:6379] 
command: (AUTH), params: (password masked)

1.2 问题定位

从报错日志可见,Redisson客户端向从节点(10.97.0.45:6379)发送了AUTH密码验证命令,但从节点未配置密码,导致认证失败。核心原因是「主从节点密码不一致」,Redisson使用统一密码连接所有节点时适配失败。

1.3 解决方案:给从节点配置与主节点一致的密码

登录从节点执行以下命令,设置密码并持久化配置:


# 连接从节点Redis
redis-cli -h 10.97.0.45 -p 6379# 设置与主节点相同的密码
10.97.0.45:6379> CONFIG SET requirepass "Catarc@123#Foton"# 验证密码生效
10.97.0.45:6379> AUTH Catarc@123#Foton  # 返回OK则生效# 持久化配置(避免重启丢失)
10.97.0.45:6379> CONFIG REWRITE# 重启从节点Redis服务(Docker环境示例)
docker restart redis-slave

操作完成后,主从节点密码统一,Redisson连接主从节点的报错消失,但新的问题随之出现。

阶段2:持续报错 - Redisson向哨兵节点发送AUTH命令

2.1 关键报错信息


org.redisson.client.RedisException: ERR AUTH <password> called without any password configured for the default user. 
channel: [id: 0xe50674da, L:/10.35.84.244:57695 - R:/10.97.0.45:26379] 
command: (AUTH), params: (password masked)

注意到此次报错的目标节点是哨兵节点(26379端口),而非主从节点(6379端口)。

2.2 问题定位

Redisson默认会将主从节点的密码透传给哨兵节点,若哨兵节点未配置密码,会触发AUTH报错。虽然项目启动正常,但持续报错会占用日志资源,且可能影响哨兵集群状态更新。核心原因是「哨兵节点未配置密码,但Redisson默认执行认证」。

2.3 解决方案:给哨兵节点配置密码并适配客户端

此问题有两种解决思路:一是禁用Redisson对哨兵的认证(低版本可能存在bug),二是给哨兵节点配置密码(推荐,符合生产规范)。本次选择方案二,步骤如下:

步骤1:修改哨兵配置文件(redis-sentinel.conf)

在44和45节点的哨兵配置中新增自身登录密码,完整配置如下:


# 哨兵端口
port 26379
# Docker中禁用后台运行
daemonize no# 新增:哨兵节点自身登录密码(与主从一致)
requirepass "Catarc@123#Foton"# 监控主节点:名称、主节点IP、端口、故障判定阈值
sentinel monitor mymaster 10.97.0.44 6379 1
# 判定主节点主观下线的超时时间(5秒)
sentinel down-after-milliseconds mymaster 5000
# 故障转移时,最多1个从节点同时同步新主节点数据
sentinel parallel-syncs mymaster 1
# 故障转移超时时间(60秒)
sentinel failover-timeout mymaster 60000
# 哨兵访问主节点的密码(与主节点一致)
sentinel auth-pass mymaster "Catarc@123#Foton"

关键说明:requirepass是哨兵节点自身的登录密码,sentinel auth-pass是哨兵访问主节点的密码,两者需与主从密码一致。

步骤2:重启哨兵服务(Docker环境)

# 停止现有哨兵容器
docker stop redis-sentinel# 启动哨兵容器(挂载修改后的配置文件)
docker run -d \--name redis-sentinel \-p 26379:26379 \-v /你的配置路径/redis-sentinel.conf:/etc/redis/sentinel.conf \redis:latest \redis-sentinel /etc/redis/sentinel.conf
步骤3:验证哨兵密码生效

# 连接哨兵节点
redis-cli -h 10.97.0.44 -p 26379# 执行命令提示需要认证
10.97.0.44:26379> PING  # 返回 (error) NOAUTH Authentication required.# 输入密码认证
10.97.0.44:26379> AUTH "Catarc@123#Foton"  # 返回OK则生效

阶段3:新报错 - Lettuce客户端连接哨兵失败

给哨兵配置密码后,Redisson报错消失,但出现Lettuce客户端连接失败的新问题。

3.1 关键报错信息


org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; 
nested exception is org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool; 
nested exception is io.lettuce.core.RedisConnectionException: Cannot connect to a Redis Sentinel: [redis://10.97.0.44:26379?timeout=2s, redis://10.97.0.45:26379?timeout=2s]
Caused by: io.lettuce.core.RedisCommandExecutionException: NOAUTH HELLO must be called with the client already authenticated...

3.2 问题定位

Lettuce是Spring Data Redis的默认客户端,项目配置中仅设置了主从节点密码(spring.redis.password),未配置哨兵节点密码,导致Lettuce连接哨兵时因未认证失败。核心原因是「Spring Redis配置遗漏哨兵密码」。

3.3 解决方案:补充Spring Redis和Redisson的哨兵密码配置

修改项目application.yml配置文件,补充哨兵密码及Lettuce客户端优化配置,关键修改如下:


spring:redis:timeout: 2000ms  # 补充单位,避免解析异常sentinel:master: mymaster  # 与哨兵配置一致nodes: 10.97.0.44:26379,10.97.0.45:26379  # 哨兵节点列表password: "Catarc@123#Foton"  # 新增:哨兵节点登录密码password: "Catarc@123#Foton"  # 主从节点密码(加双引号处理特殊字符)lettuce:client-options:  # 修正参数名称,适配Spring Boot规范redis:sentinel:refresh-period: 1000ms  # 哨兵信息刷新周期cluster:refresh:adaptive: true  # 自适应拓扑刷新period: 2000ms  # 拓扑刷新周期connect-timeout: 2000msdisconnect-on-reconnect-failure: false  # 允许重连auto-reconnect: true  # 自动重连pool:max-active: 16max-idle: 8min-idle: 4max-wait: -1ms# Redisson配置(显式配置哨兵密码,适配低版本)
redisson:master-name: mymastersentinel-addresses: 10.97.0.44:26379,10.97.0.45:26379password: "Catarc@123#Foton"  # 主从密码sentinel-password: "Catarc@123#Foton"  # 新增:哨兵密码timeout: 2000ms

三、最终验证

修改完成后重启项目,进行以下验证:

  1. 项目启动无报错,日志中无AUTH相关异常;

  2. 缓存功能正常:可正常读写Redis缓存数据;

  3. 分布式锁功能正常:调用/test/lock接口能成功获取和释放锁;

  4. 哨兵集群状态正常:Redisson能正常更新集群状态,故障转移功能可用。

四、核心经验与总结

本次问题的核心是「密码配置不完整」和「客户端适配问题」,总结以下关键经验,避免后续踩坑:

1. 主从哨兵密码统一是关键

Redis主从哨兵模式中,建议主节点、从节点、哨兵节点使用相同的密码,避免因密码不一致导致的认证失败。生产环境中,密码需包含特殊字符并妥善保管。

2. 客户端配置需区分主从与哨兵

  • Spring Redis(Lettuce):需同时配置spring.redis.password(主从)和spring.redis.sentinel.password(哨兵);

  • Redisson:低版本需显式配置sentinel-password,避免密码透传问题;

  • 特殊字符处理:密码含@、#等特殊字符时,需用双引号包裹,避免配置解析异常。

3. 报错日志是定位问题的核心工具

遇到Redis连接问题时,重点关注以下信息:

  • 报错目标节点的IP和端口(区分主从6379和哨兵26379);

  • 核心错误信息(如ERR AUTH、NOAUTH);

  • 客户端类型(Redisson或Lettuce)。

4. 配置规范与持久化不可忽视

修改Redis/哨兵配置后,需执行CONFIG REWRITE持久化配置,避免重启后配置丢失;Docker环境下,需确保配置文件正确挂载,防止容器重启后配置重置。

通过本次问题排查,深刻体会到分布式架构中「细节决定成败」,看似简单的密码配置,若考虑不周就会导致整个缓存模块异常。希望本文的踩坑经历能帮助大家少走弯路,顺利实现Redis主从哨兵模式的稳定部署。

(注:文档部分内容可能由 AI 生成)

http://www.gsyq.cn/news/71353.html

相关文章:

  • 精细化+强执行 路尚控股集团股东会议为管理升级提供新思路
  • 新中心聚焦可信机器学习安全与隐私技术
  • 老年痴呆的早期干预治疗方案是什么?2025十大产品全面分析,KOUND脑醒素具有实际作用
  • 国标GB28181算法算力平台EasyGBS打造大型企业园区一体化安防监控新体系
  • 选择四川耀霖交通:您专业的四川道路交通标志牌厂家推荐
  • 2025年五大数控插齿机实力厂商推荐,专业插齿机厂家技术与服
  • 2025年度中国铁艺冲压配件厂家排名:助力精准匹配高品质铁艺
  • 2025佛山财产分割律师服务TOP5权威推荐:知名律所深度测
  • 2025年金华苹果售后维修点推荐:哪家口碑更出色?多维度比较与选购建议
  • 还在用 Nginx Ingress?这份阿里云迁移实操指南,让你无缝切换,功能升级!
  • 制造业上云怎么选?深信服托管云给出最优解
  • 2025 年砂磨机厂家最新推荐榜,技术实力与市场口碑深度解析纳米卧式砂磨机/实验室砂磨机/棒销砂磨机/卧式砂磨机/立式砂磨机/涡轮式砂磨机/实验室纳米砂磨机公司推荐
  • 2025年修补防水涂料生产厂家推荐榜,助你轻松选择可靠供应商
  • 基于Python+Vue开发的体育用品商城管理系统源码+运行步骤+适合计算机专业
  • 2025 年坡口机厂家最新推荐榜,技术实力与市场口碑深度解析,精选高性能可靠品牌自走式坡口机/板材坡口机/钢板铣边机/管道坡口机/封头坡口机/台式铣边机/管道坡口机/钢板倒棱坡口机公司推荐
  • 2025年内磁喇叭可靠供应商TOP5权威推荐:看哪家内磁喇叭
  • 2025年重庆微信小程序怎么推广公司权威推荐榜单:网站定制开发‌/朋友圈广告计费方式‌/学校怎么投朋友圈广告‌源头公司精选
  • 2025年四诊仪直销厂家权威推荐榜单:体质辨识仪‌/经络仪‌/红外偏振光治疗仪‌源头厂家精选
  • 2025佛山财产分割律师服务TOP5权威推荐:看看哪家律师比
  • 地铁隧道风机公司排行榜To1!地铁隧道风机哪个品牌好?
  • 申请找哪家?美国留学中介排行榜TOP10给你答案
  • 美国留学中介权威榜单新鲜出炉!选对申请不用愁
  • Linux下查找命令
  • 2025博士申请中揭秘:套磁竟能让你“躺赢”名校?
  • 南京留学机构排行榜TOP10大洗牌:谁是2025真王者?
  • 2025年五大靠谱存包柜厂家推荐,智能存包柜专业解析与企业实
  • Anthropic冲击3000亿估值、Meta加速硬件布局、可灵AI音画同出创新上线!
  • 2025年国内知名的GEO优化品牌哪家好,GEO优化AI搜索/广告全案策划、制作、发布/GEO优化服务/会展服务GEO优化源头厂家怎么选择
  • 2025年深圳家装公司口碑排行榜,名雕装饰市场竞争力强
  • 深入解析:Linux 基础开发工具入门:软件包管理器的全方位实操指南