關於CLUSTERDOWN Hash slot not served故障解決

疫情期間冒着風險來到新疆上線支持,下午在現場正在緊張的 玩手機 專心工作,旁邊的開發同事發現redis掛了

不慌,放下我的iPhone12, debug開啓:

1. 查看報錯

應用日誌關鍵報錯:

CLUSTERDOWN Hash slot not served

登陸redis控制檯操作報錯:

127.0.0.1:6379> set cike 567
(error) CLUSTERDOWN Hash slot not served
127.0.0.1:6379> get cike
(error) CLUSTERDOWN The cluster is down
127.0.0.1:6379> cluster info
cluster_state:fail
127.0.0.1:6379> cluster slots

1) 1) (integer) 726
   2) (integer) 726
   3) 1) ""
      2) (integer) 6379
      3) "5b77786e05107ef67e64ed2bdd32267ffa38812f"

2) 1) (integer) 12595
   2) (integer) 12595
   3) 1) ""
      2) (integer) 6379
      3) "5b77786e05107ef67e64ed2bdd32267ffa38812f"
3) 1) (integer) 15461
   2) (integer) 15461
   3) 1) ""
      2) (integer) 6379
      3) "5b77786e05107ef67e64ed2bdd32267ffa38812f"

2. 冷靜分析

去百度,千篇一律的修復、移除等集羣操作,但我時單機的。終於找到一篇博客得到解決之法, 原理很簡單,查看redis的槽位,缺啥補啥。

3. 着手解決

其實這個方法是鄙人發明的,那我們來看看這個博主當時是怎麼從我這學的。

首先,使用命令執行槽位恢復

redis-cli -h 127.0.0.1 -p 6379 cluster addslots 0
redis-cli -h 127.0.0.1 -p 6379 cluster addslots 1
redis-cli -h 127.0.0.1 -p 6379 cluster addslots 2
.
.
.
redis-cli -h 127.0.0.1 -p 6379 cluster addslots 16383

這樣寫16384條,寫完晚上的烤羊腿都喫不到了。

急中生智:寫腳本生成16384條命令:

for ((i=0;i<=16383;i++)); 
do 
	echo "redis-cli -h 127.0.0.1 -p 6379 cluster addslots "${i} >> /tmp/repai_redis.sh;
done

執行腳本

 sh repai_redis

查看集羣槽位:

127.0.0.1:6379> cluster addslots 0
OK
127.0.0.1:6379> cluster slots
1) 1) (integer) 0
   2) (integer) 16383
   3) 1) ""
      2) (integer) 6379
      3) "5b77786e05107ef67e64ed2bdd32267ffa38812f"

這纔是正確的槽位分配

查看集羣狀態:

127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:1
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0
127.0.0.1:6379> set ww 22
OK
127.0.0.1:6379> get ww
"22"
127.0.0.1:6379> 

完美解決!皮一下,還是感謝道友的思路。

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