早些時間公司redis集群環境的某臺機子冗機了,同時還導致了部分slot數據分片丟失;
在用check檢查集群運行狀態時,遇到錯誤;
**[root@node01 src]# ./redis-trib.rb check172.168.63.202:7000**
Connecting to node 172.168.63.202:7000: OK
Connecting to node 172.168.63.203:7000: OK
Connecting to node 172.168.63.201:7000: OK
Performing Cluster Check(using node 172.168.63.202:7000)
M: 449de2d2a4b799ceb858501b5b78ab91504c72e0172.168.63.202:7000
??slots: (0 slots) master
?? 0additional replica(s)
M: db9d26b1d15889ad2950382f4f32639606f9a94b172.168.63.203:7000
??slots: (0 slots) master
?? 0additional replica(s)
M: f90924f71308eb434038fc8a5f481d3661324792172.168.63.201:7000
??slots: (0 slots) master
?? 0additional replica(s)
[OK] All nodes agree about slotsconfiguration.
Check for open slots...
Check slots coverage...
**[ERR] Not all 16384 slots are covered by nodes.**
原因:
這個往往是由于主node移除了,但是并沒有移除node上面的slot,從而導致了slot總數沒有達到16384,其實也就是slots分布不正確。所以在刪除節點的時候一定要注意刪除的是否是Master主節點。
1)、官方是推薦使用redis-trib.rb fix 來修復集群…. ….? 通過cluster nodes看到7001這個節點被干掉了… 那么
[root@node01 src]#./redis-trib.rb fix 172.168.63.201:7001
修復完成后再用check命令檢查下是否正確
[root@node01 src]# ./redis-trib.rb check172.168.63.202:7000
只要輸入任意集群中節點即可,會自動檢查所有相關節點。可以查看相應的輸出看下是否是每個Master都有了slots,如果分布不均勻那可以使用下面的方式重新分配slot:
[root@node01 src]# ?./redis-trib.rb reshard 172.168.63.201:7001