前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 可以连接但无法进行读写问题,"Could not get a resource from the pool"报错

Redis 可以连接但无法进行读写问题,"Could not get a resource from the pool"报错

作者头像
Li_XiaoJin
发布2022-06-10 19:57:57
8070
发布2022-06-10 19:57:57
举报
文章被收录于专栏:Lixj's BlogLixj's Blog

最近灰度的B组遇到一些问题,可以连上 Redis 却无法进行读写,代码报“Could not get a resource from the pool” 的错,上网查了好多方法都没用,最后才发现是网络的问题。特此记录一下排查问题的过程。

因为弄了两组Redis,A组连A组的 Redis,B组连B组的 Redis,现在发现进行读写时一直报错,报错为“Could not get a resource from the pool

尝试换了A组之后,发现没问题,系统运行正常。

然后又怀疑是网络不通,ping、telnet 试过之后发现网络是通的。 懵逼了,咨询运维人员后说两组 Redis 的配置是一样的,我又让他们检查了一下。

上网查了下,说是可能开了防火墙,运维说内网未开防火墙。

还有说是 Redis 开启了保护模式,检查了下发现也没有开启。

然后运维在 Redis 主机上连接后是可以读写的,我们程序就无法读写,然后我开始查看我们的相关代码,顺便看了下源码。 没看出问题,因为如果有问题的话,A组又是好的,这个怎么解释呢,感觉就是两组 Redis 肯定有什么配置是不一样的,导致了这个问题。

继续排查。。。。

开始分析代码。。。

连接池看着应该也没什么问题,然后我心想在本地把项目运行起来看看,把 Redis 配置改为连B组的,debug 看看能不能是什么问题,为啥不能读写。

一切很顺利,项目顺利启动了,Redis 应该是连上了,试了下我本地网络是通的。

正当我调个接口想试试的时候,刷出了一堆报错,感觉是找到原因了! 看报错:

发现这些显示的 Redis 的节点是 192.168 网段的。而这几台主机应该是 172.22 网段,这 192.168 网段当然连不上啊,试了下用 192.168 网段去连接,果然。。。连不上。。。。。网络不通

那这又是咋回事?! 我们配置的时候是主机名,难道是代码解析为 192.168 网段了,开始怀疑这个。

然后我又试了试,把连接的配置改为 IP,172.22 网段的,发现还是一样的报错,还是 192.168 。

运维说应该不是网络解析,然后我又开始分析代码,点开源码,debug看看哪里获取的这些 IP。

终于,

这是获取 Redis 集群的节点的啊,不是我们代码进行解析的,终于找到问题了。

然后让运维在 Redis 主机登录后 执行 cluster nodes 命令,果然,Redis 节点的信息就是 192.168 网段的。。。。

排查了半天终于找到了问题的原因,连接的时候是通过 172.22 网段进行连接,但是读写的时候,组件先获取 Redis 的节点,然后进行读写,用的是不同网段,所以就造成了可以连接却无法读写的问题。

然后我去查看A组,发现不管是用主机名、172.22,还是 192.168,网络都是通的,这就难怪了。 有点奇怪为什么 Redis 集群节点的 IP 是不同网段的,后面得查一下。

解决办法:

1、更换 Redis 节点的 IP,好像比较麻烦。

2、打通 192.168 网段的网络,运维找网络组解决了。

系统恢复正常,完结,撒花。

改天再写一个关于 Redis 集群的,好好学习一下~

2020-07-07更 发现 192.168 网段是内网IP,我们日常使用的 172.22 是浮动IP,Redis 集群使用的应该是内网的IP,所以当内网网络不通时,无法通过内网IP访问的话就会出现这个问题。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/rediscouldnotgetaresourcefromthepool报错

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档