redisson.client.RedisTimeoutException: Unable to send batch afte

背景:

  • Redis:阿里云redis集群8个节点
  • Redisson version:3.11.1
  • 应用:10个pod

阿里云集群中db-7出现异常,自动主从切换,切换后7个pod使用正常,3个pod出现RedisTimeoutException异常。

20210724113358.jpg

redirect=null, 
entry=MasterSlaveEntry [masterEntry=[freeSubscribeConnectionsAmount=1, freeSubscribeConnectionsCounter=50, freeConnectionsAmount=10, freeConnectionsCounter=64, freezed=false, freezeReason=null, client=[addr=redis://10.10.3.112:6379], nodeType=MASTER, firstFail=0]]], 
connection: RedisConnection@1662347556 [redisClient=[addr=redis://10.10.3.113:6379], channel=[id: 0xb21f069b, L:/10.10.3.117:50884 ! R:10.10.3.113/10.10.3.113:6379]], command: (HGET), 
command params: [shiro-activeSessionCache, t$afb4da38-cf18-4117-9159-ce16fc61b9d9] after 3 retry attempts

可能一:

redisson版本3.9.1:这版在redis出问题之后,watchdog发现连接无效之后,只打印了一个警告日志,没有自动重连了,后续redis的命令还是继续使用原无效连接。这问题在The connection not reconnect #1811 修复了。

Dingtalk_20210801103633.jpg

我们使用的是3.11.1查看源码后发现已经升级,不存在该问题

可能二:

怀疑是linux的可打开文件数太小

/etc/security/limits.conf

5B5A921A-19C6-4CDC-87D6-62D829C5480C.png

使用ulimit命令查看,可打开文件数最大1048576,实际情况肯定用不到,这个也排除

可能三:

在redisson的github上找到一个类似情况,使用redis集群,应用有两个pod,redisson版本:3.10.7。一个pod报RedisTimeoutException,另外一个正常,cpu使用率高、需要重启pod恢复正常。我们那天10个pod其中3个pod出现该问题,重启后修复。这个帖子跟我们这次的报错信息和情况一致。

官方给的解答是由于 MPSC 队列的误用,NonStickyEventExecutorGroup 中出现了无限 while 循环导致。

https://github.com/redisson/redisson/issues/2299

https://github.com/netty/netty/pull/9579

Dingtalk_20210801110917.jpg

可惜当天是线上环境急着降低影响,直接重启了pod,没有查看线程。但问题现象和恢复方法完成一致

问题总结

已知redisson-3.11.5 以下均有这些问题,redisson问题bug还是比较多,建议使用最新的稳定版本。准备升级到 3.13.6


已有 0 条评论

    欢迎您,新朋友,感谢参与互动!