redis哨兵机制中报错JedisConnectionException: Could not get a resource from the pool

背景:

1.很早之前因为搭建系统必须要redis主从和哨兵,参照网上教程安装成功并使用,从此埋下巨坑。外包的系统,本地环境没有运行过,直接打包上传到服务器运行的。

2.因为业务需求,需要添加新功能,想着可以偷懒,调用线上运行的redis,本地跑起来再写新功能,所有东西都改好了,启动项目,控制台不报错,浏览器却报错了(项目启动首页的验证码存放在redis中,所以报错)。线上正常使用,我使用redis-manager连接工具可以连接上。奇怪。。。

redis哨兵机制中报错JedisConnectionException: Could not get a resource from the pool

我真的是大吃一惊。。。。。赶紧百度。。。。以下是其他网友提出来的解决方案

redis哨兵机制中报错JedisConnectionException: Could not get a resource from the pool

redis哨兵机制中报错JedisConnectionException: Could not get a resource from the pool

就以上的情况我一一更改排查,主要是没有一个完全适用我的,甚至每次改动都启动项目,控制台终于看到了另外一些提示

redis.clients.jedis.JedisSentinelPool$MasterListener.run Lost connection to Sentinel at xx.xx.xx.xx:26001. Sleeping 5000ms and retrying.

或者提示:

JedisConnectionException: All sentinels down, cannot determine where is mymaster master is running...

然后我又百度这个两个问题,找遍所有回答,都仔细看过,好像没有什么用,但是我有点怀疑我的哨兵了

然后去服务器看之前搭建的redis,感觉还是有问题,毕竟是我亲手搭建的(开始怀疑自己了),首先把之前搭建的配置拉下来保存备份,然后一点一点去看当时的配置,每次看到可能引起的原因,都会重启线上redis(线上使用极少,基本上不影响),然后再次启动本地项目(线上的项目不敢停掉,怕重启之后就恢复不了了。。。),就这样连续搞了两晚,今天是第三晚,前两天都是晚上11点搞到凌晨3点左右,后来在哨兵的配置文件sentinel.conf找到了一个可能引起的问题。

redis哨兵机制中报错JedisConnectionException: Could not get a resource from the pool

就是这个地方我没有更改,之前的redis主从,我都把127.0.0.1换成了线上服务器的ip,唯独哨兵的没有换,换后也是没有效果,但是我试着把这个换成线上服务器的ip后,发现了奇迹。。。。。

居然正常了!!!!!!!!!!!!!!!!!

所以得出来的结论是:如果要把redis哨兵提供给其他服务器使用,一定要改变哨兵中配置的主机为当前的ip。

这个问题困扰了我好几天,花在这个问题上面的时间快有两个正常工作日了。。。。结果还是很欣慰的。