Redis集群水平擴展、集群中添加以及刪除節點的操作

在Redis集群搭建中,我們搭建瞭下圖所示的Redis集群,接下來我們就來看看如何為我們的Redis集群進行水平擴容。

[[email protected] redis-5.0.3]# src/redis-server redis-cluster/8001/redis.conf 
[[email protected] redis-5.0.3]# src/redis-server redis-cluster/8004/redis.conf
[[email protected] redis-5.0.3]# src/redis-server redis-cluster/8002/redis.conf 
[[email protected] redis-5.0.3]# src/redis-server redis-cluster/8005/redis.conf 
[[email protected] redis-5.0.3]# src/redis-server redis-cluster/8003/redis.conf 
[[email protected] redis-5.0.3]# src/redis-server redis-cluster/8006/redis.conf 

首先,先啟動我們的集群(在上一篇博客中,我們已經將集群環境搭好瞭,隻需要重啟啟動redis服務即可)

查看集群中的信息:

為集群水平擴容

接下來,我們將在集群得基礎上再添加一主一從,增加後集群如下圖所示:

1. 增加8007和8008倆個redis實例

在/usr/local/software/redis-5.0.3/redis-cluster下創建8007和8008文件夾,並拷貝8001文件夾下的redis.conf文件到8007和8008這兩個文件夾下,進行修改

mkdir 8007 8008
cd 8001
cp redis.conf /usr/local/software/redis-5.0.3/redis-cluster/8007/
cp redis.conf /usr/local/software/redis-5.0.3/redis-cluster/8008/

# 修改8007文件夾下的redis.conf配置文件
vim /usr/local/software/redis-5.0.3/redis-cluster/8007/redis.conf
# 修改如下內容:
port 8007
dir /usr/local/software/redis-5.0.3/redis-cluster/8007
cluster-config-file nodes-8007.conf

# 修改8008文件夾下的redis.conf配置文件
vim /usr/local/software/redis-5.0.3/redis-cluster/8008/redis.conf
修改內容如下:
port 8008
dir /usr/local/software/redis-5.0.3/redis-cluster/8008
cluster-config-file nodes-8008.conf

# 啟動8007和8008倆個服務並查看服務狀態
src/redis-server /usr/local/software/redis-5.0.3/redis-cluster/8007/redis.conf
src/redis-server /usr/local/software/redis-5.0.3/redis-cluster/8008/redis.conf
ps -el | grep redis

2. 將8007和8008加入集群中

查看redis集群得幫助命令:

1.create:創建一個集群環境host1:port1 … hostN:portN

2.call:可以執行redis命令

3.add-node:將一個節點添加到集群裡,第一個參數為新節點的ip:port,第二個參數為集群中任意一個已經存在的節點的ip:port

4.del-node:移除一個節點

5.reshard:重新分片

6.check:檢查集群狀態

添加8007和8008節點到集群中

[[email protected] redis-5.0.3]# src/redis-cli --cluster add-node 192.168.243.133:8007 192.168.243.133:8001
[[email protected] redis-5.0.3]# src/redis-cli --cluster add-node 192.168.243.133:8008 192.168.243.133:8001

3. 查看集群狀態

我們發現對於新加入的節點默認都是master節點,最重要的是,他們都沒有分配slots槽位,所以根據Redis集群分片的原理,這些剛加入集群的節點實際上是不能讀寫數據的。

4. 為新加入的節點分配槽位

使用集群中的任意一個主節點,對其進行重新分片工作

[[email protected] redis-5.0.3]# src/redis-cli --cluster reshard 192.168.243.133:8001

輸入命令後,會進入一個交互式的操作:

1. How many slots do you want to move (from 1 to 16384)? 600

你想移動多少個槽位? 這裡移動600個

2. What is the receiving node ID? 7cbcddaea49560b2847327b1465e8db7082655d2

要將槽位分配給拿給節點? 指定節點的ID

3. 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: all

要從哪幾個節點抽取槽位,all:從所有的節點中,各自抽取一部分槽位給8007。輸入all後會有一個抽取槽位的計劃

4.Do you want to proceed with the proposed reshard plan (yes/no)? yes開始執行

是否執行該reshard計劃。

查看集群的最新狀態:

我們可以看到8007已經有hash槽位瞭,此時我們就能往8007進行讀寫操作瞭

5. 將8008配置為8007的從節點

我們可以通過replicate命令指定當前節點成為哪一個節點的從節點。

192.168.243.133:8008> cluster replicate 7cbcddaea49560b2847327b1465e8db7082655d2
OK

查看集群的狀態:

發現8008已經成為8007的從節點瞭,至此,Redis水平擴容成功。

刪除集群中的節點

刪除8008從節點

用del-node刪除從節點8008,指定刪除節點ip和端口,以及節點id

[[email protected] redis-5.0.3]# src/redis-cli --cluster del-node 192.168.243.133:8008 840340ce7a2dabdfc6ad40fde17e9e0c803b386c

發現8008已經被移除瞭。

刪除8007主節點

刪除8007節點比刪除8008節點麻煩一點,因為8007節點管理一部分slots,在刪除它之前,需要將slots分配給其他可用的master節點上,否則就會出現數據丟失問題。

1、重新分配8007上的slots

[[email protected] redis-5.0.3]# src/redis-cli --cluster reshard 192.168.243.133:8007

交互流程:

1. How many slots do you want to move (from 1 to 16384)? 600

2. What is the receiving node ID? ec0001bd4282f790017d1e68259c67f2d7037a3c

接收slots的節點ID(這裡是8001的主節點ID)

3. 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: 7cbcddaea49560b2847327b1465e8db7082655d2
Source node #2: done

數據源ID,這裡輸入8007節點的ID,表示600個slots都由8007提供(8007總共就600個slots)

4. Do you want to proceed with the proposed reshard plan (yes/no)? yes

查看集群節點狀態:

2、使用del-node命令刪除8007節點

[[email protected] redis-5.0.3]# src/redis-cli --cluster del-node 192.168.243.133:8007 7cbcddaea49560b2847327b1465e8db7082655d2

再次查看集群狀態:

8007已經被移除

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。