Redis叢集操作範例詳解

2022-06-23 14:00:22
本篇文章給大家帶來了關於的相關知識,其中主要整理了叢集操作的相關問題,包括了增加redis範例、設定8007為主節點、設定8008為8007的從節點等等內容,下面一起來看一下,希望對大家有幫助。

推薦學習:

基於已有一定基礎,這裡搭建一個基礎版本三主三從,架構如下

1、啟動叢集

/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8001/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8002/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8003/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8004/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8005/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8006/redis.conf

檢視叢集狀態:cluster nodes

從上圖可以看出,整個叢集執行正常,三個master節點和三個slave節點,

  • 8001埠的範例節點儲存0-5460這些hash槽,
  • 8002埠的範例節點儲存5461-10922這些hash槽,
  • 8003埠的範例節點儲存10923-16383這些hash槽,

這三個master節點儲存的所有hash槽組成 redis叢集的儲存槽位,slave點是每個主節點的備份從節點,不顯示儲存槽位。

2、叢集操作

我們在原始叢集基礎上再增加一主(8007)一從(8008),增加節點後的叢集參見下圖,新增節點用虛線框表示

2.1、增加redis範例

在/usr/local/redis-cluster下建立8007和8008資料夾,並拷貝8001資料夾下的redis.conf檔案到8007和8008這兩個資料夾下

mkdir 8007 8008 
cd 8001
cp redis.conf /usr/local/redis‐cluster/8007/ 
cp redis.conf /usr/local/redis‐cluster/8008/
 
# 修改8007資料夾下的redis.conf組態檔
vim /usr/local/redis‐cluster/8007/redis.conf 
# 修改如下內容:
port:8007 
dir /usr/local/redis‐cluster/8007/
cluster‐config‐file nodes‐8007.conf 

# 修改8008資料夾下的redis.conf組態檔
vim /usr/local/redis‐cluster/8008/redis.conf
# 修改內容如下:
port:8008
dir /usr/local/redis‐cluster/8008/
cluster‐config‐file nodes‐8008.conf

# 啟動8007和8008倆個服務並檢視服務狀態
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8007/redis.conf
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8008/redis.conf

ps ‐el | grep redis

2.2、設定8007為主節點

用add-node命令新增一個主節點8007(master),前面的ip:port為新增節點,後面的ip:port為已知存在節點,看到紀錄檔最後有"[OK] New node added correctly"提示代表新節點加入成功

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8007 192.168.0.61:8001

檢視叢集狀態

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8001

192.168.0.61:8001> cluster nodes

如下所示:

注意:當新增節點成功以後,新增的節點不會有任何資料,因為它還沒有分配任何的slot(hash槽),我們需要為新節點手工分配hash槽

使用redis-cli命令為8007分配hash槽,找到叢集中的任意一個主節點,對其進行重新分片工作

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8001

2.3、設定8008為8007的從節點

新增從節點8008到叢集中去並檢視叢集狀態

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8008 192.168.0.61:8001

如下:

如圖所示,還是一個master節點,沒有被分配任何的hash槽。

原因:我們需要執行replicate命令來指定當前節點(從節點)的主節點id為哪個,首先需要連線新加的8008節點的使用者端,然後使用叢集命令進行操作,把當前的8008(slave)節點指定到一個主節點下(這裡使用之前建立的8007主節點)

執行指令

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8008 

192.168.0.61:8008> cluster replicate 2728a594a0498e98e4b83a537e19f9a0a3790f38 #後面這串id為8007的節點id

檢視叢集狀態,8008節點已成功新增為8007節點的從節點

2.4、刪除8080從節點[不刪除四主四從]

用del-node刪除從節點8008,指定刪除節點ip和埠,以及節點id(紅色為8008節點id)

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8008 a1cfe35722d151cf70585cee212755653 93c0956

再次檢視叢集狀態,如下圖所示,8008這個slave節點已經移除,並且該節點的redis服務也已被停止

2.5、刪除8007主節點[不刪除四主四從]

因為主節點的裡面是有分配了hash槽的,所以我們這裡必須先把8007裡的hash槽放入到其他的可用主節點中去,然後再進行移除節點操作,不然會出現資料丟失問題(目前只能把master的資料遷移到一個節點上,暫時做不了平均分配功能),執行命令如下:

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8007

遷移驗證:會發現8007下面已經沒有任何hash槽了,證明遷移成功!

用del-node命令刪除8007主節點即可

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8007 2728a594a0498e98e4b83a537e19f9a0a 3790f38

檢視最終叢集狀態,發現一切恢復如初,至此水平擴充套件結束

推薦學習:

以上就是Redis叢集操作範例詳解的詳細內容,更多請關注TW511.COM其它相關文章!