Java lettuce 连接Redis哨兵波动问题的排查

发布时间 2023-11-29 10:41:07作者: 热气球!

环境信息

说明:本文内容基于公司内部出现的问题,已经对机器环境信息做了脱敏处理。

hostname IPaddress role
A 10.0.0.190 哨兵节点
B 10.0.0.191 哨兵节点
C 10.0.0.192 master节点
D 10.0.0.193 slave节点
E 10.0.0.194 slave节点
F 10.0.0.197 哨兵节点

现象描述

2:40~3:40期间内业务程序出现剧烈波动,研发人员告知这是Redis的问题,因为从监控图表来看这部分业务只会和Redis有关系。

具体Java程序日志如下:

2023-11-21 15:07:53 CST ERROR com.ata.privc.api.web.BindControllerApi 161 bind - 绑定接口异常,类型:AXB,a:******,x:****,b:*****,display:null,requestId:******
1018297987272 org.springframework.data.redis.RedisSystemException: Redis exception; nested exception is io.lettuce.core.RedisException: Cannot determine a node to read (Known nodes: [Redis
MasterReplicaNode [redisURI=redis://***************@10.0.0.194, role=REPLICA], RedisMasterReplicaNode [redisURI=redis://***************@10.0.0.193, role=REPLICA]]) with setting io.le
ttuce.core.ReadFromImpl$ReadFromUpstream@4a2467e6

通过查询Redis日志以及/var/log/message 并没有发现任何异常情况,唯一有关联的是监控上看到该时间段Redis master机器的io cpu 内存都有一些上升,但是对于整个服务器资源来说仍然不构成威胁。

尝试解决

进行了一顿 百度 Google,在Java程序连接Redis的驱动程序lettuce-core的GitHub Issue中找到了相同的问题,贴上链接:Not able to read the updated Master when connected Master/Slave through sentinel · Issue #1293 · lettuce-io/lettuce-core (github.com)

通过siiwyd的评论,我看到需要将Redis的timeout时间改为10。

image-20231122135252413

我询问主管是否尝试此方法,我的主管因为担心会不会调整后引起其他问题,为保证线上环境的稳定性择期执行修改配置,暂时不做改动。 ?

参考资料