redis叢集時,出現的幾個異常問題
阿新 • • 發佈:2018-12-25
1、in `call’: ERR Slot 8579 is already busy (Redis::CommandError)
在 /my_soft/Redis安裝包及jar包/redis-3.0.4/src 目錄下
執行redis 叢集安裝命令:
[sql] view plain copy print?- ./redis-trib.rb create–replicas 0 192.168.3.15:6379 192.168.3.15:6380 192.168.3.15:6381
命令時,出現了./redis-trib.rb create --replicas 0 192.168.3.15:6379 192.168.3.15:6380 192.168.3.15:6381
in `call’: ERR Slot 8579 is already busy (Redis::CommandError)
如下圖所示:
錯誤提示是
slot插槽被佔用了(這是 搭建叢集前時,以前redis的舊資料和配置資訊沒有清理乾淨。)
解決方案是
用redis-cli 登入到每個節點執行 flushall 和 cluster reset 就可以了。
然後重新執行群集指令碼命令:
[sql] view plain copy print?- ./redis-trib.rb create–replicas 0 192.168.3.15:6379 192.168.3.15:6380 192.168.3.15:6381
./redis-trib.rb create --replicas 0 192.168.3.15:6379 192.168.3.15:6380 192.168.3.15:6381
2、[ERR] Not all 16384 slots are covered by nodes.
redis群集搭建成功後,6379節點莫名其的宕機,重啟了幾次,一會兒就又宕機了。
在 /my_soft/Redis安裝包及jar包/redis-3.0.4/src 目錄 下執行check指令碼:
[sql] view plain copy print?- //依次執行了下面的指令碼
- ./redis-trib.rb check 192.168.3.15:6379
- ./redis-trib.rb check 192.168.3.15:6380
- ./redis-trib.rb check 192.168.3.15:6381
//依次執行了下面的指令碼
./redis-trib.rb check 192.168.3.15:6379
./redis-trib.rb check 192.168.3.15:6380
./redis-trib.rb check 192.168.3.15:6381
其中,6379節點出現了:[ERR] Not all 16384 slots are covered by nodes. 如下圖所示:
slot插槽出問題了,修復slot 執行下面的命令:
- ./redis-trib.rb fix 192.168.3.15:6379
./redis-trib.rb fix 192.168.3.15:6379
當然了,我們也可以把6380、6381節點都修復一下:
- ./redis-trib.rb fix 192.168.3.15:6380
- ./redis-trib.rb fix 192.168.3.15:6381
./redis-trib.rb fix 192.168.3.15:6380
./redis-trib.rb fix 192.168.3.15:6381
修改完畢後,重啟6379節點,
[plain] view plain copy print?- /usr/local/bin/redis-server /my_soft/my_config/redis3/6379/redis.conf
/usr/local/bin/redis-server /my_soft/my_config/redis3/6379/redis.conf
重啟後,6379節點自動重新加入整合。
檢視各節點的情況:
[sql] view plain copy print?- /usr/local/bin/redis-cli -p 6379
- /usr/local/bin/redis-cli -p 6380
- /usr/local/bin/redis-cli -p 6381
/usr/local/bin/redis-cli -p 6379
/usr/local/bin/redis-cli -p 6380
/usr/local/bin/redis-cli -p 6381
使用上面的任意一條命令,登入任意一個節點:
檢視叢集節點的情況:
[plain] view plain copy print?- cluster nodes
cluster nodes
我們也可以使用linux的通用命令來檢視 [sql] view plain copy print?
- ps -ef |grep redis
ps -ef |grep redis