本篇文章接上一篇博客,繼續進行配置。
一、Redis集羣添加新結點
添加新的節點的基本過程就是添加一個空的節點然後移動一些數據給它。
有兩種情況:
- 添加一個主節點
- 添加一個從節點:添加從節點時需要將這個新的節點設置爲集羣中某個節點的複製
1、創建新的節點7007和7008
並開啓服務
cd /usr/local/rediscluster/
mkdir 7007 7008
cp 7001/redis.conf 7007/
cp 7001/redis.conf 7008/
cd 7007
vim redis.conf
redis-server redis.conf
cd ../7008
vim redis.conf
redis-server redis.conf
ps ax | grep 700*
2、將新節點7007添加到集羣,並查看
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
redis-cli -c -p 7007
127.0.0.1:7007> cluster nodes
3、爲新節點7007添加從節點7008
redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007--cluster-slave --cluster-master-id a3140761a8745b9cc814f5b6a0347466befbff8a
- 注意:新節點現在已經連接上了集羣, 成爲集羣的一份子, 並且可以對客戶端的命令請求進行轉向了, 但是和其他主節點相比, 新節點還有兩點區別:
-
新節點沒有包含任何數據, 因爲它沒有包含任何哈希槽.
-
儘管新節點沒有包含任何哈希槽, 但它仍然是一個主節點, 所以在集羣需要將某個從節點升級爲新的主節點時, 這個新節點不會被選中。
二、集羣重新分片
新節點已經加入集羣中,但是槽值爲0,集羣需要重新分片。使用 redis-trib 程序, 將集羣中的某些哈希桶移動到新節點裏面, 新節點就會成爲真正的主節點
1、手動分配哈希槽
redis-cli --cluster reshard 127.0.0.1:7007
選完哈希槽個數後,又會問我們需要覆蓋的節點id是什麼,這個id就是我們新創建的節點id。然後讓我們輸入源節點,如果這裏我們輸入all的話,他會隨機的從所有的節點中抽取300個作爲新節點的哈希槽。
查看7007分配的哈希槽,可以看到7007分配到了指定的哈希槽
redis-cli --cluster info 127.0.0.1:7001
- 注意:因爲哈希槽的數量是固定的,所以新的節點指定所分配到的哈希槽是其它主節點提供的,但是手動分配的哈希槽可能在使用時會出現問題,因此不建議使用該方式進行分配
2、自動平均分配哈希槽
redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001
查看7007節點否平均分配到哈希槽
redis-cli --cluster check 127.0.0.1:7001
且數據仍同步:
redis-cli -c -p 7007
127.0.0.1:7007> get name
127.0.0.1:7007> info
三、移除節點
1、移除從Slave節點
redis-cli --cluster del-node 127.0.0.1:7008 a37d25e2d3a96b9e6d31c4d81e7f1ff9a34cd945
2、除Master節點
刪除master節點之前首先要使用reshard
移除master的全部slot
,然後再刪除當前節點(目前只能把被刪除master的slot遷移到一個節點上)
此時7007節點哈希槽已經全部轉移到7001節點上
3、刪除7007節點
redis-cli --cluster del-node 127.0.0.1:7007 a3140761a8745b9cc814f5b6a0347466befbff8a
查看7007節點是否刪除:
主節點7007刪除成功