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