1. 程式人生 > >redis叢集時,出現的幾個異常問題

redis叢集時,出現的幾個異常問題

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?
  1. ./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?
  1. ./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?
  1. //依次執行了下面的指令碼  
  2. ./redis-trib.rb check 192.168.3.15:6379  
  3. ./redis-trib.rb check 192.168.3.15:6380  
  4. ./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 執行下面的命令:

[sql] view plain copy print?
  1. ./redis-trib.rb fix 192.168.3.15:6379  
./redis-trib.rb fix 192.168.3.15:6379


當然了,我們也可以把6380、6381節點都修復一下:

[sql] view plain copy print?
  1. ./redis-trib.rb fix 192.168.3.15:6380  
  2. ./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?
  1. /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?
  1. /usr/local/bin/redis-cli -p 6379  
  2. /usr/local/bin/redis-cli -p 6380  
  3. /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?
  1. cluster nodes  
cluster nodes



我們也可以使用linux的通用命令來檢視 [sql] view plain copy print?
  1. ps -ef |grep redis  
ps -ef |grep redis