redis5 集羣縮擴容

查看了下多數博客都是按擴縮容來介紹這一塊, 我想已經有個搭建的3主3從的集羣了, 先縮再擴也是一樣的

放在前面的命令, 現在redis 已經不支持用ruby操作了,使用下面的命令幫助可以很好地完成集羣操作

[root@localhost src]# ./redis-cli --cluster help

下面看步驟

  1. 先看下 之前的集羣節點信息
127.0.0.1:6379> cluster nodes
# 這個是要刪除的主節點
5c831c468474b918911965a0d4e7f45f9a490c21 192.168.152.129:6379@16379 myself,master - 0 1590672980000 2 connected 5461-10922
55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380@16380 master - 0 1590672981000 7 connected 0-5460
187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379@16379 master - 0 1590672981068 3 connected 10923-16383
# 這個是要刪除的從節點
97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380@16380 slave 5c831c468474b918911965a0d4e7f45f9a490c21 0 1590672982075 6 connected
c4d26cbd322b9ebabb81e315667a2dbdb8102cef 192.168.152.131:6380@16380 slave 187372b2148f33dfa089af1396a2b427d9e3196d 0 1590672983083 4 connected
9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379@16379 slave 55c211b52bf0830931d7111387b38e2822132dbf 0 1590672982000 7 connected


  1. 先刪除從節點
# 192.168.152.131:6380 爲從節點的ip和端口號   c4d26cbd322b9ebabb81e315667a2dbdb8102cef 爲從節點的id
[root@localhost src]# ./redis-cli --cluster del-node 192.168.152.131:6380 c4d26cbd322b9ebabb81e315667a2dbdb8102cef
  1. 遷移主節點的數據
# 192.168.152.129:6379 爲主節點的ip和端口
[root@localhost src]# ./redis-cli --cluster reshard 192.168.152.129:6379

  1. 刪除主節點
# 192.168.152.129:6379 爲主節點ip和端口號  5c831c468474b918911965a0d4e7f45f9a490c21爲主節點的id
[root@localhost src]# ./redis-cli --cluster del-node 192.168.152.129:6379 5c831c468474b918911965a0d4e7f45f9a490c21
>>> Removing node 5c831c468474b918911965a0d4e7f45f9a490c21 from cluster 192.168.152.129:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

刪除後要講節點redis數據刪除掉,我的redis數據目錄在/usr/local/data/redis 不刪除的話,重啓redis加入集羣會報錯,因爲重啓後加載了redis持久化文件; 從節點一樣也是要刪除持久化數據重啓

[ERR] Node 192.168.152.129:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
[root@localhost redis]# ls
appendonly_6380.aof  dump_6379.rdb  dump_6380.rdb  nodes-6379.conf  nodes-6380.conf
[root@localhost redis]# pwd
/usr/local/data/redis
[root@localhost redis]# rm *6379*
rm: remove regular file ‘dump_6379.rdb’? y
rm: remove regular file ‘nodes-6379.conf’? y

  1. 查看縮容後的集羣信息
192.168.152.129:6380> cluster nodes
97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380@16380 slave 55c211b52bf0830931d7111387b38e2822132dbf 0 1590674239974 7 connected
55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380@16380 myself,master - 0 1590674239000 7 connected 0-10922
187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379@16379 master - 0 1590674238000 3 connected 10923-16383
9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379@16379 slave 55c211b52bf0830931d7111387b38e2822132dbf 0 1590674238962 7 connected

對比第一步查到的集羣信息會發現192.168.152.131:6380 從節點和 192.168.152.129:6379 主節點已經不在集羣裏了,
而且我們將槽都遷移到了192.168.152.129:6380@16380 節點上

至此縮容成功

接下來我們在把刪除的節點加回來

  1. 啓動192.168.152.129:6379 主節點
[root@localhost src]# /usr/local/redis-5.0.3/src/redis-server /usr/local/redis-5.0.3/conf/6379/redis.conf
  1. 將主節點加到集羣中
[root@localhost src]# ./redis-cli --cluster add-node 192.168.152.129:6379 192.168.152.129:6380@16380
>>> Adding node 192.168.152.129:6379 to cluster 192.168.152.129:6380
>>> Performing Cluster Check (using node 192.168.152.129:6380)
M: 55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380
   slots:[0-10922] (10923 slots) master
   2 additional replica(s)
S: 97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380
   slots: (0 slots) slave
   replicates 55c211b52bf0830931d7111387b38e2822132dbf
M: 187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379
   slots:[10923-16383] (5461 slots) master
S: 9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379
   slots: (0 slots) slave
   replicates 55c211b52bf0830931d7111387b38e2822132dbf
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.152.129:6379 to make it join the cluster.
[OK] New node added correctly.
[root@localhost src]# 

查看集羣節點信息

92.168.152.129:6380> cluster nodes
97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380@16380 slave 55c211b52bf0830931d7111387b38e2822132dbf 0 1590676311000 7 connected
55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380@16380 myself,master - 0 1590676311000 7 connected 0-10922
187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379@16379 master - 0 1590676312000 3 connected 10923-16383
#  發現192.168.152.129:6379 已經加入到集羣中來了,但是還沒有分配到槽
de487014ee7d76dbd6f5674067804d19102acdb6 192.168.152.129:6379@16379 master - 0 1590676312000 0 connected
9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379@16379 slave 55c211b52bf0830931d7111387b38e2822132dbf 0 1590676312618 7 connected

  1. 給192.168.152.129:6379 分配槽位
[root@localhost src]# ./redis-cli --cluster reshard 192.168.152.129:6379
>>> Performing Cluster Check (using node 192.168.152.129:6379)
M: de487014ee7d76dbd6f5674067804d19102acdb6 192.168.152.129:6379
   slots: (0 slots) master
S: 9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379
   slots: (0 slots) slave
   replicates 55c211b52bf0830931d7111387b38e2822132dbf
M: 55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380
   slots:[0-10922] (10923 slots) master
   2 additional replica(s)
M: 187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379
   slots:[10923-16383] (5461 slots) master
S: 97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380
   slots: (0 slots) slave
   replicates 55c211b52bf0830931d7111387b38e2822132dbf
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 5462    
# de487014ee7d76dbd6f5674067804d19102acdb6 爲要分配槽位192.168.152.129:6379 的id  
What is the receiving node ID? de487014ee7d76dbd6f5674067804d19102acdb6
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: 55c211b52bf0830931d7111387b38e2822132dbf
Source node #2: done

查看分配後的集羣節點信息

192.168.152.129:6380> cluster nodes
97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380@16380 slave de487014ee7d76dbd6f5674067804d19102acdb6 0 1590676789099 8 connected
55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380@16380 myself,master - 0 1590676789000 7 connected 5462-10922
187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379@16379 master - 0 1590676791114 3 connected 10923-16383
# 發現192.168.152.129:6379 主節點已經分配了槽位0-5461
de487014ee7d76dbd6f5674067804d19102acdb6 192.168.152.129:6379@16379 master - 0 1590676790107 8 connected 0-5461
9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379@16379 slave 55c211b52bf0830931d7111387b38e2822132dbf 0 1590676790000 7 connected
192.168.152.129:6380> 

  1. 給192.168.152.129:6379 主節點添加一個從節點192.168.152.131:6380
[root@localhost src]# ./redis-cli --cluster add-node 192.168.152.131:6380 192.168.152.129:6379
>>> Adding node 192.168.152.131:6380 to cluster 192.168.152.129:6379
>>> Performing Cluster Check (using node 192.168.152.129:6379)
M: de487014ee7d76dbd6f5674067804d19102acdb6 192.168.152.129:6379
   slots:[0-5461] (5462 slots) master
   1 additional replica(s)
S: 9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379
   slots: (0 slots) slave
   replicates 55c211b52bf0830931d7111387b38e2822132dbf
M: 55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380
   slots:[5462-10922] (5461 slots) master
   1 additional replica(s)
M: 187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379
   slots:[10923-16383] (5461 slots) master
S: 97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380
   slots: (0 slots) slave
   replicates de487014ee7d76dbd6f5674067804d19102acdb6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.152.131:6380 to make it join the cluster.
[OK] New node added correctly.

查看 集羣節點信息,發現192.168.152.131:6380 已經加入到集羣中了,但是是個master

127.0.0.1:6379> cluster nodes
d50c4f7bf3dd3e3d8f9ff53f5ed26f9023fed5b6 192.168.152.131:6380@16380 master - 0 1590677229000 0 connected
187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379@16379 myself,master - 0 1590677227000 3 connected 10923-16383
9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379@16379 slave 55c211b52bf0830931d7111387b38e2822132dbf 0 1590677228000 7 connected
de487014ee7d76dbd6f5674067804d19102acdb6 192.168.152.129:6379@16379 master - 0 1590677229378 8 connected 0-5461
97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380@16380 slave de487014ee7d76dbd6f5674067804d19102acdb6 0 1590677227000 8 connected
55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380@16380 master - 0 1590677227360 7 connected 5462-10922

  1. 192.168.152.131:6380 作爲 192.168.152.129:6379的從節點,
    需要登錄192.168.152.131:6380 進行操作
[root@localhost src]# ./redis-cli -c -h 192.168.152.131 -p 6380
#192.168.152.131:6380 將自己設爲192.168.152.129:6379的從節點
192.168.152.131:6380> cluster replicate de487014ee7d76dbd6f5674067804d19102acdb6
OK
192.168.152.131:6380> cluster nodes
# 查看設置生效,一切又回到最初的樣子
9d27a18c320f588332cda1ad19a1d6e08e08d458 192.168.152.131:6379@16379 slave 55c211b52bf0830931d7111387b38e2822132dbf 0 1590677457000 7 connected
55c211b52bf0830931d7111387b38e2822132dbf 192.168.152.129:6380@16380 master - 0 1590677459000 7 connected 5462-10922
d50c4f7bf3dd3e3d8f9ff53f5ed26f9023fed5b6 192.168.152.131:6380@16380 myself,slave de487014ee7d76dbd6f5674067804d19102acdb6 0 1590677458000 0 connected
de487014ee7d76dbd6f5674067804d19102acdb6 192.168.152.129:6379@16379 master - 0 1590677457385 8 connected 0-5461
187372b2148f33dfa089af1396a2b427d9e3196d 192.168.152.130:6379@16379 master - 0 1590677457000 3 connected 10923-16383
97816e6462753f1a8a4644517ac865794311e807 192.168.152.130:6380@16380 slave de487014ee7d76dbd6f5674067804d19102acdb6 0 1590677459401 8 connected
192.168.152.131:6380> 

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