Redis 可以连接但无法进行读写问题,“Could not get a resource from the pool“报错
最近灰度的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访问的话就会出现这个问题。
Redis 可以连接但无法进行读写问题,“Could not get a resource from the pool“报错相关推荐
- windows10打开网页“网页可能暂时无法连接,或者它已永久性地移动到了新网址。 ERR_FAILED“报错解决方法
win10打开网页提示"网页可能暂时无法连接"解决方法 在某次重装完系统之后使用一段时间,发现浏览器打开网页时常提示"网页可能暂时无法连接",但是微信等需要联网 ...
- CentOS Redis安装报错:“You need tcl 8.5 or newer in order to run the Redis test”问题解决
在编译Redis的时候成功之后,提示"Hint: It's a good idea to run 'make test' ;)",我们可以运行测试,确认Redis的功能是否正常. ...
- Redis 配置连接池,redisTemplate 操作多个db数据库,切换多个db,解决JedisConnectionFactory的设置连接方法过时问题。(转)
Redis 配置连接池,redisTemplate 操作多个db数据库,切换多个db,解决JedisConnectionFactory的设置连接方法过时问题.(转) 参考文章: (1)Redis 配置 ...
- python3 redis 设置连接超时
在Python中连接Redis 常规操作 import redis rs = redis.Redis(host='127.0.0.1', port=6379) rs.setname('test', ' ...
- spingboot使用redis连接池报错
配置如下,增加了连接池相关 redis:host: localhostport: 6379database: 7lettuce:pool:max-active: 20max-idle: 20max-w ...
- c# 连接Redis报错:WRONGTYPE Operation against a key holding the wrong kind of value:类型搞混弄出的错误...
今天用C# 连接Redis做性能测试,用的接口是StackExchange.Redis,按照正常的思路获取数据库连接,代码如下: 1 string conn = "我的ip:6379,pas ...
- php7 redis长连接,php使用redis长连接有哪些步骤
这次给大家带来php使用redis长连接有哪些步骤,php使用redis长连接的注意事项有哪些,下面就是实战案例,一起来看一下. php-redis在github上的项目地址:https://gith ...
- Redis 远程连接和基本命令
文章目录 Redis远程连接 Redis基本命令 Redis远程连接 redis远程连接服务器使用命令redis-cli. 语法格式为:redis-cli -h host -p port -a pas ...
- python连接池原理_python redis之连接池的原理
python redis之连接池的原理 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下, 这是没 ...
最新文章
- 互联网产品各阶段的标准流程文档
- 输入密码查看flag(详解)——Bugku
- 44. xargs命令
- 深入解析String中的intern
- 手把手带你写一个JavaScript类型判断小工具
- RUNOOB python练习题37 对一个序列的数进行排序
- 海德堡大学 BMCV 组博士招生,生物医学图像分析领域​
- kotlin设置按钮不可点击_全彩LED显示屏软件空点功能如何设置、使用?
- 基于粒子群和麻雀搜索的LMS自适应滤波算法 - 附代码
- c语言中一些公用的方法
- R语言使用epiDisplay包的lroc函数可视化logistic回归模型的ROC曲线并输出诊断表、输出灵敏度、1-特异度、AUC值等、设置auc.coords参数指定AUC值在可视化图像中的位置
- JS 事件捕获、事件冒泡以及事件委托图文详解
- 深圳计算机学校排名2015年,2015深圳各区初中最新排名,10各区学校都有
- vue集成svg-sprite-loader
- 手把手做一个JSP入门程序(一):程序基本介绍(JSP)
- 计算机网络 -- TCP/IP
- 同源策略、跨域以及跨域的三种解决方案详解
- java 公交管理系统 代码_Java学员作品-城市公交管理系统
- 特斯拉自动驾驶造假实锤:总监出马亲自作证,撞车片段被删,所有功能均为预编程...
- 手机拍照-基础构图小结