1. 程式人生 > >redis-cluster叢集新增節點、刪除節點

redis-cluster叢集新增節點、刪除節點

1.新增節點



1.1:重新搭建叢集



之前安裝的叢集有三個節點,每個節點有一備份節點。為了方便測試,將之前的每個redis節點下的dump.rdb 和nodes.conf刪掉,重新搭建一個只有三個master的叢集(7001,7002,7003)
重新啟動三個master節點後重新執行指令碼來搭建叢集
./redis-trib.rb create --replicas 0 192.168.17.168:7001 192.168.17.168:7002 192.168.17.168:7003

1.2:啟動7004節點,新增為主節點

1)新增為主節點
redis-trib.rb add-node 192.168.17.168:7004 192.168.17.168:7001
註釋:
192.168.17.168:7004是新增的節點
192.168.17.168:7001是叢集中任一舊節點


2)連線叢集,執行cluster nodes 檢視叢集狀態


3)顯示已經新增到叢集中,但是並沒有雜湊槽,給他分配雜湊槽
./redis-trib.rb reshard 192.168.17.168:7001  #這個節點是叢集中任一節點都可以,只要能連上就可以

過程:
How many slots do you want to move (from 1 to 16384)? 1000  #輸入1000表示要移動1000個雜湊槽


What is the receiving node ID?   #把這1000個雜湊槽給誰呢?輸入7004節點對應的id


Source node #1: all    #輸入all表示從所有的雜湊槽擁有者中抽取1000個給7004節點
也可以從固定的節點中拿100個 Source node #1: 339a50df26f4722f14faba2a8fe3cad508059e88    #輸入某個節點的id表示 從該節點上拿1000個 給7004這個節點 然後再執行done命令


我們選擇all 摁回車會展示分配槽的資訊,再輸入yes 回車就分配完成了。



1.3:啟動7005節點,新增為從節點

之前的7004已經新增為master了就不動它了
1)新增為從節點
./redis-trib.rb add-node --slave --master-id 339a50df26f4722f14faba2a8fe3cad508059e88 192.168.17.168:7005 192.168.17.168:7001
註釋:
--slave,表示新增的是從節點
--master-id 339a50df26f4722f14faba2a8fe3cad508059e88,主節點的node id,這個id是7001的節點id 表示將新節點新增為7001的slave
192.168.17.168:7005,新節點
192.168.17.168:7001叢集任一個舊節點
新增slave 不需要分配雜湊槽





2.改變從節點的master



1)比如我們要將剛才的將7005新增為7001的從節點,現在將他修改為7003的從節點


2)連線7005埠
./redis-cli -h 192.168.17.168 -p 7005 -c  #連線要修改的從節點


3)移動到新的主節點
cluster replicate 3dd56b46572e1d1c1edece5e73ff4edf54485b09    #3dd56b46572e1d1c1edece5e73ff4edf54485b09為新的主節點node id




3.刪除節點



3.1刪除從節點



1)直接刪除就可以了
./redis-trib.rb del-node 192.168.17.168:7005 081057b99f96b02ecad64ce6e4ab92c9d494a170
註釋:
192.168.17.168:7005  要刪除的從節點IP 埠號
081057b99f96b02ecad64ce6e4ab92c9d494a170  要刪除從節點的 node id


3.2刪除主節點



如果主節點有從節點,將從節點轉移到其他主節點
如果主節點有slot,去掉分配的slot,然後在刪除主節點
1)我們移除上面新增的7004主節點
2)取消分配的slot,下面是主要過程
./redis-trib.rb reshard 192.168.17.168:7004  #要移除的主節點ip 埠號


過程:
How many slots do you want to move (from 1 to 16384)? 1000  #移除多少個雜湊槽,7004有1000個 全部移走
What is the receiving node ID? 339a50df26f4722f14faba2a8fe3cad508059e88 //接收7004節點slot的master  我們用7001來接收
Source node #1:d33aba61b519cbc0b5d7f33b825863d8f78a8925 //被刪除master的node-id  
Source node #2:done  
Do you want to proceed with the proposed reshard plan (yes/no)? yes //取消slot後,reshard 


3)執行第二步之後,7004節點的雜湊槽就沒有了,然後刪除該7004節點
./redis-trib.rb del-node 192.168.17.168:7004 d33aba61b519cbc0b5d7f33b825863d8f78a8925