3> 添加slave節點
下面為201:6382 master節點添加一個slave節點201:6383
shell> redis-trib.rb add-node --slave --master-id 901cade1bc2703ef2bb4ff49466b38762346755d 192.168.0.201:6383 192.168.0.201:6379
參數說明:
1> –slave:表示添加從節點
2> –master-id:master節點ID,這里用上邊新添加的主節點ID(201:6382)
3> 192.168.0.201:6383:新slave節點的IP和端口
4> 192.168.0.201:6379:集群中任意舊節點,只要能連上就可以。這里以201:6379為例
添加slave節點成功后集群中的節點狀態:
[root@localhost redis-3.2.0]# redis-cli cluster nodes
901cade1bc2703ef2bb4ff49466b38762346755d 192.168.0.201:6382 master - 0 1468333842665 9 connected 0-332 5461-5794 10923-11255
459dbcccc1e5be021f19efde794b9e84474c0c02 192.168.0.202:16379 slave b6814c717080de33907e6f769e1fd8dc4fe53c38 0 1468333841661 7 connected
9080c5049615730c66731b54cb084999009eeb52 192.168.0.201:6383 slave 901cade1bc2703ef2bb4ff49466b38762346755d 0 1468333843669 9 connected
06023f8283389ad5580c782797f49a5996c108b3 192.168.0.201:6379 myself,master - 0 0 1 connected 333-5460
91179b96d9b8abce85fa7a5748aa9b4114f0b260 192.168.0.202:16380 slave 06023f8283389ad5580c782797f49a5996c108b3 0 1468333844674 5 connected
ef8a49e5242c791551f1b317d5039144e38acde6 192.168.0.201:6380 slave 13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 0 1468333842665 8 connected
b6814c717080de33907e6f769e1fd8dc4fe53c38 192.168.0.201:6381 master - 0 1468333845678 7 connected 5795-10922
13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 192.168.0.202:16381 master - 0 1468333846685 8 connected 11256-16383
very good~ 可以看出,201:6383以成功添加為一個slave節點,并將201:6382作為master節點。
cluster nodes
命令列表的節點狀態信息說明:
459dbcccc1e5be021f19efde794b9e84474c0c02 192.168.0.202:16379 slave b6814c717080de33907e6f769e1fd8dc4fe53c38 0 1468333841661 7 connected
1> 459dbcccc1e5be021f19efde794b9e84474c0c02 :節點ID
2> 192.168.0.202:16379:節點IP和端口
3> slave:節點類型,master、slave或myself(master/slave)
4> b6814c717080de33907e6f769e1fd8dc4fe53c38 :master節點ID,如果自己是master節點,這一列的值為0
5> 0:集群最近一次向節點發送 PING 命令之后, 過去了多長時間還沒接到回復。
6> 1468333841661:節點最近一次返回 PONG 回復的時間
7> 7:節點的配置紀元
8> connected:節點網絡連接狀態
9> 如果是主節點,節點狀態后邊顯示slot分配的范圍
3、改變slave節點的master
將上邊新加的slave節點(201:6383)的master,修改為201:6379(06023f8283389ad5580c782797f49a5996c108b3)
shell> redis-cli -h 192.168.0.201 -p 6383 cluster nodes | grep myself
9080c5049615730c66731b54cb084999009eeb52 192.168.0.201:6383 myself,slave 901cade1bc2703ef2bb4ff49466b38762346755d 0 0 0 connected
當前slave節點201:6383的master節點是901cade1bc2703ef2bb4ff49466b38762346755d
shell> redis-cli -h 192.168.0.201 -p 6383
192.168.0.201:6383> cluster replicate 06023f8283389ad5580c782797f49a5996c108b3
06023f8283389ad5580c782797f49a5996c108b3:新master節點的ID
192.168.0.201:6383> CLUSTER SLAVES 06023f8283389ad5580c782797f49a5996c108b3
1) "91179b96d9b8abce85fa7a5748aa9b4114f0b260 192.168.0.202:16380 slave 06023f8283389ad5580c782797f49a5996c108b3 0 1468336124600 1 connected"
2) "9080c5049615730c66731b54cb084999009eeb52 192.168.0.201:6383 myself,slave 06023f8283389ad5580c782797f49a5996c108b3 0 0 0 connected"
可以看出201:6383 slave節點已經是201:6379 master節點的子節點了。
4、刪除節點
1> 刪除slave節點
[root@localhost redis-3.2.0]# redis-trib.rb del-node 192.168.0.201:6383 9080c5049615730c66731b54cb084999009eeb52
>>> Removing node 9080c5049615730c66731b54cb084999009eeb52 from cluster 192.168.0.201:6383
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
參數說明:
1> del-node:刪除節點參數
2> 192.168.0.201:6383:節點IP和端口
3> 9080c5049615730c66731b54cb084999009eeb52:節點ID
節點成功刪除后,會同時將進程殺死
從節點重新恢復后,先cluster meet ip port
將從節點加入集群,然后設置自己的mastercluster replication master_node_id
2、刪除master節點
注意:
1> 如果master節點有slot,必須先將所有slot分配給其它master節點。否則會提示你先將slot移除再嘗試刪除,如下所示:
shell> redis-trib.rb del-node 192.168.0.201:6382 901cade1bc2703ef2bb4ff49466b38762346755d
>>> Removing node 901cade1bc2703ef2bb4ff49466b38762346755d from cluster 192.168.0.201:6382
[ERR] Node 192.168.0.201:6382 is not empty! Reshard data away and try again.
2> 如果master節點有slave節點,先將slave節點移到其它master下
- 移除201:6382 master節點的slot
- [root@localhost redis-3.2.0]# redis-trib.rb reshard 192.168.0.201:6382
>>> Performing Cluster Check (using node 192.168.0.201:6382)
M: 901cade1bc2703ef2bb4ff49466b38762346755d 192.168.0.201:6382
? ?slots:0-332,5461-5794,10923-11255 (1000 slots) master
? ?1 additional replica(s)
M: 06023f8283389ad5580c782797f49a5996c108b3 192.168.0.201:6379
? ?slots:333-5460 (5128 slots) master
? ?1 additional replica(s)
...
[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)? 1000 # 201:6382一共1000個slot
What is the receiving node ID? 06023f8283389ad5580c782797f49a5996c108b3 # 接收這1000個slot的節點ID
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:901cade1bc2703ef2bb4ff49466b38762346755d # 移除這1000個slot的master節點ID(這里同樣是201:6382)
Source node #2:done
....
Do you want to proceed with the proposed reshard plan (yes/no)? yes -
新增master節點后,也進行了這一步操作,當時是分配,現在是去掉,反著的。
- 刪除master節點
- shell> redis-trib.rb del-node 192.168.0.201:6382 901cade1bc2703ef2bb4ff49466b38762346755d
>>> Removing node 901cade1bc2703ef2bb4ff49466b38762346755dfrom cluster 192.168.0.201:6382
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.g - 此時新的master節點也被刪除了,回到了添加節點之前的狀態。