最近灰度的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“报错相关推荐

  1. windows10打开网页“网页可能暂时无法连接,或者它已永久性地移动到了新网址。 ERR_FAILED“报错解决方法

    win10打开网页提示"网页可能暂时无法连接"解决方法 在某次重装完系统之后使用一段时间,发现浏览器打开网页时常提示"网页可能暂时无法连接",但是微信等需要联网 ...

  2. 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的功能是否正常. ...

  3. Redis 配置连接池,redisTemplate 操作多个db数据库,切换多个db,解决JedisConnectionFactory的设置连接方法过时问题。(转)

    Redis 配置连接池,redisTemplate 操作多个db数据库,切换多个db,解决JedisConnectionFactory的设置连接方法过时问题.(转) 参考文章: (1)Redis 配置 ...

  4. python3 redis 设置连接超时

    在Python中连接Redis 常规操作 import redis rs = redis.Redis(host='127.0.0.1', port=6379) rs.setname('test', ' ...

  5. spingboot使用redis连接池报错

    配置如下,增加了连接池相关 redis:host: localhostport: 6379database: 7lettuce:pool:max-active: 20max-idle: 20max-w ...

  6. c# 连接Redis报错:WRONGTYPE Operation against a key holding the wrong kind of value:类型搞混弄出的错误...

    今天用C# 连接Redis做性能测试,用的接口是StackExchange.Redis,按照正常的思路获取数据库连接,代码如下: 1 string conn = "我的ip:6379,pas ...

  7. php7 redis长连接,php使用redis长连接有哪些步骤

    这次给大家带来php使用redis长连接有哪些步骤,php使用redis长连接的注意事项有哪些,下面就是实战案例,一起来看一下. php-redis在github上的项目地址:https://gith ...

  8. Redis 远程连接和基本命令

    文章目录 Redis远程连接 Redis基本命令 Redis远程连接 redis远程连接服务器使用命令redis-cli. 语法格式为:redis-cli -h host -p port -a pas ...

  9. python连接池原理_python redis之连接池的原理

    python redis之连接池的原理 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下, 这是没 ...

最新文章

  1. 互联网产品各阶段的标准流程文档
  2. 输入密码查看flag(详解)——Bugku
  3. 44. xargs命令
  4. 深入解析String中的intern
  5. 手把手带你写一个JavaScript类型判断小工具
  6. RUNOOB python练习题37 对一个序列的数进行排序
  7. 海德堡大学 BMCV 组博士招生,生物医学图像分析领域​
  8. kotlin设置按钮不可点击_全彩LED显示屏软件空点功能如何设置、使用?
  9. 基于粒子群和麻雀搜索的LMS自适应滤波算法 - 附代码
  10. c语言中一些公用的方法
  11. R语言使用epiDisplay包的lroc函数可视化logistic回归模型的ROC曲线并输出诊断表、输出灵敏度、1-特异度、AUC值等、设置auc.coords参数指定AUC值在可视化图像中的位置
  12. JS 事件捕获、事件冒泡以及事件委托图文详解
  13. 深圳计算机学校排名2015年,2015深圳各区初中最新排名,10各区学校都有
  14. vue集成svg-sprite-loader
  15. 手把手做一个JSP入门程序(一):程序基本介绍(JSP)
  16. 计算机网络 -- TCP/IP
  17. 同源策略、跨域以及跨域的三种解决方案详解
  18. java 公交管理系统 代码_Java学员作品-城市公交管理系统
  19. 特斯拉自动驾驶造假实锤:总监出马亲自作证,撞车片段被删,所有功能均为预编程...
  20. 手机拍照-基础构图小结

热门文章

  1. LM324系列运算放大器简介
  2. MatrixOne 入选艾瑞数据库研究报告啦~
  3. 基于龙芯2K1000移植uboot之NAND
  4. TTL电平、CMOS电平、RS232电平及RS232电平转换电路
  5. 时域卷积定理的证明 | 卷积的傅里叶变化等于傅里叶变换的乘积
  6. vue 获取上一年今年下一年 上一月本月下一月 昨天今天明天
  7. C语言贪吃蛇大作业总结,c语言贪吃蛇实训报告.doc
  8. c语言贪吃蛇小游戏的简易实现
  9. 调用Bytom Chrome插件钱包开发Dapp
  10. linux 线程与进程的简单区别