那些年踩過的坑之Redis報錯:All sentinels down, cannot determine where is mymaster master is running...


1. 異常信息: All sentinels down, cannot determine where is mymaster master is running...

通過測試:

   @Test
    public void testSentinel(){
        HashSet<String> sentinels = new HashSet<>();
        sentinels.add("192.168.72.129:26379");
        JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
        Jedis jedis = pool.getResource();
        jedis.set("hello", "world");
        System.out.println(jedis.get("hello"));
    }

報出錯誤:

警告: Cannot get master address from sentinel running @ 192.168.72.129:26379. 
Reason: redis.clients.jedis.exceptions.JedisConnectionException:
Failed connecting to host 192.168.72.129:26379. Trying next one. redis.clients.jedis.exceptions.JedisConnectionException:
All sentinels down, cannot determine where is mymaster master is running...
(哨兵宕機, 不能確定主機位置)

還原報錯現場:

  學習搭配redis過程中, 在linux虛擬機上配置完redis-sentinel( 即啟用redis哨兵配置搭建1主2從的redis服務器 )

  開啟了redis-sentinel服務, ip和port號為: 192.168.72.129:26379

  首先, 能確定的是, linux防火牆已然關閉, sentinel.conf 的配置中, (注釋掉bind)開放了不同主機的訪問, 同時, redis的保護模式也已經關閉!!!

但是jedis連接還是出現了問題, 那么既然不是redis服務器方配置或者防護的問題, 那么問題只能出在了我的操作系統win7中!!!

  在此基礎上猜測, 是否是ip 連接 或者 是端口未開放呢?

  於是通過以下操作:

  cmd ->

  telnet 192.168.72.129:26379 

  顯示錯誤: 正在連接192.168.72.129:26379...無法打開到主機的連接。 在端口 23: 連接失敗

 ------- 附win7中開啟telnet的方法: 站內他人博文鏈接:https://www.cnblogs.com/ylcms/p/7250129.html, 博主:雲龍筆記

  看樣子應該是linux的端口未開放導致無法連接.

  繼續, 查看linux服務端:

  通過 netstat 查看與26379相關的端口信息, 查詢到:

  怎么回事? 端口好好地, 已經被redis服務監聽了!!!

  哎, 這時腦袋升起一絲不詳的感覺, 難道是我的主從redis都沒有啟動, 而我直接加載了哨兵的配置嗎?

 

  哇的一聲哭了出來, 忙活了這么久, 居然是我並沒有啟動主從機. 導致了這一系列bug!!!!

  開啟, 然后跑一下測試類, 再看看結果, 如下

  

  連接正常...

  雖然導致bug的問題如此"腦殘", 不過從這過程之中, 我也對redis的分片, 乃至哨兵有了一個全面的認識, 算是禍福相依啦. 如果你也有連接redis的錯誤, 不妨跟我的思路來思考, 相信不難解決!

---記錄2019年7月29日12:31:11 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM