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
