Redis叢集:主從節點新增和刪除
新增主節點
叢集建立成功後可以向叢集中新增節點,下面是新增一個master主節點
新增7007結點,參考叢集結點規劃章節新增一個“7007”目錄作為新節點。
執行下邊命令:
./redis-trib.rb add-node 192.168.101.3:7007 192.168.101.3:7001
檢視叢集結點發現7007已新增到叢集中:
hash槽重新分配
新增完主節點需要對主節點進行hash槽分配這樣該主節才可以儲存資料。
redis叢集有16384個槽,叢集中的每個結點分配自已槽,通過檢視叢集結點可以看到槽佔用情況。
給剛新增的7007結點分配槽:
第一步:連線上叢集
./redis-trib.rb reshard 192.168.101.3:7001(連線叢集中任意一個可用節點都行)
第二步:輸入要分配的槽數量
輸入 500表示要分配500個槽
第三步:輸入接收槽的結點id
這裡準備給7007分配槽,通過cluster nodes檢視7007結點id為15b809eadae88955e36bcdbb8144f61bbbaf38fb
輸入:15b809eadae88955e36bcdbb8144f61bbbaf38fb
第四步:輸入all/done
這裡輸入all
第五步:輸入yes開始移動槽到目標結點id
新增從節點
叢集建立成功後可以向叢集中新增節點,下面是新增一個slave從節點。
新增7008從結點,將7008作為7007的從結點。
./redis-trib.rb add-node --slave --master-id 主節點id 新增節點的ip和埠 叢集中已存在節點ip和埠
執行如下命令:
./redis-trib.rb add-node --slave --master-id cad9f7413ec6842c971dbcc2c48b4ca959eb5db4 192.168.101.3:7008 192.168.101.3:7001
cad9f7413ec6842c971dbcc2c48b4ca959eb5db4 是7007結點的id,可通過cluster nodes檢視。
注意:如果原來該節點在叢集中的配置資訊已經生成cluster-config-file指定的配置檔案中(如果cluster-config-file沒有指定則預設為nodes.conf),這時可能會報錯:
[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
解決方法是
刪除生成的配置檔案nodes.conf,刪除後再執行./redis-trib.rb add-node指令
檢視叢集中的結點,剛新增的7008為7007的從節點:
刪除結點:
./redis-trib.rb del-node 127.0.0.1:7005 4b45eb75c8b428fbd77ab979b85080146a9bc017
刪除已經佔有hash槽的結點會失敗,報錯如下:
[ERR] Node 127.0.0.1:7005 is not empty! Reshard data away and try again.
需要將該結點佔用的hash槽分配出去(參考hash槽重新分配章節)。