Redis異常:JedisException: Can connect to sentinel, but 127.0.0.1:6379 seems to be not monitored...

1. 異常現象

Caused by: redis.clients.jedis.exceptions.JedisException: Can connect to sentinel, but 127.0.0.1:26379 seems to be not monitored...

Caused by: redis.clients.jedis.exceptions.JedisException: Can connect to sentinel, but 127.0.0.1:6379 seems to be not monitored...

Caused by: redis.clients.jedis.exceptions.JedisException: Can connect to sentinel, but 127.0.0.1:6379 seems to be not monitored...
	at redis.clients.jedis.JedisSentinelPool.initSentinels(JedisSentinelPool.java:177)
	at redis.clients.jedis.JedisSentinelPool.<init>(JedisSentinelPool.java:95)
	at redis.clients.jedis.JedisSentinelPool.<init>(JedisSentinelPool.java:82)
	at redis.clients.jedis.JedisSentinelPool.<init>(JedisSentinelPool.java:70)
	at redis.clients.jedis.JedisSentinelPool.<init>(JedisSentinelPool.java:39)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
	... 43 more

 

2. 排查分析

Java 程序中的 JedisSentinelPool 配置的哨兵名稱:127.0.0.1:6379

查看哨兵配置 sentinel.conf,哨兵配置中的服務器名稱爲 mymaster。如下:

# 當前Sentinel服務運行的端口
# 在默認情況下,Sentinel 使用 TCP 端口 26379(普通 Redis 服務器使用的是 6379 )
port 26379

# 哨兵監聽的主節點mymaster;最後面的數字 3 表示最低通過票數;# 默認值 2
# 如果通過,則哨兵羣體認爲該主節點客觀下線(odowm)
sentinel monitor mymaster 127.0.0.1 6379 3

# 哨兵認定當前主節點mymaster失效的判別間隔時間
# 如果在設置的時間內(毫秒),當前主節點沒有響應或者響應錯誤代碼,則當前哨兵認爲該主節點主主觀下線(sdown)
# 3s內mymaster無響應,則認爲mymaster宕機了
sentinel down-after-milliseconds mymaster 3000

# 執行故障轉移時,最多有1個從節點同時對新的主節點進行同步
# 當新的master上位時,允許從節點同時對新主節點進行同步的從節點個數;默認是1,建議保持默認值
# 在故障轉移期間,將會終止客戶端的請求
# 如果此值較大,則意味着"集羣"終止客戶端請求的時間總和比較大
# 反之此值較小,則意味着"集羣"在故障轉移期間,多個從節點仍可以提供服務給客戶端
sentinel failover-timeout mymaster 10000

# 故障轉移超時時間。當故障轉移開始後,但是在此時間內仍然沒有觸發任何故障轉移操作,則當前哨兵會認爲此次故障轉移失敗
# 如果10秒後,mysater仍沒啓動過來,則啓動failover;最後面的數字 10000 表示最低通過票數
sentinel config-epoch mymaster 6

程序中哨兵配置的名稱(127.0.0.1:6379)和服務器中 redis 哨兵配置的名稱(mymaster)不一致導致。所以報錯。

 

3. 解決方案

將程序中哨兵配置的服務器名稱改正,與 sentinel.conf 中配置的服務器名稱保持一致,問題即可解決:

redis.host=127.0.0.1
redis.port=6380
redis.timeout=3000
redis.pool.maxIdle=50
redis.pool.testOnBorrow=true
redis.pool.maxWaitMillis=3000
redis.sentinel.master=mymaster
redis.sentinel.node1=127.0.0.1:26379
redis.sentinel.node2=127.0.0.1:26380
redis.sentinel.node3=127.0.0.1:26381

Redis 進擊物語:
Redis進擊(一)從0到1,Redis的安裝與使用
Redis進擊(二)搭建Redis主從複製服務集羣(一主兩從、反客爲主)【Windows環境】
Redis進擊(三)搭建Redis高可用集羣的哨兵模式(Redis-Sentinel)【Windows環境】
Redis進擊(四)Java中配置和使用Redis高可用集羣的哨兵模式(Redis-Sentinel)【Spring&SpringBoot環境】
Redis進擊(五)redis.conf配置文件說明備註手冊
Redis異常:Creating Server TCP listening socket *:26379: bind : No such file or directory
Redis異常:JedisException: Can connect to sentinel, but 127.0.0.1:6379 seems to be not monitored...
Redis異常:JedisConnectionException: All sentinels down, cannot determine where is mymaster master is

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章