Redis集群指定主從關系及動態(tài)增刪節(jié)點方式
集群創(chuàng)建
我們常用以下命令創(chuàng)建集群
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
這樣就創(chuàng)建了一個具有3個主節(jié)點和3個從節(jié)點的集群。
其中,我們雖然指定了每個主節(jié)點都有一個從節(jié)點,但哪個是7000的從節(jié)點,卻是隨機分配的,直到集群創(chuàng)建完畢,才能確定是7003、7004還是7005。
但是,有時候,當我們只有3臺物理節(jié)點時,就想要指定主從關系,從而保證高可用。
而指定主從關系,就需要手動操作了。
指定主從
思路如下
- 先創(chuàng)建具有三個主節(jié)點的集群,沒有從節(jié)點
- 使用添加節(jié)點的命令添加從節(jié)點,這樣就可以在添加時指定它們的主節(jié)點,建立主從對應關系
具體如下
- 使用以下命令創(chuàng)建主節(jié)點:
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 0
- 增加從節(jié)點:
redis-cli --cluster add-node 127.0.0.1:7003 127.0.0.1:7000 --cluster-slave --cluster-master-id ***************
其中:
- slave 表示要添加從節(jié)點
- cluster-master-id 要添加到哪一個主節(jié)點,id是*****
- 127.0.0.1:7003 要添加的從節(jié)點
- 127.0.0.1:7000 原集群中任意節(jié)點
ok,這樣添加完后得到的就是指定的想要的節(jié)點架構。
動態(tài)增刪節(jié)點
增加主節(jié)點
redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7000
其中:
127.0.0.1:7008 要向集群添加新的節(jié)點127.0.0.1:7000 原集群中任意節(jié)點
這里,節(jié)點已經(jīng)加入集群,但:
由于它還沒有分配到 hash slots,所以它還沒有數(shù)據(jù)由于它是還沒有 hash slots的主節(jié)點,所以它不會參與到從節(jié)點升級到主節(jié)點的選舉中
此時,執(zhí)行 resharding 指令來為它分配 hash slots,這會進入交互式命令行,由用戶輸入相關信息:
redis-cli --cluster reshard 127.0.0.1:7000
只需要指定一個節(jié)點,redis會自動發(fā)現(xiàn)其他節(jié)點。
How many slots do you want to move (from 1 to 16384)?target node id?from what nodes you want to take those keys?
- 第一個問題需要需要填寫,如1000.
- 第二個問題可以通過命令查看:
redis-cli -p 7000 cluster nodes | grep myself
- 第三個問題:all,這樣會從每個節(jié)點上移動一部分 hash slots到新節(jié)點
然后開始遷移,每遷移一個key就會輸出一個點。
待所有遷移完成后,執(zhí)行下面的指令查看集群是否正常:
redis-cli --cluster check 127.0.0.1:7000
增加從節(jié)點
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave
該指令與增加主節(jié)點語法一致,與添加主節(jié)點不同的是,顯式指定了是從節(jié)點。
這會為該從節(jié)點隨機分配一個主節(jié)點,優(yōu)先從那些從節(jié)點數(shù)目最少的主節(jié)點中選取。
如果要在添加從節(jié)點時就為其指定主節(jié)點,需要指定master-id,執(zhí)行下面的指令(需要替換為真實的id):
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave --cluster-master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
另一種添加從節(jié)點的方式是添加一個空的主節(jié)點,然后把該節(jié)點指定為某個主節(jié)點的從節(jié)點:
cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
刪除節(jié)點
注意,只能刪除從節(jié)點或者空的主節(jié)點
指令如下:
redis-cli --cluster del-node 127.0.0.1:7000 <node-id>
其中:
- 127.0.0.1:7000為集群中任意節(jié)點
- node-id為要刪除的節(jié)點的id
如果想刪除有數(shù)據(jù)的主節(jié)點,必須先執(zhí)行 resharding 把它的數(shù)據(jù)分配到其他節(jié)點后再刪除。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
redis分布式鎖的go-redis實現(xiàn)方法詳解
這篇文章主要介紹了redis分布式鎖的go-redis實現(xiàn)方法,本文給大家介紹的非常詳細對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12使用Docker部署Redis并配置持久化與密碼保護的詳細步驟
本文將詳細介紹如何使用 Docker 部署 Redis,并通過 redis.conf 配置文件實現(xiàn)數(shù)據(jù)持久化和密碼保護,適合在生產(chǎn)環(huán)境中使用,文章通過代碼示例講解的非常詳細,需要的朋友可以參考下2025-03-03SpringBoot整合Mybatis-plus和Redis實現(xiàn)投票功能
投票功能是一個非常常見的Web應用場景,這篇文章將為大家介紹一下如何將Redis和Mybatis-plus整合到SpringBoot中,實現(xiàn)投票功能,感興趣的可以了解一下2023-05-05