redis哨兵機制中報錯JedisConnectionException: Could not get a resource from the pool

背景:

1.很早之前因爲搭建系統必須要redis主從和哨兵,參照網上教程安裝成功並使用,從此埋下巨坑。外包的系統,本地環境沒有運行過,直接打包上傳到服務器運行的。

2.因爲業務需求,需要添加新功能,想着可以偷懶,調用線上運行的redis,本地跑起來再寫新功能,所有東西都改好了,啓動項目,控制檯不報錯,瀏覽器卻報錯了(項目啓動首頁的驗證碼存放在redis中,所以報錯)。線上正常使用,我使用redis-manager連接工具可以連接上。奇怪。。。

我真的是大吃一驚。。。。。趕緊百度。。。。以下是其他網友提出來的解決方案

就以上的情況我一一更改排查,主要是沒有一個完全適用我的,甚至每次改動都啓動項目,控制檯終於看到了另外一些提示

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主從,我都把127.0.0.1換成了線上服務器的ip,唯獨哨兵的沒有換,換後也是沒有效果,但是我試着把這個換成線上服務器的ip後,發現了奇蹟。。。。。

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

所以得出來的結論是:如果要把redis哨兵提供給其他服務器使用,一定要改變哨兵中配置的主機爲當前的ip。

這個問題困擾了我好幾天,花在這個問題上面的時間快有兩個正常工作日了。。。。結果還是很欣慰的。

 

發佈了23 篇原創文章 · 獲贊 17 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章